全景剖析阿里云容器网络数据链路(七):Terway DataPath V2(Terway≥1.8.0)

作者:余凯

前言

近几年,企业基础设施云原生化的趋势越来越强烈,从最开始的IaaS化到现在的微服务化,客户的颗粒度精细化和可观测性的需求更加强烈。容器网络为了满足客户更高性能和更高的密度,也一直在高速的发展和演进中,这必然对客户对云原生网络的可观测性带来了极高的门槛和挑战。为了提高云原生网络的可观测性,同时便于客户和前后线同学增加对业务链路的可读性,ACK产研和AES联合共建,梳理云原生网络数据面可观测性系列,帮助客户和前后线同学了解云原生网络架构体系,简化对云原生网络的可观测性的门槛,优化客户运维和售后同学处理疑难问题的体验 ,提高云原生网络的链路的稳定性。

鸟瞰容器网络,整个容器网络可以分为三个部分:Pod网段,Service网段和Node网段。这三个网络要实现互联互通和访问控制,那么实现的技术原理是什么?整个链路又是什么,限制又是什么呢?Flannel,Terway有啥区别?不同模式下网络性能如何?这些,需要客户在下搭建容器之前,就要依据自己的业务场景进行选择,而搭建完毕后,相关的架构又是无法转变,所以客户需要对每种架构特点要有充分了解。比如下图是个简图,Pod网络既要实现同一个ECS的Pod间的网络互通和控制,又要实现不同ECS Pod间的访问,Pod访问SVC 的后端可能在同一个ECS也可能是其他ECS,这些在不同模式下,数据链转发模式是不同的,从业务侧表现结果也是不一样的。

图片

本文是[全景剖析容器网络数据链路]第七部分,主要介绍Kubernetes Terway DataPath V2模式下,数据面链路的转发链路,一是通过了解不同场景下的数据面转发链路,从而探知客户在不同的场景下访问链路的数据面表现,帮助客户进一步优化业务架构;另一方面,通过深入了解转发链路,从而在遇到容器网络抖动时候,客户运维以及阿里云同学可以知道在哪些链路点进行部署观测手动,从而进一步定界问题方向和原因。

系列一:全景剖析阿里云容器网络数据链路(一)—— Flannel

系列二:全景剖析阿里云容器网络数据链路(二)—— Terway ENI

系列三:全景剖析阿里云容器网络数据链路(三)—— Terway ENIIP

系列四:全景剖析阿里云容器网络数据链路(四)—— Terway IPVLAN+EBPF

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

系列六:全景剖析阿里云容器网络数据链路(六)—— ASM Istio 

Terway DataPath V2 模式架构设计

弹性网卡(ENI)支持配置多个辅助IP的功能,单个弹性网卡(ENI)根据实例规格可以分配6~20个辅助IP,ENI多IP模式就是利用了这个辅助IP分配给容器,从而大幅提高了Pod部署的规模和密度。在网络联通的方式上,Terway目前支持veth pair策略路由和IPVLAN两种方案,但是社区在cilium v1.12版本后废弃了IPVLAN的支持 [ 1] ,为了统一数据面一致性,将ACK的数据面演进和社区保持一致,便于云原生的能力集成,减少差异化。从v1.8.0开始,Terway不再支持IPvlan隧道加速,而采用DataPath V2的方式进行数据面的统一。

图片

Pod所使用的CIDR网段和节点的CIDR是同一个网段。

图片

Pod内部有一张网卡eth0,其中eth0的IP就是Pod的IP,此网卡的MAC地址和控制台上的ENI的MAC地址不一致,同时ECS上有多张ethx的网卡,说明ENI附属网卡并不是直接挂载到了Pod的网络命名空间。

图片

图片

Pod内只有指向eth0的默认路由,说明Pod访问任何地址段都是从eth0为统一的出入口。

图片

同时ECS上有多张ethx的网卡,说明ENI附属网卡并不是直接挂载到了Pod的网络命名空间。

图片

通过OS Linux Routing可以得到,所有目的是Pod IP的流量都会被转发到Pod对应的calixx虚拟往卡上。因此,ECS OS和Pod的网络命名空间已经建立好完整的出入链路配置了。

图片

对于ENI多IP的实现,这个类似于ACK容器网络数据链路(Terway ENIIP) [ 2] 原理,Terway Pod是通过Daemonset的方式部署在每个节点上的。通过terway-cli mapping命令可以得到节点上的附属ENI数量、MAC地址以及每个ENI上的IP。

图片

对于Pod访问SVC,容器是利用各种办法将请求转发到Pod所在的ECS层面,由ECS内的netfilter模块来实现SVC IP的解析。但是由于数据链路需要从Pod的网络命名空间切换到ECS的OS的网络命名空间,中间经过了对此内核协议栈,必然会产生性能损失,如果对高并发和高性能有机制追求,可能并不完全满足客户的需求。相比较IPVLAN模式将eBPF部署在Pod内部用于SVC地址转换,DataPath V2模式的eBPF监听在每个Pod的calixxx网卡上,用于实现Pod和Pod访问的加速,以及Pod访问SVC IP的地址转后的链路加速,模式比较可以参考使用Terway网络插件 [ 3]

BPF Routing

5.10 内核以后,Cilium 新增了 eBPF Host-Routing 功能,新增了bpf_redirect_peer和bpf_redirect_neigh两个redirect方式。

  • bpf_redirect_peer

    数据包不经过宿主机的lxc接口,直接被送到veth pair Pod里面接口eth0上,实现数据包少进入一次cpu backlog queue队列,获得更好的转发性能。

  • bpf_redirect_neigh

    用来填充pod egress流量的src和dst mac地址,流量无需经过kernel的route协议栈处理过程。

故Terway DataPath V2模式总体可以归纳为:

  • 目前低版本内核(低于4.2)不支持eBPF加速,Aliyun2可获得部分加速能力,Aliyun3可获得完整的加速能力。
  • 节点访问Pod需要经过Host的协议栈,Pod和Pod间访问以及Pod访问SVC不经过Host的协议栈。
  • DataPath V2模式下,如果Pod访问SVC IP,SVC IP在Pod的veth pair calixxx网卡上被eBPF转为某个SVC后端Pod的IP,之后数据链路绕过Host协议栈。也就是说SVC IP只会在源端Pod的veth pair被捕获,目的端Pod和目的端的Pod所在ECS都无法被捕获到。

Terway DataPath V2 模式容器网络数据链路剖析

针对容器网络特点,可以将Terway datapathv2模式下的网络链路大体分为以Pod IP对外提供服务和以SVC对外提供服务两个大的SOP场景,进一步细分,可以归纳为11个不同的小的SOP场景。

图片

对这15个场景的数据链路梳理合并,这些场景可以总结为下面8类典型的场景:

  • 访问Pod IP,同节点访问Pod
  • 访问Pod IP,同节点Pod间互访(Pod属于同ENI)
  • 访问Pod IP,同节点Pod间互访(Pod属于不同ENI)
  • 访问Pod IP,不同节点间Pod之间互访
  • 集群内Pod访问的SVC Cluster IP/External IP,SVC后端Pod和客户端Pod属同ECS同ENI
  • 集群内Pod访问的SVC Cluster IP/External IP,SVC后端Pod和客户端Pod属同ECS不同ENI
  • 集群内Pod访问的SVC Cluster IP/External IP,SVC后端Pod和客户端Pod属于不同ECS
  • 集群外访问SVC External IP

场景一:访问Pod IP,同节点访问Pod(含节点访问后端为同一节点的SVC ClusterIP)

环境

xxx.10.0.1.219节点上存在nginx2-7ff4679659-xkpmm,IP地址10.0.0.2。

图片

内核路由

nginx2-7ff4679659-xkpmm,IP地址10.0.0.2,该容器在宿主机中的PID是5630,容器网络命名空间有指向容器eth0的默认路由。

图片

图片

该容器eth0在ECS OS 内对应veth pair是cali10e985649a0,在ECS OS内,有指向Pod IP,下一跳为calixxx的路由,通过前文可以知道calixxx网卡是和每个Pod内的veth1组成的pair。

图片

图片

通过下面的命令我们可以获取到nginx2-7ff4679659-xkpmm,IP地址10.0.0.2被terway分配到了eth2附属网卡。

kubectl --kubeconfig kubeconfig -n kube-system exec -it terway-eniip-v5v2p -c terway – terway-cli mapping

图片

图片

小结

ECS的eth0捕获了从nginx2-7ff4679659-xkpmm返回的数据,但是没有捕获发送数据。

图片

ECS的eth1同样也捕获了从nginx2-7ff4679659-xkpmm返回的数据,但是没有捕获发送数据。

图片

cali10e985649a0可以捕获发和收的数据包。

图片

后续小结不再展示数据报文观测。

数据链路转发示意图(Aliyun2&Aliyun3):

图片

  • 整个链路是经过了ECS和Pod的网络协议栈。
  • 整个请求链路是:ECS OS -> calixxx -> ECS Pod eth0

场景二:访问Pod IP,同节点Pod间互访(Pod属于同ENI)

环境

xxx.10.0.1.219节点上存在nginx2-7ff4679659-xkpmm,IP地址10.0.0.2和centos-5bf8644bcf-jqxpk,IP地址10.0.0.13。

图片

内核路由

centos-5bf8644bcf-jqxpk,IP地址10.0.0.13,该容器在宿主机中的PID是126938,容器网络命名空间有指向容器eth0的默认路由。

图片

图片

该容器eth0在ECS OS 内对应veth pair是calia7003b8c36c,在ECS OS内,有指向Pod IP,下一跳为calixxx的路由,通过前文可以知道calixxx网卡是和每个Pod内的veth1组成的pair。

图片

图片

nginx2-7ff4679659-xkpmm,IP地址10.0.0.2,该容器在宿主机中的PID是5630,容器网络命名空间有指向容器eth0的默认路由。

图片

图片

该容器eth0在ECS OS 内对应veth pair是cali10e985649a0,在ECS OS内,有指向Pod IP,下一跳为calixxx的路由,通过前文可以知道calixxx网卡是和每个Pod内的veth1组成的pair。

图片

通过下面的命令我们可以获取到nginx2-7ff4679659-xkpmm和centos-5bf8644bcf-jqxpk都被terway分配到了eth2同一张附属网卡。

kubectl --kubeconfig kubeconfig -n kube-system exec -it terway-eniip-v5v2p -c terway – terway-cli mapping

图片

图片

小结

Aliyun2:

图片

  • 不会经过分配给Pod的附属网卡。
  • 整个链路是经过了Pod的网络协议栈,链路由Pod的网络命名空间转发到对端时候,会经过eBPF加速绕过OS协议栈。
  • 整个请求链路是:ECS Pod1 -> Pod1 calixxx -> Pod2 calixxx -> ECS Pod2。

Aliyun3:

图片

  • 不会经过分配给Pod的附属网卡。
  • 整个链路会在eBPF的ingress被直接加速到目的Pod内,不会经过目的Pod的calixxx网卡。
  • 整个请求链路是:
  • 去方向:ECS Pod1 -> Pod1 calixxx -> ECS Pod2。
  • 回方向:ECS Pod2 -> Pod2 calixxx -> ECS Pod1。

场景三:访问Pod IP,同节点Pod间互访(Pod属于不同ENI)

环境

xxx.10.0.1.219节点上存在ngxin3-55f5c67988-p4qnb和centos-5bf8644bcf-jqxpk两个Pod,IP地址分别为10.0.0.251和10.0.0.13。

图片

此节点的terway Pod,利用terway-cli mapping的命令得到这两个IP(10.0.0.251和10.0.0.13)都属于不同ENI网卡,在OS层面是被认为是eth1和eth2。

图片

图片

内核路由

centos-5bf8644bcf-jqxpk,IP地址10.0.0.13,该容器在宿主机中的PID是126938,容器网络命名空间有指向容器eth0的默认路由。

图片

图片

该容器eth0在ECS OS 内对应veth pair是calia7003b8c36c,在ECS OS内,有指向Pod IP,下一跳为calixxx的路由,通过前文可以知道calixxx网卡是和每个Pod内的veth1组成的pair。

图片

图片

ngxin3-55f5c67988-p4qnb,IP地址10.0.0.251,该容器在宿主机中的PID是5630,容器网络命名空间有指向容器eth0的默认路由。

图片

图片

该容器eth0在ECS OS 内对应veth pair是cali08203025d22,在ECS OS内,有指向Pod IP,下一跳为calixxx的路由,通过前文可以知道calixxx网卡是和每个Pod内的veth1组成的pair。

图片

小结

Aliyun2:

图片

  • 不会经过分配给Pod的附属网卡。
  • 整个链路是经过了Pod的网络协议栈,链路由Pod的网络命名空间转发到对端时候,会经过eBPF加速绕过OS协议栈
  • 整个请求链路是:ECS Pod1 -> Pod1 calixxx -> Pod2 calixxx -> ECS Pod2。

Aliyun3:

图片

  • 不会经过分配给Pod的附属网卡。
  • 整个链路会在eBPF的ingress被直接加速到目的Pod内,不会经过目的Pod的calixxx网卡。
  • 整个请求链路是:
    • 去方向:ECS Pod1 -> Pod1 calixxx -> ECS Pod2。
    • 回方向:ECS Pod2 -> Pod2 calixxx -> ECS Pod1。

场景四:访问Pod IP,不同节点间Pod之间互访

环境

xxx.10.0.1.219节点上存在centos-5bf8644bcf-jqxpk,IP地址为10.0.0.13。

xxx.10.0.5.27节点上存在nginx1-7bcf4ffdb4-6rsqz,IP地址为10.0.4.121。

图片

可以利用terway-cli show factory的命令得到centos-5bf8644bcf-jqxpk的IP 10.0.0.13属于xxx.10.0.1.219上的MAC地址为00:16:3e:0d:74:23的ENI网卡。

图片

同理可得到nginx1-7bcf4ffdb4-6rsqz的IP 10.0.4.121属于xxx.10.0.5.27上的MAC地址为00:16:3e:0c:ef:6c的ENI网卡。

内核路由

centos-5bf8644bcf-jqxpk,IP地址10.0.0.13,该容器在宿主机中的PID是126938,容器网络命名空间有指向容器eth0的默认路由。

图片

图片

该容器eth0在ECS OS 内对应veth pair是calia7003b8c36c,在ECS OS内,有指向Pod IP,下一跳为calixxx的路由,通过前文可以知道calixxx网卡是和每个Pod内的veth1组成的pair。

图片

图片

nginx1-7bcf4ffdb4-6rsqz,IP地址10.0.4.121,该容器在宿主机中的PID是7745,容器网络命名空间有指向容器eth0的默认路由。

图片

图片

该容器eth0在ECS OS 内对应veth pair是cali06cd16bb25f,在ECS OS内,有指向Pod IP,下一跳为calixxx的路由,通过前文可以知道calixxx网卡是和每个Pod内的veth1组成的pair。

图片

小结

Aliyun2:

图片

  • 会经过宿主机OS的网络命名空间,但协议栈链路会被eBPF加速。
  • 整个链路是需要从客户端Pod所属的ENI网卡出ECS再从目的Pod所属的ENI网卡进入ECS。
  • 整个请求链路是ECS1 Pod1 -> ECS1 Pod1 calixxx -> ECS1 ENI ethx -> VPC -> ECS2 ENI ethx -> ECS2 Pod2 calixxx -> ECS2 Pod2。

Aliyun3:

图片

  • 整个链路是需要从客户端Pod所属的ENI网卡出发,再经过ECS再从目的Pod所属的ENI网卡进入ECS。
  • 整个请求链路是:
    • 去方向:ECS1 Pod1 -> ECS1 Pod1 calixxx -> ECS1 ENI ethx -> VPC -> ECS2 ENI ethx -> ECS2 Pod2。
    • 回方向:ECS2 Pod2 -> ECS2 Pod2 calixxx -> ECS2 ENI ethx -> VPC -> ECS1 ENI ethx -> ECS1 Pod1。

场景五:集群内Pod访问的SVC Cluster IP/External IP,SVC后端Pod和客户端Pod属同ECS同ENI

环境

xxx.10.0.1.219节点上存在nginx2-7ff4679659-xkpmm,IP地址10.0.0.2和centos-5bf8644bcf-jqxpk,IP地址10.0.0.13。

图片

其中nginx2-7ff4679659-xkpmm Pod是SVC nginx2的endpoint。

图片

内核路由

内核路由类似场景2,此处不再叙述。

关于eBPF,在datapathv2中,eBPF监听在OS层面的calixxx网卡上,而非Pod内部。利用cilium去调用eBPF的能力,可以通过图示命令可以得到centos-5bf8644bcf-jqxpk和nginx2-7ff4679659-xkpmm identity ID分别是693和2702。

图片

找到Pod所在的ECS的Terway Pod为terway-eniip-v5v2p,在Terway Pod中运行cilium bpf lb list | grep -A5 192.168.152.119命令可以得到eBPF中对于Cluster IP 192.168.152.119:80记录的后端是10.0.0.2:80。

图片

小结

从客户端Pod centos-5bf8644bcf-jqxpk访问SVC。

图片

客户端的centos-6c48766848-znkl8的calia7003b8c36c网卡观测,可以捕获SVC的IP和客户端的Pod IP。

图片

在这个Pod centos-6c48766848-znkl8所属的附属网卡ENI上观测,未能捕获任何相关流量报文,说明流量从客户端的所属的calixx网卡到ENI之间经过了eBPF转换。

在Pod nginx2-7ff4679659-xkpmmI的cali10e985649a0观测,只能捕获centos和nginx的Pod IP。

图片

cilium提供了一个monitor的功能,使用cilium monitor --related-to < endpoint ID > ,可以得到:源端Pod IP访问SVC IP 192.168.152.119,之后被解析到SVC的后端Pod IP 10.0.0.2,说明SVC IP直接在tc层做了转发。

图片

Aliyun2:

图片

  • 整个链路是经过了Pod的网络协议栈,链路由Pod的网络命名空间转发到对端时候,会经过eBPF加速绕过OS协议栈。
  • 整个链路请求未经过Pod所分配的ENI。
  • SVC IP在客户端Pod的calixxx网卡通过eBPF转换成了SVC后端Pod的IP,后续节点无法捕获SVC IP。
  • 整个请求链路是:ECS Pod1 -> Pod1 calixxx -> Pod2 calixxx -> ECS Pod2。

Aliyun3:

图片

  • 整个链路是经过了Pod的网络协议栈,链路由Pod的网络命名空间转发到对端时候,会经过eBPF加速绕过OS协议栈。

  • 整个链路请求未经过Pod所分配的ENI。

  • SVC IP在客户端Pod的calixxx网卡通过eBPF转换成了SVC后端Pod的IP,后续节点无法捕获SVC IP。

  • 整个链路会在eBPF的ingress被直接加速到目的Pod内,不会经过目的Pod的calixxx网卡。

  • 整个请求链路是:

    • 去方向:ECS Pod1 -> Pod1 calixxx -> ECS Pod2。
    • 回方向:ECS Pod2 -> Pod2 calixxx -> ECS Pod1。

场景六:集群内Pod访问的SVC Cluster IP/External IP,SVC后端Pod和客户端Pod属同ECS不同ENI

环境

xxx.10.0.1.219节点上存在ngxin3-55f5c67988-p4qnb,IP地址10.0.0.251和centos-5bf8644bcf-jqxpk,IP地址10.0.0.13。

图片

其中ngxin3-55f5c67988-p4qnb Pod是SVC nginx3的endpoint。

图片

内核路由

内核路由类似场景3,此处不再叙述。

关于eBPF,在datapathv2中,eBPF监听在OS层面的calixxx网卡上,而非Pod内部。利用cilium去调用eBPF的能力,可以通过图示命令可以得到centos-5bf8644bcf-jqxpk和ngxin3-55f5c67988-p4qnb identity ID分别是693和94。

图片

找到Pod所在的ECS的Terway Pod为terway-eniip-v5v2p,在Terway Pod中运行cilium bpf lb list | grep -A5 192.168.239.183命令可以得到eBPF中对于Cluster IP 192.168.239.183:80记录的后端是10.0.0.2:80。

图片

小结

从客户端Pod centos-5bf8644bcf-jqxpk访问SVC。

图片

客户端的centos-6c48766848-znkl8的calia7003b8c36c网卡观测,可以捕获SVC的IP和客户端的Pod IP。

图片

在Pod centos-6c48766848-znkl8所属的附属网卡ENI和ngxin3-55f5c67988-p4qnb所属的附属网卡ENI上观测,未能捕获到相关流量,说明流量从客户端的所属的calixx网卡上被eBPF转换成SVC相关的endpoint后直接被短路到目的calixxx网卡。

在Pod ngxin3-55f5c67988-p4qnb所属的cali08203025d22观测,只能捕获centos和nginx的Pod IP。

图片

cilium提供了一个monitor的功能,使用cilium monitor --related-to < endpoint ID >,可以得到:源端Pod IP访问SVC IP 192.168.239.183,之后被解析到SVC的后端Pod IP 110.0.0.251,说明SVC IP直接在tc层做了转发。

图片

后续小节如果涉及SVC IP的访问,如有类似,不再做详细的说明。

Aliyun2:

图片

  • 会经过宿主机OS的网络命名空间,但协议栈链路会被eBPF加速。
  • 整个链路请求未经过Pod所分配的ENI。
  • SVC IP在客户端Pod的calixxx网卡通过eBPF转换成了SVC后端Pod的IP,后续节点无法捕获SVC IP。
  • 整个请求链路是ECS1 Pod1 -> ECS1 Pod1 calixxx -> ECS2 Pod2 calixxx -> ECS2 Pod2。

Aliyun3:

图片

  • 不会经过分配给Pod的附属网卡。
  • 整个链路会在eBPF的ingress被直接加速到目的Pod内,不会经过目的Pod的calixxx网卡。
  • SVC IP在客户端Pod的calixxx网卡通过eBPF转换成了SVC后端Pod的IP,后续节点无法捕获SVC IP。
  • 整个请求链路是:
  • 去方向:ECS Pod1 -> Pod1 calixxx -> ECS Pod2。
  • 回方向:ECS Pod2 -> Pod2 calixxx -> ECS Pod1。

场景七:集群内Pod访问的SVC Cluster IP/External IP,SVC后端Pod和客户端Pod属于不同ECS

环境

xxx.10.0.1.219节点上存在centos-5bf8644bcf-jqxpk,IP地址为10.0.0.13。

xxx.10.0.5.27节点上存在nginx1-7bcf4ffdb4-6rsqz,IP地址为10.0.4.121。

图片

其中nginx1-7bcf4ffdb4-6rsqz Pod是SVC nginx1的endpoint。

图片

内核路由

Pod访问SVC的Cluster IP,而SVC的后端Pod和客户端Pod部署在不同ECS上,此架构和场景四:不同节点间Pod之间互访 [ 4] 小节相似,只不过此场景是Pod访问SVC的Cluster IP。对于Cluster IP的eBPF转发进行描述,详情请见场景五和场景六。

小结

Aliyun2:

图片

  • 会经过宿主机OS的网络命名空间,但协议栈链路会被eBPF加速。
  • 整个链路是需要从客户端Pod所属的ENI网卡出ECS再从目的Pod所属的ENI网卡进入ECS。
  • 整个请求链路是ECS1 Pod1 -> ECS1 Pod1 calixxx -> ECS1 ENI ethx -> VPC -> ECS2 ENI ethx -> ECS2 Pod2 calixxx -> ECS2 Pod2。

Aliyun3:

图片

  • 整个链路是需要从客户端Pod所属的ENI网卡出发,再经过ECS再从目的Pod所属的ENI网卡进入ECS。

  • 整个请求链路是:

    • 去方向:ECS1 Pod1 -> ECS1 Pod1 calixxx -> ECS1 ENI ethx -> VPC -> ECS2 ENI ethx -> ECS2 Pod2。
    • 回方向:ECS2 Pod2 -> ECS2 Pod2 calixxx -> ECS2 ENI ethx -> VPC -> ECS1 ENI ethx -> ECS1 Pod1。

场景八:集群外访问SVC External IP

环境

xxx.10.0.5.27 节点上存在nginx1-7bcf4ffdb4-6rsqz,IP地址为10.0.4.121。

图片

通过describe SVC可以得到nginx Pod被加入到了SVC nginx的后端。SVC的Cluster IP是192.168.190.78。

图片

内核路由

在SLB控制台,可以得到lb-3nsj50u4gyz623nitxxx虚拟服务器组的后端服务器组是两个后端nginx Pod的ENI eni-j6cgs979ky3evxxx。

图片

从集群外部角度看,SLB的后端虚拟服务器组是SVC的后端Pod所属的ENI网卡,内网的IP地址就是Pod的地址。

小结

Aliyun2:

图片

  • ExternalTrafficPolicy为Local或Cluster模式下,SLB只会将Pod分配的ENI挂载到SLB的虚拟服务器组。
  • 数据链路会经过Pod的Veth的calixxx网卡
  • 数据链路:Client -> SLB -> Pod ENI + Pod Port -> ECS1 Pod1 calixxx -> ECS1 Pod1 eth0。

Aliyun3:

图片

  • ExternalTrafficPolicy为Local或Cluster模式下,SLB只会将Pod分配的ENI挂载到SLB的虚拟服务器组。
  • 数据链路会被ECS的附属网卡上eBPF加速绕过Pod的Veth的calixxx网卡,直接进到Pod的网络命名空间。
  • 数据链路:Client -> SLB -> Pod ENI + Pod Port -> ECS1 Pod1 eth0。

相关链接:

[1] 废弃了IPVLAN的支持

https://docs.cilium.io/en/v1.12/operations/upgrade/#deprecated-options

[2] ACK容器网络数据链路(Terway ENIIP)

https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/ack-network-fabric-terway-eniip

[3] 使用Terway网络插件

https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/work-with-terway

[4] 不同节点间Pod之间互访https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/ack-network-fabric-terway-eni-trunking#RS9Nc

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/588928.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

qt学习篇---界面按键关联(信号和槽)

目录 1.qt基础 2.做一个界面 创建project UI界面设计 信号和槽 1.控件改名字 2.什么是信号和槽 3.怎么关联信号和槽 自动关联 手动关联 1.qt基础 qt可移植性强&#xff0c;不久会用到MCU。很有意义学习 2.做一个界面 创建project 不要中文路径 选择QWidget .pro文件…

ASP.NET实验室预约系统的设计

摘 要 实验室预约系统的设计主要是基于B/S模型&#xff0c;在Windows系统下&#xff0c;运用ASP.NET平台和SQLServer2000数据库实现实验室预约功能。该设计主要实现了实验室的预约和管理功能。预约功能包括老师对实验室信息、实验项目和实验预约情况的查询以及对实验室的预约…

LeetCode 69—— x 的平方根

阅读目录 1. 题目2. 解题思路一3. 代码实现一4. 解题思路二5. 代码实现二 1. 题目 2. 解题思路一 二分查找法&#xff0c;对于整数 i ∈ [ 0 , x ] i \in [0,x] i∈[0,x]&#xff0c;我们判断 i 2 i^2 i2 和 x x x 的关系&#xff0c;然后找到最后一个平方小于等于 x x x …

向量语义学

书籍&#xff1a;Vector Semantics 作者&#xff1a;Andrs Kornai 出版&#xff1a;Springer Singapore 书籍下载-《向量语义学》本书通过提出一个以线性多面体术语表达的形式理论来弥合这一差距&#xff0c;该理论将字向量和概念结构进行了概括&#xff0c;将每个词典定义视…

45. UE5 RPG 使用元属性(Meta Attributes)以及使用Set by Caller修改伤害

在RPG游戏中&#xff0c;我们是不会直接修改生命值的属性&#xff0c;是因为在修改角色属性时&#xff0c;需要获取角色的属性并进行复杂的计算&#xff0c;所以&#xff0c;我们正常情况下使用元属性&#xff08;Meta Attributes&#xff09;作为计算的中间的媒。在服务器上先…

前端-React项目初始化

大家好我是苏麟 , 今天聊聊前端依赖 Ant Desgin Pro 快速初始化项目 . Ant Desgin Pro 官网 : 开始使用 - Ant Design Pro 初始化项目 找到文档->快速上手 脚手架命令 : # 使用 npm npm i ant-design/pro-cli -g创建项目命令 : pro create 项目名称 选择简单还是全量 : …

Python | Leetcode Python题解之第64题最小路径和

题目&#xff1a; 题解&#xff1a; class Solution:def minPathSum(self, grid: List[List[int]]) -> int:if not grid or not grid[0]:return 0rows, columns len(grid), len(grid[0])dp [[0] * columns for _ in range(rows)]dp[0][0] grid[0][0]for i in range(1, r…

五大开放式耳机推荐,选对耳机让运动更带感!

看似精彩的户外运动经历背后&#xff0c;其实是枯燥的体能运动和训练&#xff0c;以及独自长途和长时间旅行伴随的孤独感&#xff0c;而排解这些不良情绪的最佳方式就是音乐。如果你希望在运动、舒适、安全和音质之间获得一个最佳平衡&#xff0c;那相比入耳式耳机&#xff0c;…

71.网络游戏逆向分析与漏洞攻防-角色与怪物信息的更新-分析并利用角色与怪物创建的数据包

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果 现在的代码都是依据数据包来写的&#xff0c;如果看不懂代码&#xff0c;就说明没看懂数据包…

『项目整理』易CAR通项目说明文档-我的第一款APP

『项目整理』易CAR通项目说明文档-我的第一款APP 项目介绍功能介绍技术栈介绍实现效果如何运行备注 项目介绍 易CAR通项目是我的第一个Android项目。是一款结合了AR技术的模仿懂车帝的看车软件。因为是初学&#xff0c;所示实现的效果差强人意&#xff0c;很多的功能界面只实现…

文件批量高效管理,批量将PDF类型文件移动到指定文件夹里,实现文件高效管理

文件的管理与整理成为了我们生活中不可或缺的一部分。面对堆积如山的PDF文件&#xff0c;你是否也曾感到手足无措、焦头烂额&#xff1f;现在&#xff0c;有了我们的批量文件管理工具&#xff0c;PDF文件的管理将变得前所未有的高效与简单&#xff01; 首先&#xff0c;我们要…

对于Servlet项目无法显示css样式

有可能你在过滤器中拦截了.css文件&#xff0c;并且你设置了响应格式导致的&#xff0c;就比如我的项目如下图所示 删除servletResponse.setContentType("text/html; charsetUTF-8");即可

Android C++ 开发调试 LLDB 工具的使用

文章目录 调试环境准备基础命令Breakpoint CommandsWatchpoint CommandsExamining VariablesEvaluating ExpressionsExamining Thread StateExecutable and Shared Library Query Commands 参考&#xff1a; Android 中在进行 NDK 开发的时候&#xff0c;我们经常需要进行 C 代…

MySQL——88张表汇总——DDL+外键

外键er图 88张表 /* Navicat MySQL Data TransferSource Server : MyList Source Server Version : 50726 Source Host : localhost:3309 Source Database : schooldbTarget Server Type : MYSQL Target Server Version : 50726 File Encoding …

【C/C++基础实战】:用C++实现通讯录管理系统——含完整源码

文章目录 通讯录管理系统一、系统需求以及成品演示二、代码实现三、完整代码 通讯录管理系统 一、系统需求以及成品演示 1.1 系统需求 通讯录是一个可以记录亲人、好友信息的工具。这里利用C来实现一个通讯录管理系统 系统中需要实现的功能如下&#xff1a; 添加联系人&am…

《HCIP-openEuler实验指导手册》2.1安装和测试Nginx

知识点 Nginx (发音为 “engine x”) 是一个开源的高性能 HTTP 和反向代理服务器&#xff0c;也是一个 IMAP/POP3/SMTP 代理服务器。由 Igor Sysoev 创建并维护&#xff0c;其设计用于处理高并发连接&#xff0c;具有高度的可扩展性和灵活性。 安装步骤 yum方式安装 dn…

Kubernetes - Dashboard 配置用户名密码方式登录

Kubernetes - Dashboard 配置用户名密码方式登录 前言&#xff1a; 为了 K8s 集群安全&#xff0c;默认情况下 Dashboard 以 Token的形式登录的&#xff0c;那如果我们想以用户名/密码的方式登录该怎么操作呢&#xff1f;其实只需要我们创建用户并进行 ClusterRoleBinding绑定即…

挑战一周完成Vue3项目Day4: 用户管理+角色管理+菜单管理+首页+暗黑模式/主题切换

一、用户管理 1.静态搭建 src/views/acl/user/index.vue <template><el-card style"height:80px;"><el-form :inline"true" class"form"><el-form-item label"用户名&#xff1a;"><el-input placehold…

JAVA面试专题-微服务篇

Spring cloud Spring Cloud 5大组件有哪些 注册中心/配置中心&#xff1a;nacos 负载均衡&#xff1a;Ribbon 服务远程调用&#xff1a;Feign 服务保护&#xff1a;sentinel 服务网关&#xff1a;Gateway 微服务注册和发现 nacos和eureka的区别 负载均衡 微服务向Ribbon发送…

Vue 之 在当前页面的实现分页效果

目录 场景实现 场景 假设&#xff0c;我们现在有这么一个需求&#xff1a; 上述图片的空白内容是活动的&#xff0c;由下面的两个按钮控制上一页、下一页&#xff1b;我们应该可以怎么去实现&#xff1f; 实现 思路&#xff1a; 其实这个问题&#xff0c;我们仿照其他的UI框…
最新文章