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

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

弹性网卡(ENI)支持配置多个辅助IP的功能,单个弹性网卡(ENI)根据实例规格可以分配6-20个辅助IP,ENI多IP模式就是利用了这个辅助IP分配给容器,从而大幅提高了Pod部署的规模和密度。在网络联通的方式上,Terway支持选择Veth pair策略路由和ipvlan l两种方案,Terway主要考虑了这些:

 

在节点上如何把弹性网卡(ENI)辅助IP流量都走对应弹性网卡出去,并使用弹性网卡本身mac地址而不被丢包

2.如何兼容容器服务目前广泛Centos 7.x3.10版本内核

 image.png

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

image.png

 

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

 image.png

image.png

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

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

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

image.png

 

在veth pair中实现了多个Pod共享一个ENI的方式来提升了ECS的Pod部署密度,那么如何知道Pod是被分配到哪个ENI呢?TerwayPod是通过daemonset的方式部署在每个节点上的,通过下面命令可以看到每个节点上的TerwayPod。通过terway-cli show factory 命令可以看到节点上的附属ENI数量、MAC地址以及每个ENI上的IP

image.png

image.png

 

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

 

在网络联通方式上,采用选择Veth pair策略路由

一对veth pair来联通宿主机和pod网络空间,pod地址是来源于弹性网卡辅助IP地址,并且节点上需要配置策略路由来保证辅助IP流量经过它所属弹性网卡

同主机上容器通信直接通过主机上路由到同一个主机上别容器对应veth上

不同主机容器通信经过VPC网络进行转发到对应机器上,再通过机器上路由转发到容器中

容器和其所在宿主机之间通信直接通过连接到宿主机namespaceveth pair和路由打通

容器到其他主机通过VPC网络转发到对应机器,其他主机到容器通过VPC网络转发到对应弹性网卡,然后通过路由转发到容器Veth上

容器到专线和共享服务也都是通过VPC网络转发

容器到公网访问经过VSwitch配置SNAT网关直接将源IP转换成EIP地址到外部网络

弹性网卡(ENI)支持配置多个辅助IP功能,单个弹性网卡(ENI)根据实例规格可以分配6-20个辅助IP,ENI多IP模式就是利用了这个辅助IP分配给容器,从而大幅提高了Pod部署规模和密度

 

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

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

image.png

 

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

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

 

访问Pod IP同节点访问Pod

访问Pod IP/SVC IP(Cluster or Local),同节点pod间互访(pod属于同or不同ENI)

访问PodIP异节点pod间互访

集群内非SVC后端pod所在节点访问SVC ClusterIP

Cluster模式,集群内非SVC后端pod所在节点访问SVC External IP

Local模式,集群内非SVC后端pod所在节点访问SVC External IP

集群外访问SVC External IP

 

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

环境

image.png

 cn-hongkong.10.0.1.82 节点上存在 nginx-7d6877d777-zp5jg和10.0.1.104

内核路由

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

image.png

image.png

该容器eth0在ECS OS 内对应veth pair是calif03b26f9a43

image.png

在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。

image.png


小结

可以访问到目

nginx-7d6877d777-zp5jg netns eth0 可以抓到数据包。

image.png

nginx-7d6877d777-zp5jg calif03b26f9a43 可以抓到数据包

image.png

 数据链路转发示意图:

image.png

 

会经过calicao网卡,每个非hostnetworkpod会和calicao网卡形成veth pair,用于和其他pod或node进行通信

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

整个请求链路是OS -> calixxxxx ->ECSPod net eth0

整个链路会经过两次内核协议栈:ECS OS和Pod

数据链路要经过两次内核协议栈,是Pod1协议栈、ECS1协议

3 场景二:访问Pod IP/SVC IP(Cluster or Local),同节点pod访问pod(pod属于同or不同ENI)

环境

image.png

image.png

cn-hongkong.10.0.1.82 节点上存在 nginx-7d6877d777-zp5jg和10.0.1.104

cn-hongkong.10.0.1.82 节点上存在 centos-67756b6dc8-h5wnp和10.0.1.91

Service 是nginx,ClusterIP是192.168.2.115 ExternalIP是10.0.3.62。

内核路由

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

image.png

image.png

该容器eth0在ECS OS 内对应veth pair是calif03b26f9a43

 image.png 用上述类似办法可以发现centos-67756b6dc8-h5wnp的veth pair的cali44ae9fbceeb,Pod网络空间只有默认路由。

image.png

image.png

在ECS OS内,有指向Pod IP,下一跳为calixxxx的路由,通过前文可以知道calixxx网卡是和每个pod内的veth1组成的pair,所以,pod内访问SVC的CIDR会有指向veth1的路由,不会走默认的eth0路由。故:calixx网卡在这里的主要作用是用于:1.节点访问Pod 2. 当节点或者Pod访问 SVC的CIDR时,会走ECS OS内核协议栈转换,走到calixxx和eth0访问pod。

image.png 说明相关的路由转发是在ECS OS层面进行的,Pod的calixx网卡起到了一个桥梁和连通的作用。

源端ECS上的IPVS规则(如果访问的是SVC IP)

如果同节点上访问的是SVC的IP(ClusterIP or ExternalIP),在节点上我们查看SVC的相关IPVS转发规则:


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

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

相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
相关文章
|
6天前
|
专有云 Serverless 持续交付
亚太唯一,阿里云再度入选Gartner®容器管理魔力象限领导者
Gartner正式发布 2024《容器管理魔力象限》报告,阿里云再度成为中国唯一一家入选「领导者象限」的科技公司。
|
7天前
|
安全 定位技术 数据安全/隐私保护
|
2天前
|
人工智能 专有云 Serverless
亚太唯一!阿里云再度入选Gartner®容器管理魔力象限领导者
亚太唯一!阿里云再度入选Gartner®容器管理魔力象限领导者
22 2
|
4天前
|
存储 前端开发 JavaScript
链动模式融合排队免单:扩散用户裂变网络、提高复购
将链动2+1与排队免单结合的模式及链动3+1模式转化为可运行代码涉及多个技术领域,包括后端开发、前端开发、数据库设计等。本文提供了一个简化的技术框架,涵盖用户管理、订单处理、奖励计算、团队结构等核心功能,并提供了示例代码。同时,强调了安全性、测试与部署的重要性,以确保系统的稳定性和合规性。
|
5天前
|
弹性计算 Kubernetes 网络协议
阿里云弹性网络接口技术的容器网络基础教程
阿里云弹性网络接口技术的容器网络基础教程
阿里云弹性网络接口技术的容器网络基础教程
|
11天前
|
Docker 容器
docker中检查容器的网络模式
【10月更文挑战第5天】
21 1
|
12天前
|
Docker 容器
docker中无网络模式(none)
【10月更文挑战第4天】
10 2
|
2天前
|
存储 Docker 容器
docker中挂载数据卷到容器
【10月更文挑战第12天】
13 5
|
7天前
|
存储 运维 云计算
探索Docker容器化:从入门到实践
在这个快速发展的云计算时代,Docker容器化技术正在改变应用的开发、部署和管理方式。本文旨在为初学者提供一个关于Docker的全面入门指南,并通过实践案例展示Docker在实际开发中的应用。我们将一起了解Docker的核心概念、基本操作、网络和存储,以及如何构建和部署一个简单的Web应用。无论你是开发者还是运维人员,本文都会帮助你快速掌握Docker的核心技能。
|
3天前
|
存储 测试技术 开发者
docker中将数据卷挂载到容器
【10月更文挑战第11天】
13 3