k8sseries23:calico初级(数据路径)

「这是我参与11月更文挑战的第11天,活动详情查看:2021最后一次更文挑战」。

数据包

calico的数据路径在kubenetes中指的是一个主机上的POD数据包如何到达另一台主机的上POD

数据路径流程图来自官网

image.png

当calico部署成功后,它会在主机上创建多条路由,如下

image.png

IPIP网络模式

因为我们使用的是默认的网络模式IPIP,,另外还有一种支持大型网络BGP模式,以及刚出不久的虚拟子网VXLAN

IPIP模式是基于标准的linux dataplance(基于iptables)的规则实现的

以下截图只显示部分iptables规则,随着节点的增加和pod的增加,规则是越来越多
image.png

路由表

以下路由表显示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