本系列文章由余凯执笔创作,联合作者:阿里云容器服务谢石 对本文亦有贡献
近几年,企业基础设施云原生化的趋势越来越激烈,从最开端的IaaS化到现在的微服务化,客户的颗粒度精细化和可观测性的需求愈加激烈。容器网络为了满足客户更高功用和更高的密度,也一直在高速的发展和演进中,这必定对客户对云原生网络的可观测性带来了极高的门槛和应战。为了提高云原生网络的可观测性,一起便于客户和前后线同学添加对事务链路的可读性,ACK产研和AES联合共建,合作开发ack net-exporter和云原生网络数据面可观测性系列,帮助客户和前后线同学了解云原生网络架构系统,简化对云原生网络的可观测性的门槛,优化客户运维和售后同学处理疑难问题的体会 ,提高云原生网络的链路的稳定性。
俯瞰容器网络,整个容器网络能够分为三个部分:Pod网段,Service网段和Node网段。这三个网络要完成互联互通和拜访操控,那么完成的技能原理是什么?整个链路又是什么,限制又是什么呢?Flannel, Terway有啥差异?不同形式下网络功用怎么?这些,需求客户鄙人建立容器之前,就要依据自己的事务场景进行选择,而建立完毕后,相关的架构又是无法改变,所以客户需求对每种架构特点要有充沛了解。比方下图是个简图,Pod网络既要完成同一个ECS的Pod间的网络互通和操控,又要完成不同ECS Pod间的拜访, Pod拜访SVC 的后端可能在同一个ECS 也可能是其他ECS,这些在不同形式下,数据链转发形式是不同的,从事务侧体现成果也是不一样的。
本文是[全景分析容器网络数据链路]第五部分部分,首要介绍Kubernetes Terway ENI-Trunking形式下,数据面链路的转转发链路,一是通过了解不同场景下的数据面转发链路,然后探知客户在不同的场景下拜访成果体现的原因,帮助客户进一步优化事务架构;另一方面,通过深入了解转发链路,然后在遇到容器网络抖动时分,客户运维以及阿里云同学能够知道在哪些链路点进行布置观测手动,然后进一步定界问题方向和原因。
系列一:全景分析阿里云容器网络数据链路(一)—— Flannel
系列二:全景分析阿里云容器网络数据链路(二)—— Terway ENI
系列三:全景分析阿里云容器网络数据链路(三)—— Terway ENIIP
系列四:全景分析阿里云容器网络数据链路(四)—— Terway IPVLAN+EBPF
系列六:全景分析阿里云容器网络数据链路(六)—— ASM Istio (To be continued)
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才能,带来更为细化的网络装备才能,供给极具竞争力的容器网络解决方案。
在trunking的命名空间内能够看到相关的pod信息和节点信息,其间pod运用的IP 的网络咱们稍后会详细阐明
Pod内有只需指向eth0的默许路由,阐明Pod拜访任何地址段都是从eth0为统一的收支口
那么Pod是怎么ECS OS进行通讯呢?在OS层面,咱们一看到calicxxxx的网卡,能够看到是附归于eth1的,对于节点和Pod的通讯连接,这个类似于《全景分析阿里云容器网络数据链路(三)——TerwayENIIP》 ,此处不再进行过多阐明。通过OS Linux Routing 咱们能够看到,一切意图是 Pod IP 的流量都会被转发到Pod对应的calico虚拟往卡上,到这儿为止,ECS OS 和Pod的网络命名空间现已建立好完好的收支链路装备了。
让咱们把目光聚集ENI Trunking自身。ENI Truning 是怎么完成Pod的交换机和安全组的装备呢?Terway添加一种名为PodNetworking的自定义资源来描绘网络装备。您能够创立多个PodNetworking,来规划不同网络平面。创立PodNetworking资源后,Terway将同步网络装备信息,只需status成为Ready后,该网络资源才干对Pod收效。如下图所示,类型为Elastic,只需namespce的标签的符合tryunking:zoneb, 就给pod运用指定的安全组和交换机。
创立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维度的交换机,安全组的装备和办理。
通过ECS的操控台,咱们也能够清楚的看到memenber ENI和Trunking ENI 之间的关系,相应的安全组交换机等等信息。
通过上面的装备,咱们了解怎么去给每个Pod单独装备交换机,安全组等信息,让每个pod在通过Trunking ENI出ECS后,能够自动走到对应的装备Member ENI 上,让这些装备收效。那么一切的装备其实落到宿主机上都是通过相关的战略完成的,Trunking ENi网卡是怎么知道把对应Pod的流量转发到正确的对应的Member ENI上的呢?这其实通过的vlan来完成的。在tc层面能够看到VLAN ID。所以在egress或许ingress的阶段会打上或许去除VLAN ID。
故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场景。
对这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不同安全组)
环境
cn-hongkong.10.0.4.22 节点上存在 nginx-6f545cb57c-kt7r8和 10.0.4.30
内核路由
nginx-6f545cb57c-kt7r8 IP地址 10.0.4.30 ,该容器在宿主机体现的PID是1734171,该容器网络命名空间有指向容器eth0的默许路由
该容器eth0在ECS OS 内是通过ipvlan隧道的方法和ECS的隶属ENI eth1建立的隧道,一起隶属ENI eth1还有个虚拟的calxxx 网卡
在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。
trunking 命名空间下的nginx-6f545cb57c-kt7r8 pod匹配了相应的podnetworking设置,被分配了相应的memeber ENI、对应的Trunking ENI,安全组,交换机和被绑定的ECS实例,这样就完成了Pod维度的交换机,安全组的装备和办理。
在tc层面能够看到VLAN ID 1027,所以数据流量在egress或许ingress的阶段会打上或许去除VLAN ID。
ENI的网卡所属的安全组能够看到只允许了指定的IP能够拜访nginx pod的80 端口。
置于数据面流量在OS层面的流量转发逻辑,这个类似于《全景分析阿里云容器网络数据链路(三)——TerwayENIIP》 ,不在这儿做过多的叙说。
小结
能够拜访到意图端
数据链路转发示意图
-
会通过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后端布置在同一节点)
环境
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的默许路由
该容器eth0在ECS OS 内是通过ipvlan隧道的方法和ECS的隶属ENI eth1建立的隧道,一起隶属ENI eth1还有个虚拟的calixxxx 网卡
在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。
trunking 命名空间下的busybox-87ff8bd74-g8zs7 和 nginx-6f545cb57c-kt7r8 pod匹配了相应的podnetworking设置,被分配了相应的memeber ENI、对应的Trunking ENI,安全组,交换机和被绑定的ECS实例,这样就完成了Pod维度的交换机,安全组的装备和办理。
在tc层面能够看到VLAN ID 1027,所以数据流量在egress或许ingress的阶段会打上或许去除VLAN ID。
ENI的网卡所属的安全组能够看到只允许了指定的IP能够拜访nginx pod的80 端口。
置于数据面流量在OS层面的流量转发逻辑,这个类似于《全景分析阿里云容器网络数据链路(三)——TerwayENIIP》,不在这儿做过多的叙说。
小结
能够拜访到意图端
数据链路转发示意图
-
会通过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后端布置在同一节点)
环境
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等.
通过安全组sg-j6ccrxxxx能够看到centos 的pod能够拜访外部一切的地址
同理,能够查看出服务端Pod的nginx-96bb9b7bb-wwrdm 的安全组 sg-j6ccrze8utxxxxx 是只允许192.168.0.0/16 能够拜访
小结
能够拜访到意图端
数据链路转发示意图
-
会通过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互访
环境
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。
小结
是否能够拜访取决于安全组装备
数据链路转发示意图
-
会通过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互访
环境
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能够拜访外部一切的地址
同理,能够查看出服务端Pod的nginx-96bb9b7bb-wwrdm 的安全组 sg-j6ccrze8utxxxxx 是只允许192.168.0.0/16 能够拜访
小结
是否能够拜访取决于安全组装备
数据链路转发示意图
-
会通过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)
环境
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内并无差异,此处能够参阅《全景分析阿里云容器网络数据链路(三)——TerwayENIIP》 2.4 末节
小结
是否能够拜访取决于安全组装备
数据链路转发示意图
-
会通过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)
环境
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内并无差异,此处能够参阅《全景分析阿里云容器网络数据链路(三)——TerwayENIIP》 2.4 末节
小结
是否能够拜访取决于安全组装备
数据链路转发示意图
-
会通过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后端不同节点,不同安全组)
环境
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内并无差异,此处能够参阅《全景分析阿里云容器网络数据链路(三)——TerwayENIIP》 2.5 末节
小结
是否能够拜访取决于安全组装备
数据链路转发示意图
-
会通过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后端不同节点,相同安全组)
环境
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内并无差异,此处能够参阅《全景分析阿里云容器网络数据链路(三)——TerwayENIIP》 2.5 末节
小结
是否能够拜访取决于安全组装备
数据链路转发示意图
-
会通过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
环境
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
小结
是否能够拜访取决于安全组装备
数据链路转发示意图
-
会通过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》。