k8s series 23 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来直接访问

1
2
3
4
5
6
7
8
9
10
11
js复制代码#为了不暴露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)的规则都是允许任意全部

1
2
3
4
5
js复制代码[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

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%