《云原生网络数据面可观测性最佳实践》——二、全景剖析阿里云容器网络数据链路——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

相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
相关文章
|
22天前
|
域名解析 网络协议 虚拟化
vmware 提供的三种网络工作模式
本文介绍了VMware虚拟机的三种网络工作模式:Bridged(桥接模式)、NAT(网络地址转换模式)和Host-Only(仅主机模式)。桥接模式将虚拟机与主机通过虚拟网桥连接,实现与物理网络的直接通信;NAT模式通过虚拟NAT设备和DHCP服务器使虚拟机联网;Host-Only模式则将虚拟机与外网隔离,仅与主机通信。此外,文章还简要介绍了网络相关的基础知识,包括主机名、IP地址、子网掩码、默认网关和DNS服务器。
44 3
|
22天前
|
Docker 容器
【赵渝强老师】Docker的None网络模式
Docker容器在网络方面实现了逻辑隔离,提供了四种网络模式:bridge、container、host和none。其中,none模式下容器具有独立的网络命名空间,但不包含任何网络配置,仅能通过Local Loopback网卡(localhost或127.0.0.1)进行通信。适用于不希望容器接收任何网络流量或运行无需网络连接的特殊服务。
|
22天前
|
Docker 容器
【赵渝强老师】Docker的Host网络模式
Docker容器在网络环境中是隔离的,可通过配置不同网络模式(如bridge、container、host和none)实现容器间或与宿主机的网络通信。其中,host模式使容器与宿主机共享同一网络命名空间,提高性能但牺牲了网络隔离性。
|
22天前
|
Kubernetes Docker 容器
【赵渝强老师】Docker的Container网络模式
Docker容器在网络环境中彼此隔离,但可通过配置不同网络模式实现容器间通信。其中,container模式使容器共享同一网络命名空间,通过localhost或127.0.0.1互相访问,提高传输效率。本文介绍了container模式的特点及具体示例。
|
22天前
|
Linux Docker 容器
【赵渝强老师】Docker的Bridge网络模式
本文介绍了Docker容器的网络隔离机制及其四种网络模式:bridge、container、host和none。重点讲解了默认的bridge模式,通过示例演示了如何创建自定义bridge网络并配置容器的网络信息。文中还附有相关图片和视频讲解,帮助读者更好地理解Docker网络的配置和使用方法。
|
20天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
68 2
|
10天前
|
Kubernetes Linux 开发者
深入探索容器化技术——Docker 的实战应用
深入探索容器化技术——Docker 的实战应用
40 5
|
14天前
|
运维 Cloud Native 云计算
云原生之旅:Docker容器化实战
本文将带你走进云原生的世界,深入理解Docker技术如何改变应用部署与运维。我们将通过实际案例,展示如何利用Docker简化开发流程,提升应用的可移植性和伸缩性。文章不仅介绍基础概念,还提供操作指南和最佳实践,帮助你快速上手Docker,开启云原生的第一步。
|
17天前
|
机器学习/深度学习 数据采集 Docker
Docker容器化实战:构建并部署一个简单的Web应用
Docker容器化实战:构建并部署一个简单的Web应用
|
15天前
|
运维 持续交付 虚拟化
深入解析Docker容器化技术的核心原理
深入解析Docker容器化技术的核心原理
39 1