惊雷无声 发表于 2024-6-14 23:19:46

全景分析阿里云容器网络数据链路(五):Terway ENI-Trunking

近几年,企业基础设施云原生化的趋势越来越猛烈,从最开始的IaaS化到如今的微服务化,客户的颗粒度精细化和可观测性的需求更加猛烈。容器网络为了满足客户更高性能和更高的密度,也不绝在高速的发展和演进中,这一定对客户对云原生网络的可观测性带来了极高的门槛和寻衅。为了提高云原生网络的可观测性,同时便于客户和前后线同学增加对业务链路的可读性,ACK产研和AES团结共建,合作开发ack net-exporter和云原生网络数据面可观测性系列,帮助客户和前后线同学了解云原生网络架构体系,简化对云原生网络的可观测性的门槛,优化客户运维和售后同学处理疑难题目标体验 ,提高云原生网络的链路的稳定性。
鸟瞰容器网络,整个容器网络可以分为三个部分:Pod网段,Service网段和Node网段。这三个网络要实现互联互通和访问控制,那么实现的技能原理是什么?整个链路又是什么,限定又是什么呢?Flannel, Terway有啥区别?差别模式下网络性能怎样?这些,必要客户在下搭建容器之前,就要依据自己的业务场景举行选择,而搭建完毕后,相关的架构又是无法变化,所以客户必要对每种架构特点要有充实了解。比如下图是个简图,Pod网络既要实现同一个ECS的Pod间的网络互通和控制,又要实现差别ECS Pod间的访问, Pod访问SVC 的后端可能在同一个ECS 也可能是其他ECS,这些在差别模式下,数据链转发模式是差别的,从业务侧表现结果也是不一样的。
https://img-blog.csdnimg.cn/img_convert/f669bdcc85078ec13f34d8ee9392ef7b.webp?x-oss-process=image/format,png
本文是[全景分析容器网络数据链路]第五部分部分,重要介绍Kubernetes Terway ENI-Trunking模式下,数据面链路的转转发链路,一是通过了解差别场景下的数据面转发链路,从而探知客户在差别的场景下访问结果表现的缘故原由,帮助客户进一步优化业务架构;另一方面,通过深入了解转发链路,从而在遇到容器网络抖动时候,客户运维以及阿里云同学可以知道在哪些链路点举行摆设观测手动,从而进一步定界题目方向和缘故原由。
Terway ENI-Trunking 模式架构设计

弹性网卡中继Trunk ENI是一种可以绑定到专有网络VPC范例ECS实例上的虚拟网卡。相比弹性网卡ENI,Trunk ENI的实例资源密度明显提升。启用Terway Trunk ENI功能后,指定的Pod将使用Trunk ENI资源。为Pod开启自定义配置是可选功能,默认环境下创建的Pod,未开启Terway Trunk ENI功能,使用的是共享ENI上的IP地址。只有当您主动声明为指定Pod开启自定义配置后,相应的Pod才能使用Pod自定义配置能力,Terway才可以同时使用共享ENI以及Trunk ENI为Pod分配IP。两种模式共享节点最大Pod数量配额,总摆设密度和开启前一致。
金融、电信,当局等行业对数据信息安全有着非常严酷的数据安全要求,通常,重要的焦点数据会放在自建的机房内,并且对访问此数据的客户端有严酷的白名单控制,通常会限定具体的IP访问源。业务架构上云时,每每是通过专线,VPN等打通自建机房和云上资源打通,由于传统容器中PodIP 是不固定的,NetworkPolicy 只能在集群内生效,这对客户的白名单设置有了非常大的寻衅。ENI 在 Trunk 模式下,可以配置独立的安全组、vSwitch能力,带来更为细化的网络配置能力,提供极具竞争力的容器网络解决方案。
https://img-blog.csdnimg.cn/img_convert/c0002a2c0d3a1caee0b8539428f28512.webp?x-oss-process=image/format,png
在trunking的定名空间内可以看到相关的pod信息和节点信息,其中pod应用的IP 的网络我们稍后会具体分析
https://img-blog.csdnimg.cn/img_convert/fb3a71b64915d195c63129b732532c18.webp?x-oss-process=image/format,png
https://img-blog.csdnimg.cn/img_convert/bde341368cab90b5cf9cf411a3919d62.webp?x-oss-process=image/format,png
https://img-blog.csdnimg.cn/img_convert/080c6534a5de35e6d38c70c5df8653e2.webp?x-oss-process=image/format,png
Pod内有只有指向eth0的默认路由,分析Pod访问任何地址段都是从eth0为统一的出入口
https://img-blog.csdnimg.cn/img_convert/d6ba04f6c05cd4268b5692ae8955f03b.png
那么Pod是怎样ECS OS举行通信呢?在OS层面,我们一看到calicxxxx的网卡,可以看到是附属于eth1的,对于节点和Pod的通信连接,这个雷同于《全景分析阿里云容器网络数据链路(三)—— Terway ENIIP》 ,此处不再举行过多分析。通过OS Linux Routing 我们可以看到,全部目标是 Pod IP 的流量都会被转发到Pod对应的calico虚拟往卡上,到这里为止,ECS OS 和Pod的网络定名空间已经建立好完整的出入链路配置了。
https://img-blog.csdnimg.cn/img_convert/7608d70d47a51c39d729c983d59474cf.webp?x-oss-process=image/format,png
https://img-blog.csdnimg.cn/img_convert/b2f093e78627ff646a344102da7857e9.webp?x-oss-process=image/format,png
让我们把目光聚焦ENI Trunking本身。ENI Truning 是怎样实现Pod的交换机和安全组的配置呢?Terway增加一种名为PodNetworking的自定义资源来描述网络配置。您可以创建多个PodNetworking,来规划差别网络平面。创建PodNetworking资源后,Terway将同步网络配置信息,只有status成为Ready后,该网络资源才能对Pod生效。如下图所示,范例为Elastic,只要namespce的标签的符合tryunking:zoneb, 就给pod使用指定的安全组和交换机。
https://img-blog.csdnimg.cn/img_convert/ffaf2a771681b92b51ecd92d0362fb11.webp?x-oss-process=image/format,png
创建Pod时,Pod将通过标签去匹配PodNetworking。假如Pod没有匹配到任何PodNetworking,则Pod将使用默认的共享ENI上的IP。假如Pod有匹配到PodNetworking,则将使用PodNetworking中定义的配置分配ENI。关于Pod标签的相关内容,请参见标签。
Terway会为这类Pod创建相应的名为PodENI的自定义资源,用于跟踪Pod所使用的资源,该资源由Terway管理,您不可修改该资源。如下trunking 定名空间下的centos-59cdc5c9c4-l5vf9 pod匹配了相应的podnetworking设置,被分配了相应的memeber ENI、对应的Trunking ENI,安全组,交换机和被绑定的ECS实例,这样就实现了Pod维度的交换机,安全组的配置和管理。
https://img-blog.csdnimg.cn/img_convert/7c73a3401176cfa8bef0a6d248eba018.webp?x-oss-process=image/format,png
通过ECS的控制台,我们也可以清晰的看到memenber ENI和Trunking ENI 之间的关系,相应的安全组交换机等等信息。
https://img-blog.csdnimg.cn/img_convert/dee68c2b527ea386a163901a14f74ba3.webp?x-oss-process=image/format,png
https://img-blog.csdnimg.cn/img_convert/cd620831778cf65a10519e013035550a.webp?x-oss-process=image/format,png
通过上面的配置,我们了解怎样去给每个Pod单独配置交换机,安全组等信息,让每个pod在通过Trunking ENI出ECS后,可以主动走到对应的配置Member ENI 上,让这些配置生效。那么全部的配置实在落到宿主机上都是通过相关的计谋实现的,Trunking ENi网卡是怎样知道把对应Pod的流量转发到精确的对应的Member ENI上的呢?这实在通过的vlan来实现的。在tc层面可以看到VLAN ID。所以在egress或者ingress的阶段会打上或者去除VLAN ID。
https://img-blog.csdnimg.cn/img_convert/d41d1039403640d3bd9b6af74071e071.webp?x-oss-process=image/format,png
故Terway ENI-Trunking 模式总体可以归纳为:


[*]弹性网卡中继Trunk ENI是一种可以绑定到专有网络VPC范例ECS实例上的虚拟网卡。相比弹性网卡ENI,Trunk ENI的实例资源密度明显提升
[*]Terway Trunk ENI支持为每个Pod配置固定IP、独立的虚拟交换机、安全组,能提供精细化流量管理、流量隔离、网络计谋配置和IP管理能力。
[*]使用Terway插件,您必要选择较高规格和较新范例的ECS神龙机型,即5代或者6代的8核以上机型,且机型要支持Trunk ENI。更多信息,请参见实例规格族。
[*]单节点所支持的最大Pod数取决于该节点的弹性网卡(ENI)数。共享ENI支持的最大Pod数=(ECS支持的ENI数-1)×单个ENI支持的私有IP数。
[*]Pod安全组规则不会应用到同节点Pod间流量及同节点上节点与Pod间流量。假如您必要限定,可以通过NetworkPolicy举行配置。
[*]Pod和对应MemeberENI流量对应是通过VLAN ID 来实现的。
Terway ENI-Trunking 模式容器网络数据链路分析

可以看到由于可以实现Pod维度的安全组,交换机设置,那么宏观上差别链路访问一定更加趋于复杂,我们可以将Terway ENI-TRunking模式下的网络链路大体分为以Pod IP对外提供服务和以SVC对外提供服务两个大的SOP场景,进一步细分,可以归纳为10个差别的小的SOP场景。
https://img-blog.csdnimg.cn/img_convert/047d504a224fe5b1cc0126c047d8ba3a.webp?x-oss-process=image/format,png
对这11个场景的数据链路梳理合并,这些场景可以归纳为下面10类典型的场景:


[*]通节点访问Pod(雷同or差别安全组)
[*]同节点同安全组Trunk Pod互访(含访问SVC IP,源端和svc后端摆设在同一节点)
[*]同节点差别安全组Trunk Pod互访(含访问SVC IP,源端和svc后端摆设在同一节点)
[*]差别节点同安全组Trunk Pod互访
[*]差别节点差别安全组Trunk Pod互访
[*]集群内源端访问SVC IP(源端和SVC后端差别节点,雷同安全组,含Local模式访问external IP)
[*]集群内源端访问SVC IP(源端和SVC后端差别节点,差别安全组,含Local模式访问external IP)
[*]Cluster模式下,集群内源端访问SVC ExternalIP(源端和SVC后端差别节点,差别安全组)
[*]Cluster模式下,集群内源端访问SVC ExternalIP(源端和SVC后端差别节点,雷同安全组)
[*]集群外访问SVC IP
2.1 场景一:通节点访问Pod(雷同or差别安全组)

环境

https://img-blog.csdnimg.cn/img_convert/d62ab718b0e70b71b69e71174cc286e9.webp?x-oss-process=image/format,png
cn-hongkong.10.0.4.22 节点上存在 nginx-6f545cb57c-kt7r8和 10.0.4.30
内核路由

nginx-6f545cb57c-kt7r8 IP地址 10.0.4.30 ,该容器在宿主机表现的PID是1734171,该容器网络定名空间有指向容器eth0的默认路由
https://img-blog.csdnimg.cn/img_convert/7ee06c83d7536f7122fecafb38b7300e.webp?x-oss-process=image/format,png
https://img-blog.csdnimg.cn/img_convert/2e096bc6de797b3f0f87c4efecc636d3.webp?x-oss-process=image/format,png
该容器eth0在ECS OS 内是通过ipvlan隧道的方式和ECS的附属ENI eth1建立的隧道,同时附属ENI eth1尚有个虚拟的calxxx 网卡
https://img-blog.csdnimg.cn/img_convert/0c18bbc2d992ea8fce61ebc8b51ba85a.webp?x-oss-process=image/format,png
https://img-blog.csdnimg.cn/img_convert/85c7c1ed59fa28304d54c011ef0e51ca.webp?x-oss-process=image/format,png
在ECS OS内,有指向Pod IP,下一跳为为calixxxx的路由,通过前文可以知道calixxx网卡是和每个pod内的veth1构成的pair,所以,pod内访问SVC的CIDR会有指向veth1的路由,不会走默认的eth0路由。故:calixx网卡在这里的重要作用是用于:1. 节点访问Pod 2. 当节点或者Pod访问 SVC的CIDR时,会走ECS OS内核协议栈转换,走到calixxx和veth1访问pod。
https://img-blog.csdnimg.cn/img_convert/be97f8b68b57bebe52246848e19b9c5c.webp?x-oss-process=image/format,png
trunking 定名空间下的nginx-6f545cb57c-kt7r8 pod匹配了相应的podnetworking设置,被分配了相应的memeber ENI、对应的Trunking ENI,安全组,交换机和被绑定的ECS实例,这样就实现了Pod维度的交换机,安全组的配置和管理。
https://img-blog.csdnimg.cn/img_convert/f5486f345b9961e4018a67d5c72ef3e8.webp?x-oss-process=image/format,png
在tc层面可以看到VLAN ID 1027,所以数据流量在egress或者ingress的阶段会打上或者去除VLAN ID。
https://img-blog.csdnimg.cn/img_convert/6e4a8210278273768e790a08a237eb0e.webp?x-oss-process=image/format,png
ENI的网卡所属的安全组可以看到只允许了指定的IP可以访问nginx pod的80 端口。
https://img-blog.csdnimg.cn/img_convert/819e74839ec48324759438144de61b22.webp?x-oss-process=image/format,png
置于数据面流量在OS层面的流量转发逻辑,这个雷同于《全景分析阿里云容器网络数据链路(三)—— Terway ENIIP》 ,不在这里做过多的叙述。
小结

可以访问到目标端
https://img-blog.csdnimg.cn/img_convert/28465353ed537489e6c876bd23371f40.webp?x-oss-process=image/format,png
数据链路转发示意图


[*]会颠末calicao网卡,每个非hostnetwork的pod会和calicao网卡形成veth pair,用于和其他pod或node举行通信
[*]整个链路不会和请求不会颠末pod所分配的ENI,直接在OS的ns中命中Ip rule 被转发1、
[*]整个请求链路是 ECS1 OS -> calixxxx -> ECS1 Pod1
[*]由于是通过 os内核routing转发,不颠末 member eni,所以安全组不生效,此链路与pod所属的member eni的安全组无关
2.2 场景二:同节点同安全组Trunk Pod互访(含访问SVC IP,源端和svc后端摆设在同一节点)

环境

https://img-blog.csdnimg.cn/img_convert/fb6348de4bf7edc2e8abe4a45a4f5942.webp?x-oss-process=image/format,png
cn-hongkong.10.0.4.22 节点上存在 nginx-6f545cb57c-kt7r8,10.0.4.30和busybox-87ff8bd74-g8zs7,10.0.4.24。
内核路由

nginx-6f545cb57c-kt7r8 IP地址 10.0.4.30 ,该容器在宿主机表现的PID是1734171,该容器网络定名空间有指向容器eth0的默认路由
https://img-blog.csdnimg.cn/img_convert/5a2134e1c5b2b5cf4a5fd4382490031e.webp?x-oss-process=image/format,png
https://img-blog.csdnimg.cn/img_convert/6dc0d1fea8776b1dafc236d429fd316a.webp?x-oss-process=image/format,png
该容器eth0在ECS OS 内是通过ipvlan隧道的方式和ECS的附属ENI eth1建立的隧道,同时附属ENI eth1尚有个虚拟的calixxxx 网卡
https://img-blog.csdnimg.cn/img_convert/ec234e11211f370c77795bc04be65e42.webp?x-oss-process=image/format,png
https://img-blog.csdnimg.cn/img_convert/8d27bcf746e1f4ccdaa9a13cc0733b0a.webp?x-oss-process=image/format,png
在ECS OS内,有指向Pod IP,下一跳为为calixxxx的路由,通过前文可以知道calixxx网卡是和每个pod内的veth1构成的pair,所以,pod内访问SVC的CIDR会有指向veth1的路由,不会走默认的eth0路由。故:calixx网卡在这里的重要作用是用于:1. 节点访问Pod 2. 当节点或者Pod访问 SVC的CIDR时,会走ECS OS内核协议栈转换,走到calixxx和veth1访问pod。
https://img-blog.csdnimg.cn/img_convert/170b3085a5c0e9d056b3eb50794be2d5.webp?x-oss-process=image/format,png
trunking 定名空间下的busybox-87ff8bd74-g8zs7 和 nginx-6f545cb57c-kt7r8 pod匹配了相应的podnetworking设置,被分配了相应的memeber ENI、对应的Trunking ENI,安全组,交换机和被绑定的ECS实例,这样就实现了Pod维度的交换机,安全组的配置和管理。
https://img-blog.csdnimg.cn/img_convert/92afb8b319469f857fac4abaee47ba80.webp?x-oss-process=image/format,png
https://img-blog.csdnimg.cn/img_convert/9ea351f9d96ad071e10a9d40b6f04f20.webp?x-oss-process=image/format,png
在tc层面可以看到VLAN ID 1027,所以数据流量在egress或者ingress的阶段会打上或者去除VLAN ID。
https://img-blog.csdnimg.cn/img_convert/d0cc580fee6323b28f8200b2a88261a2.webp?x-oss-process=image/format,png
ENI的网卡所属的安全组可以看到只允许了指定的IP可以访问nginx pod的80 端口。
https://img-blog.csdnimg.cn/img_convert/2923501fe6794ff4559fc7563155ba7a.webp?x-oss-process=image/format,png
置于数据面流量在OS层面的流量转发逻辑,这个雷同于《全景分析阿里云容器网络数据链路(三)—— Terway ENIIP》 ,不在这里做过多的叙述。
小结

可以访问到目标端
https://img-blog.csdnimg.cn/img_convert/f11fb07550ee1ed81cba694297f2692f.webp?x-oss-process=image/format,png
数据链路转发示意图


[*]会颠末calicao网卡,每个非hostnetwork的pod会和calicao网卡形成veth pair,用于和其他pod或node举行通信
[*]整个链路不会和请求不会颠末pod所分配的ENI,直接在OS 的ns中命中 Ip rule 被转发
[*]整个请求链路是ECS1 Pod1 eth0 -> cali1xxxxxx-> cali2xxxxxx -> ECS1 Pod2 eth0
[*]pod属于 同or差别 ENI,链路请求是一致的,不颠末ENI
[*]由于是通过 os内核 routing 转发,不颠末 member eni,所以安全组不生效,此链路与pod所属的member eni的安全组无关
[*]访问Pod IP 和访问 SVC IP(external ipor clusterip)的区别是:
访问SVC IP, SVC 会在源端pod eth0和calixxx网卡捕捉到,在目标端pod的eth0和calixxx时捕捉不到
2.3 场景三:同节点差别安全组Trunk Pod互访(含访问SVC IP,源端和svc后端摆设在同一节点)

环境

https://img-blog.csdnimg.cn/img_convert/c33473460bbe1757e9d9e82b6ca58305.webp?x-oss-process=image/format,png
cn-hongkong.10.0.4.244 节点上存在 nginx-96bb9b7bb-wwrdm,10.0.5.35 和centos-648f9999bc-nxb6l,10.0.5.18。
内核路由

相关的Pod的容器网络定名空间,路由等不在举行过多描述,详情可以见前面两小节。
通过podeni可以看到centos-648f9999bc-nxb6l 所分配的ENI,安全组sg,交换机vsw等.
https://img-blog.csdnimg.cn/img_convert/a7f60c671a6105980ab736aa01ccf7d9.webp?x-oss-process=image/format,png
通过安全组sg-j6ccrxxxx可以看到centos 的pod可以访问外部全部的地址
https://img-blog.csdnimg.cn/img_convert/55df7d51868708048bbda7043fcd1d52.webp?x-oss-process=image/format,png
同理,可以检察出服务端Pod的nginx-96bb9b7bb-wwrdm 的安全组 sg-j6ccrze8utxxxxx 是只允许192.168.0.0/16 可以访问
https://img-blog.csdnimg.cn/img_convert/a3874e1ab16c6c6c6bfbe399103b4806.webp?x-oss-process=image/format,png
https://img-blog.csdnimg.cn/img_convert/95b93ab4600f2634a513b2caca47f8bc.webp?x-oss-process=image/format,png
小结

可以访问到目标端
https://img-blog.csdnimg.cn/img_convert/27afb7798ae0cb670daf6a4e3cf86b80.webp?x-oss-process=image/format,png
数据链路转发示意图


[*]会颠末calicao网卡,每个非hostnetwork的pod会和calicao网卡形成veth pair,用于和其他pod或node举行通信
[*]整个链路不会和请求不会颠末pod所分配的ENI,直接在OS 的ns中命中 Ip rule 被转发
[*]整个请求链路是ECS1 Pod1 eth0 -> cali1xxxxxx-> cali2xxxxxx -> ECS1 Pod2 eth0
[*]pod属于 同or差别 ENI,链路请求是一致的,不颠末ENI
[*]由于是通过 os内核 routing 转发,不颠末 member eni,所以安全组不生效,此链路与pod所属的member eni的安全组无关
[*]访问Pod IP 和访问 SVC IP(external ipor clusterip)的区别是:
访问SVC IP, SVC 会在源端pod eth0和calixxx网卡捕捉到,在目标端pod的eth0和calixxx时捕捉不到
2.4 场景四:差别节点同安全组Trunk Pod互访

环境

https://img-blog.csdnimg.cn/img_convert/4f9f4fe2cc92bf9b000c64435c1b7ad5.webp?x-oss-process=image/format,png
cn-hongkong.10.0.4.20 节点上存在客户端 centos-59cdc5c9c4-l5vf9 和IP 10.0.4.27
cn-hongkong.10.0.4.22 节点上存在服务端 nginx-6f545cb57c-kt7r8 和IP 10.0.4.30
内核路由

相关的Pod的容器网络定名空间,路由等不在举行过多描述,详情可以见前面两小节。通过podeni可以看到centos-59cdc5c9c4-l5vf9 所分配的ENI,安全组sg,交换机vsw等.
通过安全组sg-j6cf3sxrlbuwxxxxx可以看到centos和nginx的 的pod属于同一个安全组 sg-j6cf3sxrlbuxxxxx。
https://img-blog.csdnimg.cn/img_convert/da208d599930a87f78eb11343921b61f.webp?x-oss-process=image/format,png
https://img-blog.csdnimg.cn/img_convert/53716f091512c34f538550a1f478ba7a.webp?x-oss-process=image/format,png
小结

是否可以访问取决于安全组配置
https://img-blog.csdnimg.cn/img_convert/bf1ad855cde365781b719f7cdb1dc022.webp?x-oss-process=image/format,png
数据链路转发示意图


[*]会颠末calicao网卡,每个非hostnetwork的pod会和calicao网卡形成veth pair,用于和其他pod或node举行通信
[*]整个链路不会和请求不会颠末pod所分配的ENI,直接在OS 的ns中命中 Ip rule 被转发
[*]出ECS后,根据要访问的pod和该pod ENI所属vswitch,命中VPC路由规则或者直接VSW上的二层转发;
[*]整个请求链路是 ECS1 Pod1 eth0 -> cali1xxx > Trunk eni ( ECS1) -> Pod1 member eni -> vpc route rule(如有) -> Pod2 member eni -> > Trunk eni ( ECS2) cali2 xxx -> ECS2 Pod1 eth0
[*]由于是通过os内核 routing 转发,颠末 member eni,由于member eni属于同一个安全组,所以安全组内默认是互通的
2.5 场景五:差别节点差别安全组Trunk Pod互访

环境

https://img-blog.csdnimg.cn/img_convert/01e0a8c27ad1224a7befc60aedc0a881.webp?x-oss-process=image/format,png
cn-hongkong.10.0.4.20 节点上存在客户端 centos-59cdc5c9c4-l5vf9 和IP 10.0.4.27
cn-hongkong.10.0.4.244 节点上存在服务端 nginx-96bb9b7bb-wwrdm 和IP 10.0.5.35
内核路由

相关的Pod的容器网络定名空间,路由等不在举行过多描述,详情可以见前面两小节。通过podeni可以看到centos-59cdc5c9c4-l5vf9 所分配的ENI,安全组sg,交换机vsw等。
通过安全组sg-j6cf3sxrlbuwxxxxx可以看到centos 的pod可以访问外部全部的地址
https://img-blog.csdnimg.cn/img_convert/0bd4d567449a3a28b8b295460b8103e9.webp?x-oss-process=image/format,png
https://img-blog.csdnimg.cn/img_convert/5d0e0674dfc70da7307586c355de60eb.webp?x-oss-process=image/format,png
同理,可以检察出服务端Pod的nginx-96bb9b7bb-wwrdm 的安全组 sg-j6ccrze8utxxxxx 是只允许192.168.0.0/16 可以访问
https://img-blog.csdnimg.cn/img_convert/dc5b4ff0e9d5953a49e3ff429d88494d.webp?x-oss-process=image/format,png
https://img-blog.csdnimg.cn/img_convert/49e00269be0b8e683d87721a33571fea.webp?x-oss-process=image/format,png
小结

是否可以访问取决于安全组配置
https://img-blog.csdnimg.cn/img_convert/b86e9c7619e8c80dcd77fa8506067da3.webp?x-oss-process=image/format,png
数据链路转发示意图


[*]会颠末calicao网卡,每个非hostnetwork的pod会和calicao网卡形成veth pair,用于和其他pod或node举行通信
[*]整个链路不会和请求不会颠末pod所分配的ENI,直接在OS 的ns中命中 Ip rule 被转发
[*]整个请求链路是ECS1 Pod1 eth0 -> cali1xxx > Trunk eni ( ECS1) -> Pod1 member eni -> vpc route rule(如有) -> Pod2 member eni -> > Trunk eni ( ECS2) cali2 xxx -> ECS2 Pod1 eth0
[*]由于是通过os内核routing转发,流量会颠末member eni, 是否可以访问成功,安全组配置对此有着决定性的作用。
2.6 场景六:集群内源端访问SVC IP(源端和SVC后端差别节点,雷同安全组,含Local模式访问external IP)

环境

https://img-blog.csdnimg.cn/img_convert/a3a645bf6796d64974bd70028a4f8b98.webp?x-oss-process=image/format,png
https://img-blog.csdnimg.cn/img_convert/a63467898423d9313e71ff3afbe8891d.webp?x-oss-process=image/format,png
cn-hongkong.10.0.4.20 节点上存在客户端 centos-59cdc5c9c4-l5vf9 和IP 10.0.4.27cn-hongkong.10.0.4.22 节点上存在服务端 nginx-6f545cb57c-kt7r8 和IP 10.0.4.30
nginx 的svc的ClusterIP是 192.168.81.92 External IP是 8.210.162.178
内核路由

ENI-Trunking相比力ENIIP来说,只是在VPC侧增加了对应的Truning和Member ENI,在OS内并无区别,此处可以参考《全景分析阿里云容器网络数据链路(三)—— Terway ENIIP》 2.4 小节
小结

是否可以访问取决于安全组配置
https://img-blog.csdnimg.cn/img_convert/c007b6e6c9734f5987251a005be98c0f.webp?x-oss-process=image/format,png
数据链路转发示意图


[*]会颠末calicao网卡,每个非hostnetwork的pod会和calicao网卡形成veth pair,用于和其他pod或node举行通信
[*]整个链路不会和请求不会颠末pod所分配的ENI,直接在OS 的ns中命中 Ip rule 被转发
[*]出ECS后,根据要访问的pod和该pod ENI所属vswitch,命中VPC路由规则或者直接VSW上的二层转发;
[*]整个请求链路是
去方向:ECS1 Pod1 eth0 -> cali1xxx > ECS eth0 -> Pod1 member eni -> vpc route rule(如有) -> Pod2 member eni -> Trunk eni ( ECS2) cali2 xxx -> ECS2 Pod1 eth0
回方向:ECS2 Pod1 eth0 -> Trunk eni ( ECS2) cali2 xxx -> Pod2 member eni -> vpc route rule(如有) -> Pod1 member eni -> Trunk eni ( ECS1) -> cali1xxx -> ECS1 Pod1 eth0


[*]颠末ipvs规则fnat转化, 数据包是以源pod IP 从ECS eth0 出,请求目标pod IP。(访问SVC clusterIP,以及Local模式下访问External IP)
[*]这个颠末的ENI有 ECS1 的eth0, Pod1 member eni,Pod2 member eni。所以这三个网卡的安全组的配置都会影响数据链路的连通性
2.7 场景七:集群内源端访问SVC IP(源端和SVC后端差别节点,差别安全组,含Local模式访问external IP)

环境

https://img-blog.csdnimg.cn/img_convert/01e0a8c27ad1224a7befc60aedc0a881.webp?x-oss-process=image/format,png
https://img-blog.csdnimg.cn/img_convert/2f87fcac173c7d28b167248cdb4208c8.webp?x-oss-process=image/format,png
cn-hongkong.10.0.4.20 节点上存在客户端 centos-59cdc5c9c4-l5vf9 和IP 10.0.4.27cn-hongkong.10.0.4.244 节点上存在服务端 nginx-96bb9b7bb-wwrdm 和IP 10.0.5.35
nginx 的svc的ClusterIP是 192.168.31.83 External IP是 47.243.87.204
内核路由

ENI-Trunking相比力ENIIP来说,只是在VPC侧增加了对应的Truning和Member ENI,在OS内并无区别,此处可以参考《全景分析阿里云容器网络数据链路(三)—— Terway ENIIP》 2.4 小节
小结

是否可以访问取决于安全组配置
https://img-blog.csdnimg.cn/img_convert/921574e066ecd1862d577227bd2f8d2e.webp?x-oss-process=image/format,png
数据链路转发示意图


[*]会颠末calicao网卡,每个非hostnetwork的pod会和calicao网卡形成veth pair,用于和其他pod或node举行通信
[*]整个链路不会和请求不会颠末pod所分配的ENI,直接在OS 的ns中命中 Ip rule 被转发
[*]出ECS后,根据要访问的pod和该pod ENI所属vswitch,命中VPC路由规则或者直接VSW上的二层转发;
[*]整个请求链路是
去方向:ECS1 Pod1 eth0 -> cali1xxx > ECS eth0 -> Pod1 member eni -> vpc route rule(如有) -> Pod2 member eni -> Trunk eni ( ECS2) cali2 xxx -> ECS2 Pod1 eth0
回方向:ECS2 Pod1 eth0 -> Trunk eni ( ECS2) cali2 xxx -> Pod2 member eni -> vpc route rule(如有) -> Pod1 member eni -> Trunk eni ( ECS1) -> cali1xxx -> ECS1 Pod1 eth0


[*]颠末ipvs规则fnat转化, 数据包是以源pod IP 从ECS eth0 出,请求目标pod IP。(访问SVC clusterIP,以及Local模式下访问External IP)
[*]这个颠末的ENI有 ECS1 的eth0, Pod1 member eni,Pod2 member eni。所以这三个网卡的安全组的配置都会影响数据链路的连通性。必要保证 安全组相互放通Pod和ECS的响应IP
2.8 场景八:Cluster模式下,集群内源端访问SVC ExternalIP(源端和SVC后端差别节点,差别安全组)

环境

https://img-blog.csdnimg.cn/img_convert/75f4d09da0653d3fc72a17b758279142.webp?x-oss-process=image/format,png
https://img-blog.csdnimg.cn/img_convert/098e1e738b568a36cdf25cff609b18ed.webp?x-oss-process=image/format,png
https://img-blog.csdnimg.cn/img_convert/a57c44f4abca448070f6edeff12bc5ce.webp?x-oss-process=image/format,png
cn-hongkong.10.0.4.20 节点上存在客户端 centos-59cdc5c9c4-l5vf9 和IP 10.0.4.27cn-hongkong.10.0.4.244 节点上存在服务端 nginx-96bb9b7bb-wwrdm 和IP 10.0.5.35
nginx 的svc的ClusterIP是 192.168.31.83 External IP是 47.243.87.204, ExternalTrafficPolicy 是 Cluster模式
内核路由

ENI-Trunking相比力ENIIP来说,只是在VPC侧增加了对应的Truning和Member ENI,在OS内并无区别,此处可以参考《全景分析阿里云容器网络数据链路(三)—— Terway ENIIP》 2.5 小节
小结

是否可以访问取决于安全组配置
https://img-blog.csdnimg.cn/img_convert/9f4158611046a0b4bd828718ab39e8f5.webp?x-oss-process=image/format,png
数据链路转发示意图


[*]会颠末calicao网卡,每个非hostnetwork的pod会和calicao网卡形成veth pair,用于和其他pod或node举行通信
[*]整个链路不会和请求不会颠末pod所分配的ENI,直接在OS 的ns中命中 Ip rule 被转发
[*]出ECS后,根据要访问的pod和该pod ENI所属vswitch,命中VPC路由规则或者直接VSW上的二层转发;
[*]整个请求链路是ECS1 Pod1 eth0 -> cali1xxx > ECS eth0 -> vpc route rule(如有) -> Pod2 member eni -> Trunk eni ( ECS2) cali2 xxx -> ECS2 Pod1 eth0
[*]颠末ipvs规则fnat转化, 数据包是以源pod IP 从ECS eth0 出,请求目标pod IP。(访问SVC clusterIP,以及Local模式下访问External IP)
[*]这个颠末的ENI有 ECS1 的eth0,Pod2 member eni。所以这两个网卡的安全组的配置都会影响数据链路的连通性。必要保证 安全组相互放通Pod和ECS的响应IP
2.9 场景九:Cluster模式下,集群内源端访问SVC ExternalIP(源端和SVC后端差别节点,雷同安全组)

环境

https://img-blog.csdnimg.cn/img_convert/1f25773895684434823fdd5c99d87948.webp?x-oss-process=image/format,png
https://img-blog.csdnimg.cn/img_convert/b6f4dcbd635dab81cdade0948c78d8f8.webp?x-oss-process=image/format,png
https://img-blog.csdnimg.cn/img_convert/4859b378974a5249e4e4b73451a8d7db.webp?x-oss-process=image/format,png
cn-hongkong.10.0.4.20 节点上存在客户端 centos-59cdc5c9c4-l5vf9 和IP 10.0.4.27cn-hongkong.10.0.4.22 节点上存在服务端 nginx-6f545cb57c-kt7r8 和IP 10.0.4.30
nginx 的svc的ClusterIP是 192.168.81.92 External IP是 8.210.162.178 ExternalTrafficPolicy为Cluster
内核路由

ENI-Trunking相比力ENIIP来说,只是在VPC侧增加了对应的Truning和Member ENI,在OS内并无区别,此处可以参考《全景分析阿里云容器网络数据链路(三)—— Terway ENIIP》 2.5 小节
小结

是否可以访问取决于安全组配置
https://img-blog.csdnimg.cn/img_convert/50cabcbbc2b37b5cb59a86c4b0d80e9a.webp?x-oss-process=image/format,png
数据链路转发示意图


[*]会颠末calicao网卡,每个非hostnetwork的pod会和calicao网卡形成veth pair,用于和其他pod或node举行通信
[*]整个链路不会和请求不会颠末pod所分配的ENI,直接在OS 的ns中命中 Ip rule 被转发
[*]出ECS后,根据要访问的pod和该pod ENI所属vswitch,命中VPC路由规则或者直接VSW上的二层转发;
[*]整个请求链路是ECS1 Pod1 eth0 -> cali1xxx > ECS eth0 -> vpc route rule(如有) -> Pod2 member eni -> Trunk eni ( ECS2) cali2 xxx -> ECS2 Pod1 eth0
[*]颠末ipvs规则fnat转化, 数据包是以源pod IP 从ECS eth0 出,请求目标pod IP。(访问SVC clusterIP,以及Local模式下访问External IP)
[*]这个颠末的ENI有 ECS1 的eth0,Pod2 member eni。所以这两个网卡的安全组的配置都会影响数据链路的连通性。必要保证 安全组相互放通Pod和ECS的响应IP
2.10 场景十:集群外访问SVC IP

环境

https://img-blog.csdnimg.cn/img_convert/ef50b324a8ae4d5804a01ce5403e7c16.webp?x-oss-process=image/format,png
https://img-blog.csdnimg.cn/img_convert/454384a29c88a970c11f4b4761cae431.webp?x-oss-process=image/format,png
https://img-blog.csdnimg.cn/img_convert/04d6b14b55007c406b6319901e3d4072.webp?x-oss-process=image/format,png
cn-hongkong.10.0.4.20 节点上存在客户端 centos-59cdc5c9c4-l5vf9 和IP 10.0.4.27cn-hongkong.10.0.4.22 节点上存在服务端 nginx-6f545cb57c-kt7r8 和IP 10.0.4.30
nginx 的svc的ClusterIP是 192.168.81.92 External IP是 8.210.162.178 ExternalTrafficPolicy为Cluster
SLB相关配置

在SLB控制台,可以看到 lb-j6cmv8aaojf7nqdai2a6a 虚拟服务器组的后端服务器组是两个后端nginx pod 的的ENI eni-j6cgrqqrtvcwhhcyuc28, eni-j6c54tyfku5855euh3db 和 eni-j6cf7e4qnfx22mmvblj0,这几个ENI 都是member ENI
https://img-blog.csdnimg.cn/img_convert/8cc1feba0110dc1eacaa4b17f6bbc7a5.webp?x-oss-process=image/format,png
https://img-blog.csdnimg.cn/img_convert/1887acebd5d9bd4f1b16ac33733d74d0.png
小结

是否可以访问取决于安全组配置

https://img-blog.csdnimg.cn/img_convert/17f99cd3e704278ca1cae85955cf8686.webp?x-oss-process=image/format,png
数据链路转发示意图


[*]会颠末calicao网卡,每个非hostnetwork的pod会和calicao网卡形成veth pair,用于和其他pod或node举行通信
[*]数据链路:client -> SLB -> Pod Member ENI + Pod Port -> Trunking ENI -> ECS1 Pod1 eth0
[*]ExternalTrafficPolicy 为Local或Cluster模式下, SLB只会将 pod分配的member ENI挂在到SLB的虚拟服务器组
[*]SLB转发请求只会转发到目标member ENI上,然后通过vlan发送到Trunk ENI,再由Trunk ENI 转发到 POD
总结

本篇文章重要聚焦ACK 在Terway ENI-Trunking模式下,差别SOP场景下的数据链路转发路径。伴随着客户对业务网络的更精细化的管理需求,引入了Pod维度交换机和安全组配置设置,在Terway ENI-Trunking模式下,一共可以分为10个SOP场景,并对这些场景技能实现原理,云产物配置等逐一梳理并总结,这对我们遇到Terway ENI-Trunking架构下的链路抖动、最优化配置,链路原理等提供了初步指引方向。在Terway ENI-Trunking模式下,利用veth pair来联通宿主机和pod的网络空间,pod的地址是来源于弹性网卡的辅助IP地址,并且节点上必要配置计谋路由来保证辅助IP的流量颠末它所属的弹性网卡,通过此种方式可以实现ENI多Pod共享,大大提升了Pod的摆设密度,同时利用tc egress/ingress 在数据流输入ECS时候,打上或者去除VLAN tag,以便实现数据流量能真正的走到属于他的Member ENI网卡,从而实现精细化的管理。如今微服务越来越盛行,采用sidecar的方式,让每个pod都可以成为一个网络节点,从而实现pod中差别的流量实现差别的网络行为和可观测性,下一系列我们将进入到Terway ENIIP模式的全景分析最后一章——《全景分析阿里云容器网络数据链路(六)—— ASM Istio》。
本系列文章由余凯执笔创作,团结作者:阿里云容器服务 谢石 对本文亦有贡献
原文链接
本文为阿里云原创内容,未经允许不得转载。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 全景分析阿里云容器网络数据链路(五):Terway ENI-Trunking