「这是我参与11月更文挑战的第11天,活动详情查看:2021最后一次更文挑战」。
数据包
calico的数据路径在kubenetes中指的是一个主机上的POD数据包如何到达另一台主机的上POD
数据路径流程图来自官网
当calico部署成功后,它会在主机上创建多条路由,如下
IPIP网络模式
因为我们使用的是默认的网络模式IPIP,,另外还有一种支持大型网络BGP模式,以及刚出不久的虚拟子网VXLAN
IPIP模式是基于标准的linux dataplance(基于iptables)的规则实现的
以下截图只显示部分iptables规则,随着节点的增加和pod的增加,规则是越来越多
路由表
以下路由表显示192.168.166.192为当前calico在本机创建的网卡ip
192.168.109.64和192.168.219.0为另外2个节点42,43的calico tunl0 ip
本节点还有一个pod,它的ip是192.168.166.193,可以通过网络接口cali7511027af72来直接访问
#为了不暴露ip,使用x代替
[root@k8s1 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 x.x.1.1 0.0.0.0 UG 100 0 0 enp0s3
10.10.1.0 0.0.0.0 255.255.255.0 U 100 0 0 enp0s3
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
192.168.109.64 x.x.1.42 255.255.255.192 UG 0 0 0 tunl0
192.168.166.192 0.0.0.0 255.255.255.192 U 0 0 0 *
192.168.166.193 0.0.0.0 255.255.255.255 UH 0 0 0 cali7511027af72
192.168.219.0 x.x.1.43 255.255.255.192 UG 0 0 0 tunl0
复制代码
iptables规则
通过过滤cali7511027af72可以查到,已经在当前iptables规则里面,其中fw(来自pod)和tw(去pod)的规则都是允许任意全部
[root@k8s1 ~]# iptables -L | grep cali7511027af72
cali-fw-cali7511027af72 all -- anywhere anywhere [goto] /* cali:QIxsGh4h35ITP8qT */
Chain cali-fw-cali7511027af72 (1 references)
cali-tw-cali7511027af72 all -- anywhere anywhere [goto] /* cali:GeGRNugqesjK7L0e */
Chain cali-tw-cali7511027af72 (1 references)
复制代码
小结
因此calico的数据包流转是基于已经建好的网卡,路由表,以及iptables规则来实现的
跨node访问流程是: Pod-IP->本机IP->目标主机IP->iptables规则->POD-IP
同node之间流程是: Pod1->本机iptables规则->Pod2
近期评论