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

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

Terway ENI 模式下,ENI的网络都是和VPC同样的网段,ENI网络就是从Aliyun的VPC网络中创建和绑定一个弹性网卡到ECS节点上,然后Pod利用这个弹性网卡和别的网络互通,这里需要关注的是弹性网卡的数量是有限制的,具体的根据实例类型有不同配额

 image.png

 

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

 image.png

 

pod内部可以看到是有两张网卡的,一个是eth0,另一个是veth1,其中eth0的IP就是Pod的IP,此网卡的MAC地址和控制台上的ENI的MAC地址可以匹配,说明此网卡就是附属ENI网卡,被直接挂载到了Pod的网络命名空间内。

image.pngimage.png 

Pod内有指向eth0的默认路由,同时还有指向目的网段为192.168.0.0/16,下一跳为veth1网卡的路由,其中192.168.0.0/16 网段为集群的service网段,说明集群内Pod访问SVCclusterIP网段,数据链路会经过veth1 网卡到宿主机ECSOS内进行下一步判断,其他情况是走eth0直接进入到VPC

image.png

 

如上图所示,我们可以容器的网络命名空间中通过ip addr 看到一个veth1@if19的标志位,其中‘19' 这个将会协助我们在ECS的OS内找到和容器网络命名空间中的veth pair相对一个。在ECS OS 内我们通过ip addr | grep 19: 可以找到cali38ef34581a9 这个虚拟网卡,这个就是veth pair在ECS OS侧相对的那一个。 image.png

 

到目前为止,容器访问SVC的ClusterIP时,容器和OS数据链路已经建立链接了,那么ECS OS内对于数据流量是怎么判断去哪个容器呢? 通过OS Linux Routing我们可以看到,所有目的是Pod CIDR 网段的流量都会被转发到Pod对应的calico虚拟往卡上,到这里为止,ECS OS和Pod的网络命名空间已经建立好完整的出入链路配置了。

image.png

 

1 Terway ENI 模式容器网络数据链路剖析

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

 image.png

 

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

TerwayENI架构下,不同的数据链路访问情况下,可以总结归纳为8类:

访问Pod IP,同节点访问pod;

访问Pod IP,同节点pod间互访;

访问Pod IP,异节点pod间互访;

集群内访问SVC IP (Cluster IP),源端和SVC后端Pod为同一节点;

集群内访问SVC IP( Cluster IP),源端和SVC后端Pod为不同节点;

集群内访问SVC IP (External IP),源端和SVC后端Pod为同一节点;

集群内访问SVC IP(External IP),源端和SVC后端Pod为不同节点;

集群外访问SVC External IP;

 

2 场景一:访问Pod IP,同节点访问pod

环境

 image.png

 

ap-southeast-1.10.0.0.196节点上存在 nginx1-5969d8fc89-9t99h和10.0.0.203

内核路由

nginx1-5969d8fc89-9t99h IP地址10.0.0.203,该容器在宿主机表现的PID是1094736该容器网络命名空间有指向容器eth0的默认路由。和下一跳为veth1,目的网段为service的两条路由

image.pngimage.png

image.png

该容器veth1在ECS OS 内对应veth pair是cali5068e632525

image.png

 

在ECS OS内,有指向Pod IP,下一跳为calixxxx的路由,通过前文可以知道calixxx网卡是和每个pod内的veth1组成的pair,所以,pod内访问SVC的CIDR会有指向veth1的路由,不会走默认的eth0路由。故:calixx网卡在这里的主要作用是用于:

 

节点访问Pod 2. 当节点或者Pod访问 SVC的CIDR时,会走ECS OS内核协议栈转换,走到calixxx和veth1访问pod

 image.png

小结

可以访问到目的端

nginx1-5969d8fc89-9t99h netns veth1 可以抓到数据包。

 image.png

nginx1-5969d8fc89-9t99h cali5068e632525 可以抓到数据包。

image.png

 数据链路转发示意图:

 image.png

 

数据链路是ECS -> Linux routing -> calicxxx ->Pod net ns veth1数据链路完成宿主机ns切换至Pod ns

通过宿主机上路由切换至pod所属veth pair

该网卡为被分配pod独占无法和其他pod进行共享

数据链路经过两次协议栈

 

3) 场景二:访问Pod IP,同节点pod访问pod

环境

 image.png

 

ap-southeast-1.10.0.0.196节点上存在两个pod:centos-59cdc5c9c4-89f8x IP地址10.0.0.202和nginx1-5969d8fc89-9t99h和10.0.0.203

内核路由

centos-59cdc5c9c4-89f8x IP地址10.0.0.202,该容器在宿主机表现的PID是2314075,该容器网络命名空间有指向容器eth0的默认路由。和下一跳为veth1,目的网段为service的两条路由

 image.png

image.png

image.png

通过上述类似的办法,可以找到 nginx1-5969d8fc89-9t99h  IP地址10.0.0.203,该容器在宿主机表现的PID是1094736

 image.png 

小结

可以访问到目的端

centos-59cdc5c9c4-89f8x netns eth1 可以抓到数据包。

 image.png

 

nginx1-5969d8fc89-9t99h netns eth1 可以抓到数据包。

 image.png

 

数据链路转发示意图:

 image.png

 

 

数据链路是Pod1 netns eth1 -> VPC ->Pod2 netns eth2数据链路不经过宿主机host namespace,数据链路会先出ECS,到VPC再回到原来ECS

pod内的net namespace中,直接命中默认路由规则,从eth0网卡出pod直接到VPC这里eth0 其实就是附属网卡ENI,直接被挂载在了pod的net ns走了PCI网卡

该网卡为被分配pod独占无法和其他pod进行共享

数据链路经过两次协议栈

 

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

《云原生网络数据面可观测性最佳实践》——二、全景剖析阿里云容器网络数据链路——2. Terway ENI 模式架构设计(中):https://developer.aliyun.com/article/1221645?spm=a2c6h.13148508.setting.24.15f94f0em5pyNO

相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
相关文章
|
5天前
|
运维 Kubernetes Cloud Native
云原生技术:容器化与微服务架构的完美结合
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术以其灵活性和高效性成为企业的新宠。本文将深入探讨云原生的核心概念,包括容器化技术和微服务架构,以及它们如何共同推动现代应用的发展。我们将通过实际代码示例,展示如何在Kubernetes集群上部署一个简单的微服务,揭示云原生技术的强大能力和未来潜力。
|
1月前
|
专有云 Serverless 持续交付
亚太唯一,阿里云再度入选Gartner®容器管理魔力象限领导者
Gartner正式发布 2024《容器管理魔力象限》报告,阿里云再度成为中国唯一一家入选「领导者象限」的科技公司。
|
5天前
|
监控 持续交付 Docker
Docker 容器化部署在微服务架构中的应用有哪些?
Docker 容器化部署在微服务架构中的应用有哪些?
|
5天前
|
监控 持续交付 Docker
Docker容器化部署在微服务架构中的应用
Docker容器化部署在微服务架构中的应用
|
8天前
|
Kubernetes Cloud Native Ubuntu
庆祝 .NET 9 正式版发布与 Dapr 从 CNCF 毕业:构建高效云原生应用的最佳实践
2024年11月13日,.NET 9 正式版发布,Dapr 从 CNCF 毕业,标志着云原生技术的成熟。本文介绍如何使用 .NET 9 Aspire、Dapr 1.14.4、Kubernetes 1.31.0/Containerd 1.7.14、Ubuntu Server 24.04 LTS 和 Podman 5.3.0-rc3 构建高效、可靠的云原生应用。涵盖环境准备、应用开发、Dapr 集成、容器化和 Kubernetes 部署等内容。
32 5
|
5天前
|
安全 持续交付 Docker
微服务架构和 Docker 容器化部署的优点是什么?
微服务架构和 Docker 容器化部署的优点是什么?
|
7天前
|
存储 监控 Docker
探索微服务架构下的容器化部署
本文旨在深入探讨微服务架构下容器化部署的关键技术与实践,通过分析Docker容器技术如何促进微服务的灵活部署和高效管理,揭示其在现代软件开发中的重要性。文章将重点讨论容器化技术的优势、面临的挑战以及最佳实践策略,为读者提供一套完整的理论与实践相结合的指导方案。
|
14天前
|
JavaScript 持续交付 Docker
解锁新技能:Docker容器化部署在微服务架构中的应用
【10月更文挑战第29天】在数字化转型中,微服务架构因灵活性和可扩展性成为企业首选。Docker容器化技术为微服务的部署和管理带来革命性变化。本文探讨Docker在微服务架构中的应用,包括隔离性、可移植性、扩展性、版本控制等方面,并提供代码示例。
52 1
|
21天前
|
监控 Cloud Native 持续交付
云原生架构下微服务的最佳实践与挑战####
【10月更文挑战第20天】 本文深入探讨了云原生架构在现代软件开发中的应用,特别是针对微服务设计模式的最优实践与面临的主要挑战。通过分析容器化、持续集成/持续部署(CI/CD)、服务网格等关键技术,阐述了如何高效构建、部署及运维微服务系统。同时,文章也指出了在云原生转型过程中常见的难题,如服务间的复杂通信、安全性问题以及监控与可观测性的实现,为开发者和企业提供了宝贵的策略指导和解决方案建议。 ####
43 5
|
21天前
|
Kubernetes Cloud Native 持续交付
云原生架构下的微服务设计原则与最佳实践##
在数字化转型的浪潮中,云原生技术以其高效、灵活和可扩展的特性成为企业IT架构转型的首选。本文深入探讨了云原生架构的核心理念,聚焦于微服务设计的关键原则与实施策略,旨在为开发者提供一套系统性的方法论,以应对复杂多变的业务需求和技术挑战。通过分析真实案例,揭示了如何有效利用容器化、持续集成/持续部署(CI/CD)、服务网格等关键技术,构建高性能、易维护的云原生应用。文章还强调了文化与组织变革在云原生转型过程中的重要性,为企业顺利过渡到云原生时代提供了宝贵的见解。 ##