容器网络之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学习笔记,内容来源于极客时间《趣谈网络协议》,推荐该课程。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Calico是一种开源的容器网络解决方案,可以用于部署和管理容器网络。以下是部署Calico容器网络的步骤: 1. 准备环境:首先,需要确保你的服务器或虚拟机运行在一个支持容器运行环境的操作系统上,例如Linux。还要安装容器运行时,例如Docker或Kubernetes。 2. 下载Calico:在https://docs.projectcalico.org/getting-started/kubernetes/下载Calico的压缩包。将其解压到你选择的目录。 3. 配置Calico网络:通过编辑calico.yaml文件来配置Calico网络。可以设置Pod IP池,网络策略和其他选项。根据你的具体需求,进行相应的配置。 4. 部署Calico:运行calicoctl apply -f calico.yaml命令来部署Calico。该命令会将配置应用到Kubernetes集群中,并启动所需的容器和服务。 5. 验证部署:使用calicoctl命令行工具来验证部署是否成功。运行calicoctl node status命令来查看节点的状态。如果所有节点都处于正常状态,则说明部署成功。 6. 配置网络策略:根据需要,你可以通过calico.yaml文件或使用calicoctl命令行工具来配置网络策略。网络策略可用于控制容器间的网络通信,例如允许或禁止特定的流量。 7. 扩展和管理:在部署成功后,你可以使用calicoctl命令行工具管理Calico网络。你可以添加新的节点,更新配置,监控网络状态,解决故障等。可以根据需要进行扩展和管理。 使用Calico来部署容器网络可以提供可靠和高性能的容器网络解决方案。它支持网络策略,使得可以更好地控制容器间的通信。同时,Calico还提供了丰富的工具和命令,方便管理和扩展容器网络
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值