Flannel 模式下,ECS只有一个主网卡ENI,无其他附属网卡,ECS和节点上的Pod与外部通信都需要通过主网卡进行。ACK Flannel会在每个节点创建cni0虚拟网卡作为Pod网络和ECS的主网卡eth0之间的桥梁。
集群的每个节点会起一个flannel agent,并且会给每个节点预分配一个Pod CIDR,这个Pod CIDR是ACK集群的Pod CIDR的子集。
容器的网络命名空间内会有一个eth0的虚拟网卡,同时存在下一跳指向该网卡的路由,该网卡会作为容器和宿主内核进行数据交换的出入口。容器和宿主机之间的数据链路是通过veth pair进行交换的,现在我们已经找到veth pair其中一个,如何去找另一个veth呢?
如上图所示,我们可以容器的网络命名空间中通过ip addr 看到一个eth0@if8的标志位,其中‘81' 这个将会协助我们在ECS的OS内找到和容器网络命名空间中的veth pair相对一个。在ECS OS 内我们通过ip addr | grep 81: 可以找到vethd7e7c6fd 这个虚拟网卡,这个就是veth pair在ECS OS侧相对的那一个。
到目前为止容器内和OS 数据链路已经建立链接了,那么ECS OS内对于数据流量是怎么判断去哪个容器呢?
通过OS Linux Routing我们可以看到,所有目的是Pod CIDR 网段的流量都会被转发到cni0这张虚拟网卡,那么cni0是通过bridge方式将不同目的数据链路指向到不同的vethxxx。到这里为止,ECS OS和Pod的网络命名空间已经建立好完整的出入链路配置了。
1) Flannel 模式容器网络数据链路剖析
针对容器网络特点,我们可以将Flannel模式下的网络链路大体分为以Pod IP对外提供服务和以SVC对外提供服务两个大的SOP场景,进一步细分可以拆分到10个不同的小的SOP场景。
对这10个场景的数据链路梳理合并,这些场景可以归纳为下面5类典型的场景:
● Client和服务端Pod部署于同一个ECS;
● Client和服务端Pod部署于不同ECS;
● 访问SVC External IP,ExternalTrafficPolicy 为Cluster时,Client和服务端Pod部署于不同ECS,其中client为集群外;
● 访问SVC External IP,ExternalTrafficPolicy 为Local时, Client和服务端Pod部署于不同ECS,其中client为集群内;
● 访问SVC External IP,ExternalTrafficPolicy 为Local时, Client和服务端Pod部署于不同ECS,其中client为集群外;
2) 场景一:Client和服务端Pod部署于同一个ECS
此场景包含下面几个子场景,数据链路可以归纳为一种:
● 以Pod IP对外提供服务,Client和Pod部署于同一个节点;
● 以SVC ClusterIP对外提供服务,Client和SVC 后端Pod部署于同一节点;
● 以SVC ExternalIP对外提供服务,ExternalTrafficPolicy为Cluster/Local情况下,Client和SVC后端Pod部署于同一节点;
环境
ap-southeast-1.10.0.0.180节点上存在两个pod:centos-67756b6dc8-rmmxt IP地址172.23.96.23和nginx-7d6877d777-6jkfg和172.23.96.24。
内核路由
centos-67756b6dc8-rmmxt IP地址172.23.96.23,该容器在宿主机表现的PID是503478,该容器网络命名空间有指向容器eth0的默认路由。
该容器eth0在ECS OS 内对应veth pair是vethd7e7c6fd。
通过上述类似的办法,可以找到nginx-7d6877d777-6jkfg IP地址172.23.96.24,该容器在宿主机表现的PID是2981608,该容器eth0在ECS OS 内对应veth pair是vethd3fc7ff4。
在ECS OS内,有指向Pod CIDR,下一跳为cni0的路由,以及cni0中有两个容器的vethxxx 网桥信息。
小结
可以访问到目的端
数据链路转发示意图:
内核协议栈示意图:
● 数据链路:ECS1 Pod1 eth0 -> vethxxx1 -> cni0 -> vethxxxx2 ->ECS1 Pod2 eth0;
● 数据链路要经过三次内核协议栈,分别是Pod1协议栈,ECS OS协议栈和Pod2协议栈;
更多精彩内容,欢迎观看:
《云原生网络数据面可观测性最佳实践》——二、全景剖析阿里云容器网络数据链路——1. Flannel 模式架构设计(中):https://developer.aliyun.com/article/1221680?spm=a2c6h.13148508.setting.21.15f94f0eeQ735s