《云原生网络数据面可观测性最佳实践》——二、全景剖析阿里云容器网络数据链路——4. Terway IPVLAN+EBPF 模式架构设计(中)

简介: 《云原生网络数据面可观测性最佳实践》——二、全景剖析阿里云容器网络数据链路——4. Terway IPVLAN+EBPF 模式架构设计(中)

更多精彩内容,欢迎观看:

《云原生网络数据面可观测性最佳实践》——二、全景剖析阿里云容器网络数据链路——4. Terway IPVLAN+EBPF 模式架构设计(上):https://developer.aliyun.com/article/1221415?groupCode=supportservice


5) 场景四:不同节点间Pod之间互访

环境

image.png cn-hongkong.10.0.3.15节点上存在 nginx-7d6877d777-j7dqz,IP分为10.0.3.38。

cn-hongkong.10.0.3.93节点上存在 centos-6c48766848-dz8hz,IP分为10.0.3.127

image.png

 通过此节点的terwayPod,我们可以利用 terway-cli show factory的命令看到 nginx-7d6877d777-j7dqz IP 10.0.3.5 属于cn-hongkong.10.0.3.15 上的MAC地址为00:16:3e:04:08:3a的ENI网卡。

image.png

 通过此节点的terwayPod,我们可以利用 terway-cli show factory的命令看到 centos-6c48766848-dz8hz IP  10.0.3.127 属于cn-hongkong.10.0.3.93 上的MAC地址为00:16:3e:02:20:f5的ENI网卡。

内核路由

centos-6c48766848-dz8hz IP地址10.0.3.127,该容器在宿主机表现的PID是1720370,该容器网络命名空间有指向容器eth0的默认路由。有且只有一条,说明pod访问所有地址都需要通过该默认路由。

image.png

image.png nginx-7d6877d777-j7dqz IP地址10.0.3.38。该容器在宿主机表现的PID是329470,该容器网络命名空间有指向容器eth0的默认路由。

image.pngimage.png

ECS OS 内是通过ipvlan隧道的方式和ECS的附属ENI eth1建立的隧道,通过mac地址一样可以看到两个pod 分配的ENI地址centos-6c48766848-dz8hzimage.png

nginx-7d6877d777-j7dqz

image.png

 

小结

可以访问到目

 

此处不再对抓包进行展示,从客户端角度,数据流可以在centos-6c48766848-dz8hz的网络命名空间 eth0,以及 此pod所部署的ECS 对应的ENI eth1上可以被捕获到;从服务端角度,数据流可以在nginx-7d6877d777-j7dqz的网络命名空间 eth0,以及 此pod所部署的ECS对应的ENI eth1上可以被捕获到。

 

数据链路转发示意图:

 image.png

 

不会经过任何宿主机ECS网络空间中间节点

整个链路是需要从客户端pod所属ENI网卡出ECS再从目POD所属ENI网卡进入ECS

整个请求链路是ECS1 Pod1 ->ECS1 ethx -> VPC ->ECS2 ethy ->ECS2 Pod2

 

6) 场景五:集群内Pod访问的SVC ClusterIP(含Terway版本≥1.2.0,访问ExternalIP),SVC后端Pod和客户端Pod配属同一个ENI

环境

image.png

 

cn-hongkong.10.0.3.15节点上存在 nginx-7d6877d777-j7dqz和centos-6c48766848-znkl8 两个pod,IP分别为10.0.3.38和10.0.3.5。

image.png

 

通过此节点的terwayPod,我们可以利用 terway-cli show factory的命令看到 这两个IP (10.0.3.5和10.0.3.38)都属于同一个MAC地址00:16:3e:04:08:3a,说明这两个IP属于同一个ENI,进而可以推断出nginx-7d6877d777-j7dqz和centos-6c48766848-znkl8 属于同一个ENI 网卡。

 

通过describe svc 可以看到 nginxPod 被加入到了 svc nginx的后端。SVC的CLusterIP是192.168.27.242。如果是集群内访问External IP,对于 Terway 版本≥ 1.20 来说,集群内访问SVC的ClusterIP或External IP,整个链路架构是一致的,此小节不在针对External IP单独说明,统一用ClusterIP作为示例(Terway版本< 1.20 情况下,访问External IP,会在后续小节说明)。

image.png

内核路由

centos-6c48766848-znkl8 IP地址10.0.3.5,该容器在宿主机表现PID是2747933,该容器网络命名空间有指向容器eth0的默认路由。有且只有一条,说明pod访问所有地址都需要通过该默认路由。

image.png

image.png

 

nginx-7d6877d777-j7dqz IP地址10.0.3.38。该容器在宿主机表现的PID是329470,该容器网络命名空间有指向容器eth0的默认路由。

image.png

image.png

 在ACK中,是利用cilium去调用ebpf的能力,可以通过下面的命令可以看到 nginx-7d6877d777-j7dqz和centos-6c48766848-znkl8 identity ID 分别是634和1592

image.png

 通过centos-6c48766848-znkl8Pod,可以找到此pod所在的ECS的TerwayPod为terway-eniip-6cfv9,在TerwayPod 中运行下面的cilium bpf lb list | grep -A5 192.168.27.242命令可以看到 ebpf中对于CLusterIP 192.168.27.242:80记录的后端是10.0.3.38:80。这上述的一切都是通过EBPF记录到了源端Pod centos-6c48766848-znkl8Pod的tc中。

 image.png

image.png

 

通过以上,可以理论推断出,如果集群内pod访问 SVCCLusterIP or External IP地址(Terway ≥ 1.20)数据流会在pod的网络命名空间内就被转化为相应SVC后端Pod IP后,再被从Pod网络命名空间eth0 发出pod,进入到pod所在ECS,然后通过IPVLAN隧道,转发到同ECS或通过相应ENI出ECS也就是说,我们如果抓包,不管在pod内抓包还是在ECS抓包,都无法捕获到SVCIP,只能捕获到Pod IP

 

EBPF技术让集群内访问避开了ECS OS内部内核协议栈和减少了部分pod内核协议栈,大大提高了网络性能和Pod密度,带来了不弱于单独ENI网络性能,但是此方式会对我们观测带来巨大改变和影响

 

试想一下,如果您集群内存在互相调用情况,这个调用IP 是SVCIP,加入此SVC后端所引用Pod有几十上百个源端pod调用时候出现问题,一般情况下报错‘connect to  failed’ 等类似信息,传统抓包手段是在源端Pod内,目Pod,ECS上等进行抓包,筛选 SVC IP 来串起来不同包之间同一个数据流,可是ebpf情况下由于上述技术实现,造成无法捕获SVC IP,是不是对偶发抖动情况下观测带来了巨大挑战呢?

 

小结

可以访问到目

 

从客户端Pod centos-6c48766848-znkl8 访问SVC,我们可以看到访问成功

image.png

客户端的centos-6c48766848-znkl8 网络命名空间内eth0 抓包,抓包地址是目的SVC的IP和SVC的后端POD IP。可以看到只能抓到SVC 后端Pod IP,无法捕获到SVC IP

image.png

 目的端SVC的后端POD nginx-7d6877d777-zp5jg 网络命名空间 eth0 抓包,抓包地址是目的SVC的IP和Pod IP。可以看到只能抓到客户端Pod IP

image.png

 

cilium 提供了一个monitor的功能,我们使用cilium monitor --related-to ,可以看到,源端POD IP 访问SVCIP 192.168.27.242,之后被解析到SVC的后端POD IP 10.0.3.38。说明SVC IP直接在tc层做了转发,这也解释了为什么抓包无法抓到SVC IP,因为抓包是在netdev上抓的,此时已经过了协议栈和tc。

image.png

 

后续小节如果涉及SVC IP的访问,如有类似,不再做详细的抓包展示。

数据链路转发示意图:

image.png

 

不会经过任何宿主机ECS网络空间中间节点

整个链路不会和请求不会经过pod所分配ENI,直接在OSns中命中Ip rule 被转发到对端pod

整个请求链路是ECS1 Pod1 ->ECS1 Pod2 (发生在ECS内部),和IPVS相比,避免了calico网卡设备两次转发,性能是更好

ECS1 Pod1eth0网卡无法捕捉到 SVC IP,SVC IP 在Pod网络命名空间内已经通过ebpf转换成了SVC后端PodIP

 

1) 场景六:集群内Pod访问的SVC ClusterIP(含Terway版本≥1.2.0,访问ExternalIP),SVC后端Pod和客户端Pod配属不同ENI(同ECS)

环境

image.png

 cn-hongkong.10.0.3.15节点上存在 nginx-7d6877d777-j7dqz和busybox-d55494495-8t677 两个pod,IP分别为10.0.3.38和10.0.3.22。

image.png 

通过此节点的terwayPod,我们可以利用 terway-cli show factory的命令看到 这两个IP (10.0.3.22和10.0.3.38)都属于同一个MAC地址00:16:3e:01:b7:bd和00:16:3e:04:08:3a,说明这两个IP属于不同ENI,进而可以推断出nginx-7d6877d777-j7dqz和busybox-d55494495-8t677 属于不同ENI 网卡。通过describe svc 可以看到 nginxPod 被加入到了 svc nginx的后端。

 

SVC的CLusterIP是192.168.27.242如果是集群内访问External IP,对于 Terway 版本≥ 1.20 来说,集群内访问SVC的ClusterIP或External IP,整个链路架构是一致的,此小节不在针对External IP单独说明,统一用ClusterIP作为示例(Terway版本< 1.20 情况下,访问External IP,会在后续小节说明)。

image.png 

内核路由

busybox-d55494495-8t677 IP地址10.0.3.22,该容器在宿主机表现的PID是2956974,该容器网络命名空间有指向容器eth0的默认路由。有且只有一条,说明pod访问所有地址都需要通过该默认路由。

image.png

image.png

image.png

image.png

image.png

nginx-7d6877d777-j7dqz IP地址10.0.3.38。该容器在宿主机表现的PID是329470,该容器网络命名空间有指向容器eth0的默认路由。

image.png

 在ACK中,是利用cilium去调用ebpf的能力,可以通过下面的命令可以看到 nginx-7d6877d777-j7dqz和busybox-d55494495-8t677 identity ID 分别是634和3681

image.png

 通过busybox-d55494495-8t677Pod,可以找到此pod所在的ECS的TerwayPod为terway-eniip-6cfv9,在TerwayPod 中运行下面的cilium bpf lb list | grep -A5 192.168.27.242 命令可以看到 ebpf中对于CLusterIP 192.168.27.242:80 记录的后端是10.0.3.38:80。这上述的一切都是通过EBPF 记录到了源端Pod centos-6c48766848-znkl8Pod的tc中。

image.png

image.png 

这里不再过多对于svc ClusterIP的ebpf转发进行描述,详细信息可以参考 2.5 小节。中的描述,从上述描述情况,可以得知被访问的SVC的IP 在 客户端 busybox的网络命名空间中已经被ebpf转为svc的后端pod的IP,在任何dev上都无法捕获到客户端访问的SVC的IP。故此场景和2.3 小节的网络架构非常类似,只是在客户端内会由cilium ebpf转发的动作

 

小结

数据链路转发示意图:

image.png

 

不会经过任何宿主机ECS网络空间中间节点

整个链路是需要从客户端pod所属ENI网卡出ECS再从目POD所属ENI网卡进入ECS

整个请求链路是ECS1 Pod1 ->ECS1 eth1 -> VPC ->ECS1 eth2 ->ECS1 Pod2

在客户端/服务端Pod内或者ECSENI网卡无法捕捉到 SVC IP,SVC IP 在 客户端Pod网络命名空间内已经通过ebpf转换成了SVC后端PodIP

 

https://help.aliyun.com/document_detail/197320.htm

https://help.aliyun.com/document_detail/113090.html#p-lim-520-w07

更多精彩内容,欢迎观看:

《云原生网络数据面可观测性最佳实践》——二、全景剖析阿里云容器网络数据链路——4. Terway IPVLAN+EBPF 模式架构设计(下):https://developer.aliyun.com/article/1221412?groupCode=supportservice

相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1天前
|
NoSQL 关系型数据库 MySQL
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
74 56
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
|
13天前
|
安全 Docker 容器
docker的默认网络模式有哪些
Docker 默认网络模式包括:1) bridge:默认模式,各容器分配独立IP,可通过名称或IP通信;2) host:容器与宿主机共享网络命名空间,性能最优但有安全风险;3) none:容器隔离无网络配置,适用于仅需本地通信的场景。
26 6
|
1月前
|
域名解析 网络协议 虚拟化
vmware 提供的三种网络工作模式
本文介绍了VMware虚拟机的三种网络工作模式:Bridged(桥接模式)、NAT(网络地址转换模式)和Host-Only(仅主机模式)。桥接模式将虚拟机与主机通过虚拟网桥连接,实现与物理网络的直接通信;NAT模式通过虚拟NAT设备和DHCP服务器使虚拟机联网;Host-Only模式则将虚拟机与外网隔离,仅与主机通信。此外,文章还简要介绍了网络相关的基础知识,包括主机名、IP地址、子网掩码、默认网关和DNS服务器。
61 3
|
1月前
|
Docker 容器
【赵渝强老师】Docker的None网络模式
Docker容器在网络方面实现了逻辑隔离,提供了四种网络模式:bridge、container、host和none。其中,none模式下容器具有独立的网络命名空间,但不包含任何网络配置,仅能通过Local Loopback网卡(localhost或127.0.0.1)进行通信。适用于不希望容器接收任何网络流量或运行无需网络连接的特殊服务。
|
1月前
|
Docker 容器
【赵渝强老师】Docker的Host网络模式
Docker容器在网络环境中是隔离的,可通过配置不同网络模式(如bridge、container、host和none)实现容器间或与宿主机的网络通信。其中,host模式使容器与宿主机共享同一网络命名空间,提高性能但牺牲了网络隔离性。
|
1月前
|
Kubernetes Docker 容器
【赵渝强老师】Docker的Container网络模式
Docker容器在网络环境中彼此隔离,但可通过配置不同网络模式实现容器间通信。其中,container模式使容器共享同一网络命名空间,通过localhost或127.0.0.1互相访问,提高传输效率。本文介绍了container模式的特点及具体示例。
|
1月前
|
Linux Docker 容器
【赵渝强老师】Docker的Bridge网络模式
本文介绍了Docker容器的网络隔离机制及其四种网络模式:bridge、container、host和none。重点讲解了默认的bridge模式,通过示例演示了如何创建自定义bridge网络并配置容器的网络信息。文中还附有相关图片和视频讲解,帮助读者更好地理解Docker网络的配置和使用方法。
|
12天前
|
弹性计算 API 持续交付
后端服务架构的微服务化转型
本文旨在探讨后端服务从单体架构向微服务架构转型的过程,分析微服务架构的优势和面临的挑战。文章首先介绍单体架构的局限性,然后详细阐述微服务架构的核心概念及其在现代软件开发中的应用。通过对比两种架构,指出微服务化转型的必要性和实施策略。最后,讨论了微服务架构实施过程中可能遇到的问题及解决方案。
|
21天前
|
Cloud Native Devops 云计算
云计算的未来:云原生架构与微服务的革命####
【10月更文挑战第21天】 随着企业数字化转型的加速,云原生技术正迅速成为IT行业的新宠。本文深入探讨了云原生架构的核心理念、关键技术如容器化和微服务的优势,以及如何通过这些技术实现高效、灵活且可扩展的现代应用开发。我们将揭示云原生如何重塑软件开发流程,提升业务敏捷性,并探索其对企业IT架构的深远影响。 ####
34 3
|
1月前
|
Cloud Native 安全 数据安全/隐私保护
云原生架构下的微服务治理与挑战####
随着云计算技术的飞速发展,云原生架构以其高效、灵活、可扩展的特性成为现代企业IT架构的首选。本文聚焦于云原生环境下的微服务治理问题,探讨其在促进业务敏捷性的同时所面临的挑战及应对策略。通过分析微服务拆分、服务间通信、故障隔离与恢复等关键环节,本文旨在为读者提供一个关于如何在云原生环境中有效实施微服务治理的全面视角,助力企业在数字化转型的道路上稳健前行。 ####