• 容器网络之Calico


    Calico 网络的大概思路,即不走 Overlay 网络,不引入另外的网络性能损耗,而是将转发全部用三层网络的路由转发来实现。

    首先,如果全部走三层的路由规则,没必要每台机器都用一个 docker0,从而浪费了一个 IP 地址,而是可以直接用路由转发到 veth pair 在物理机这一端的网卡。同样,在容器内,路由规则也可以这样设定:把容器外面的 veth pair 网卡算作默认网关,下一跳就是外面的物理机。
    在这里插入图片描述
    Calico 中还实现了灵活配置网络策略 Network Policy,可以灵活配置两个容器通或者不通。这个怎么实现呢?
    在这里插入图片描述
    虚拟机中的安全组,是用 iptables 实现的。Calico 中也是用 iptables 实现的。这个图里的内容是 iptables 在内核处理网络包的过程中可以嵌入的处理点。Calico 也是在这些点上设置相应的规则。
    在这里插入图片描述
    当网络包进入物理机上的时候,进入 PREOUTING 规则,这里面有一个规则是 cali-fip-dnat,这是实现浮动 IP(Floating IP)的场景,主要将外网的 IP 地址 dnat 作为容器内的 IP 地址。在虚拟机场景下,路由器的网络 namespace 里面有一个外网网卡上,也设置过这样一个 DNAT 规则。

    接下来可以根据路由判断,是到本地的,还是要转发出去的。

    如果是本地的,走 INPUT 规则,里面有个规则是 cali-wl-to-host,wl 的意思是 workload,也即容器,也即这是用来判断从容器发到物理机的网络包是否符合规则的。这里面内嵌一个规则 cali-from-wl-dispatch,也是匹配从容器来的包。如果有两个容器,则会有两个容器网卡,这里面内嵌有详细的规则“cali-fw-cali 网卡 1”和“cali-fw-cali 网卡 2”,fw 就是 from workload,也就是匹配从容器 1 来的网络包和从容器 2 来的网络包。

    如果是转发出去的,走 FORWARD 规则,里面有个规则 cali-FORWARD。这里面分两种情况,一种是从容器里面发出来,转发到外面的;另一种是从外面发进来,转发到容器里面的。

    第一种情况匹配的规则仍然是 cali-from-wl-dispatch,也即 from workload。第二种情况匹配的规则是 cali-to-wl-dispatch,也即 to workload。如果有两个容器,则会有两个容器网卡,在这里面内嵌有详细的规则“cali-tw-cali 网卡 1”和“cali-tw-cali 网卡 2”,tw 就是 to workload,也就是匹配发往容器 1 的网络包和发送到容器 2 的网络包。

    接下来是匹配 OUTPUT 规则,里面有 cali-OUTPUT。接下来是 POSTROUTING 规则,里面有一个规则是 cali-fip-snat,也即发出去的时候,将容器网络 IP 转换为浮动 IP 地址。在虚拟机场景下,路由器的网络 namespace 里面有一个外网网卡上,也设置过这样一个 SNAT 规则。

    此文章为10月Day1学习笔记,内容来源于极客时间《趣谈网络协议》,推荐该课程。

  • 相关阅读:
    python类对象
    数据结构 每日一练:将带头结点的单链表就地逆置(视频讲解两种方法)
    mysql中的全文索引
    网络编程 tcp/ip下的c/s模型介绍
    【Spring Security 系列】(三)剖析基础组件之授权功能
    多头风险管理和空头风险管理
    开源游戏服务器框架NoahGameFrame(NF)客户端的Log日志系统(五)
    【开源】JAVA+Vue.js实现高校学生管理系统
    【C++基础】观察者模式(“发布-订阅”模式)
    el-select 选中的值与展示的不一样
  • 原文地址:https://blog.csdn.net/key_3_feng/article/details/133458005