更多精彩内容,欢迎观看:
《云原生网络数据面可观测性最佳实践》——二、全景剖析阿里云容器网络数据链路——6. ASM Istio 模式架构设计(上):https://developer.aliyun.com/article/1221386?groupCode=supportservice
4) 场景三:同节点不同安全组TrunkPod互访(含访问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时捕捉不到;
5) 场景四:不同节点同安全组TrunkPod互访
环境
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属于同一个安全组,所以安全组内默认是互通的;
6) 场景五:不同节点不同安全组TrunkPod互访
环境
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,是否可以访问成功,安全组配置对此有着决定性的作用;
7) 场景六:集群内源端访问SVC IP(源端和SVC后端不同节点,相同安全组,含Local模式访问external IP)
环境
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。
nginx的svc的ClusterIP是192.168.81.92 External IP是8.210.162.178。
内核路由
ENI-Trunking相比较ENIIP来说,只是在VPC侧增加了对应的Truning和Member ENI,在OS内并无区别,此处可以参考《Terway ENIIP模式架构》群内非SVC后端pod所在节点访问SVC ClusterIP。
小结
是否可以访问取决于安全组配置
数据链路转发示意图:
● 会经过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。所以这三个网卡的安全组的配置都会影响数据链路的连通性;
8) 场景七:集群内源端访问SVC IP(源端和SVC后端不同节点,不同安全组,含Local模式访问external IP)
环境
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。
nginx的svc的ClusterIP是192.168.31.83 External IP是47.243.87.204。
内核路由
ENI-Trunking相比较ENIIP来说,只是在VPC侧增加了对应的Truning和Member ENI,在OS内并无区别,此处可以参考《Terway ENIIP模式架构》Cluster模式,集群内非SVC后端pod所在节点访问SVC External IP。
小结
是否可以访问取决于安全组配置
数据链路转发示意图:
● 会经过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;
更多精彩内容,欢迎观看:
《云原生网络数据面可观测性最佳实践》——二、全景剖析阿里云容器网络数据链路——6. ASM Istio 模式架构设计(下):https://developer.aliyun.com/article/1221384?groupCode=supportservice