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

本文涉及的产品
应用型负载均衡 ALB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介: 《云原生网络数据面可观测性最佳实践》——二、全景剖析阿里云容器网络数据链路——1. Flannel 模式架构设计(下)

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

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


5) 场景四:ExternalTrafficPolicy为Local时,Client来自于集群外

此场景包含下面几个子场景,数据链路可以归纳为一种:

A.访问SVC External IP,ExternalTrafficPolicy 为Local时, Client和服务端Pod部署于不同ECS,其中client为集群外

环境

image.png

 

Deployment为nginx1,分别为三个pod nginx1-76c99b49df-4zsdj和nginx1-76c99b49df-7plsr 部署在 ap-southeast-1.10.0.1.206ECS上,最后一个pod nginx1-76c99b49df-s6z79 部署在其他节点ap-southeast-1.10.0.1.216 上

Service nginx1的ExternalTrafficPlicy 为Local

image.png内核路由

Pod网络空间和ECS OS 网络空间的数据交换在 2.1 场景一中已经做了详细描述,此处不再果断篇幅描述。

SLB相关配置

从SLB控制台,可以看到SLB后端的虚拟服务器组中只有两个ECS节点ap-southeast-1.10.0.1.216和ap-southeast-1.10.0.1.206。集群内的其他节点,比如 ap-southeast-1.10.0.0.180 并未被加到SLB的后端虚拟服务器组中。虚拟服务器组的IP 为ECS的IP,端口为service里面的nodeport端口32580

image.png

 

故ExternalTrafficPolicy为Local模式下,只有有Service后端pod所在的ECS节点才会被加入到SLB的后端虚拟服务器组中,参与SLB的流量转发,集群内的其他节点不参与SLB的转发

SLB虚拟服务器组ECS的IPVS规则

从SLB的虚拟服务器组中的两个ECS可以看到,对于nodeip+nodeport的ipvs转发规则是不同。ExternalTrafficPolicy为Local模式下,只有该节点上的护短pod才会被加到该节点的ipvs转发规则中,其他节点上的后端pod不会加进来,这样保证了被SLB转发的链路,只会被转到该节点上的pod,不会转发到其他节点上。

 

node1: ap-southeast-1.10.0.1.206

image.png

 

node1: ap-southeast-1.10.0.1.216

image.png

 

小结

可以访问到目的端

数据链路转发示意图:

image.png

该图示意了只有后端pod所在ECS才会加到SLB后端中,从集群外部访问SVC的externalIP(SLB IP)的情况,可见数据链路只会被转发到虚拟服务器组中的ECS,不会再被转发到集群内其他节点上。

 

内核协议栈示意图

image.png 

Conntack 表信息

 

Node:

src是集群外部客户端IP,dst是节点IP,dport是SVC中的nodeport。并且期望是由该ECS上的pod 172.23.96.82 来回包给源端

 image.png

 

数据链路:client -> SLB->ECS eth0 +ECS nodeport -> cni0 -> vethxxxxx ->ECS1 Pod1 eth0

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

ExternalTrafficPolicy为Local模式下,只有有Service后端pod所在ECS节点才会被加入到SLB后端虚拟服务器组中,参与SLB流量转发,集群内其他节点不参与SLB转发

 

6) 场景五:ExternalTrafficPolicy为Cluster时,Client来自于集群外

此场景包含下面几个子场景,数据链路可以归纳为一种:

访问SVCExternal IP,ExternalTrafficPolicy 为Cluster时, Client和服务端Pod部署于不同ECS,其中client为集群外

环境

 image.png

 

Deployment为nginx1,分别为三个pod nginx1-76c99b49df-4zsdj和nginx1-76c99b49df-7plsr 部署在 ap-southeast-1.10.0.1.206ECS上,最后一个pod nginx1-76c99b49df-s6z79 部署在其他节点ap-southeast-1.10.0.1.216 上

Service nginx2的ExternalTrafficPlicy 为Cluster

 image.png

内核路由

Pod网络空间和ECS OS 网络空间的数据交换在 2.1 场景一中已经做了详细描述,此处不再果断篇幅描述。

SLB相关配置

从SLB控制台,集群内所有节点ap-southeast-1.10.0.0.180、ap-southeast-1.10.0.1.216和ap-southeast-1.10.0.1.206都被加到SLB的虚拟服务器组中。其中虚拟服务器组的IP 为ECS的IP,端口为service里面的nodeport端口30875

 image.png

 

故ExternalTrafficPolicy为CLuster模式下,集群内所有的ECS节点都会被加入到SLB的后端虚拟服务器组中,参与SLB的流量转发。

SLB虚拟服务器组ECS的IPVS规则

从SLB的虚拟服务器组中的可以看到,对于nodeip+nodeport的ipvs转发规则是一致的。ExternalTrafficPolicy为CLuster模式下,所有的service后端pod都会被加到所有节点的ipvs的转发规则中,即使是该节点有后端pod,流量也不一定会被转发到该节点上pod,可能会被转发到其他节点上的后端pod。

 

node1: ap-southeast-1.10.0.1.206 (该节点有后端pod)

image.png

 

node1: ap-southeast-1.10.0.1.216 (该节点有后端pod)

image.png

 

node3: ap-southeast-1.10.0.0.180 (该节无后端pod)

image.png


小结

可以访问到目的端

数据链路转发示意图:

 image.png

 

该图示意了集群内所有ECS都会被加到SLB后端中,从集群外部访问SVC的externalIP(SLB IP)的情况,数据流量可能会被转发到其他节点上

 

内核协议栈示意图 

内核协议栈示意图已经在 2.4 场景一中已经做了详细描述,此处不再过多篇幅描述。

 

Conntack 表信息

 

链路1:

ap-southeast-1.10.0.0.180:

此时数据链路对应示意图中的链路1,可以看到数据链路被转到ap-southeast-1.10.0.0.180节点,该节点上并没有service的后端pod,通过conntrack 信息,可以看到

src是集群外部客户端IP,dst是节点IP,dport是SVC中的nodeport。并且期望是172.23.96.163 来回包给 10.0.0.180。通过前述信息,可以得知172.23.96.163 是nginx1-76c99b49df-7plsrPod,部署在ap-southeast-1.10.0.1.206

image.png

 

ap-southeast-1.10.0.1.206:

通过此节点conntrack 表,可以看到src是node ap-southeast-1.10.0.0.180,dst是172.23.96.163的80 端口,回包也是直接回给 node ap-southeast-1.10.0.0.180

image.png 

综上可以看到src变换了多次,故在Cluster 模式下,会存在丢失真实客户端IP的情况

 

链路2:

src是集群外部客户端IP,dst是节点IP,dport是SVC中的nodeport。并且期望是由该ECS上的pod 172.23.96.82 来回包给172.23.96.65,此地址是SLB集群中的一个地址

image.png 

数据链路:

情景一:client -> SLB->ECS eth0 +ECS nodeport -> cni0 -> vethxxxxx ->ECS1 Pod1 eth0

情景二:client -> SLB->ECS1 eth0 +ECS1 nodeport-> VPC Routing ->ECS2 eth0 +Pod port -> cni0 -> vethxxxxx ->ECS2 Pod1 eth0

数据链路要经过三次内核协议栈,分别是ECS1 OS、ECS2 OS协议栈Pod协议栈

ExternalTrafficPolicy为CLuster模式下,kubernetes所有ECS节点都会被加入到SLB后端虚拟服务器组中,参与SLB流量转发,此时会存在数据路在集群内被多个ECS转发场景,该情况下会丢失真实客户端IP情况

 

7) 小结

本节主要聚焦ACK 在Flannel模式下,不同SOP场景下的数据链路转发路径。随着微服务化和云原生化,网络场景日趋复杂,作为kubernetes原生的网络模型——Flannel,不同的访问环境,一共可以分为10个SOP场景。通过深入简出的剖析,可以归纳为5个场景,并对这五个场景的转发链路,技术实现原理,云产品配置等一一梳理并总结,这对我们遇到Flannel架构下的链路抖动、最优化配置,链路原理等提供了初步指引方向。

相关实践学习
通义万相文本绘图与人像美化
本解决方案展示了如何利用自研的通义万相AIGC技术在Web服务中实现先进的图像生成。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
相关文章
|
5月前
|
数据采集 运维 Serverless
云函数采集架构:Serverless模式下的动态IP与冷启动优化
本文探讨了在Serverless架构中使用云函数进行网页数据采集的挑战与解决方案。针对动态IP、冷启动及目标网站反爬策略等问题,提出了动态代理IP、请求头优化、云函数预热及容错设计等方法。通过网易云音乐歌曲信息采集案例,展示了如何结合Python代码实现高效的数据抓取,包括搜索、歌词与评论的获取。此方案不仅解决了传统采集方式在Serverless环境下的局限,还提升了系统的稳定性和性能。
152 0
|
11月前
|
分布式计算 Kubernetes Hadoop
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
432 6
|
11月前
|
缓存 监控 API
探索微服务架构中的API网关模式
【10月更文挑战第5天】随着微服务架构的兴起,企业纷纷采用这一模式构建复杂应用。在这种架构下,应用被拆分成若干小型、独立的服务,每个服务围绕特定业务功能构建并通过HTTP协议协作。随着服务数量增加,统一管理这些服务间的交互变得至关重要。API网关作为微服务架构的关键组件,承担起路由请求、聚合数据、处理认证与授权等功能。本文通过一个在线零售平台的具体案例,探讨API网关的优势及其实现细节,展示其在简化客户端集成、提升安全性和性能方面的关键作用。
164 2
|
11月前
|
分布式计算 资源调度 Hadoop
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
221 2
|
6月前
|
运维 供应链 前端开发
中小医院云HIS系统源码,系统融合HIS与EMR功能,采用B/S架构与SaaS模式,快速交付并简化运维
这是一套专为中小医院和乡镇卫生院设计的云HIS系统源码,基于云端部署,采用B/S架构与SaaS模式,快速交付并简化运维。系统融合HIS与EMR功能,涵盖门诊挂号、预约管理、一体化电子病历、医生护士工作站、收费财务、药品进销存及统计分析等模块。技术栈包括前端Angular+Nginx,后端Java+Spring系列框架,数据库使用MySQL+MyCat。该系统实现患者管理、医嘱处理、费用结算、药品管控等核心业务全流程数字化,助力医疗机构提升效率和服务质量。
351 4
|
9月前
|
NoSQL 关系型数据库 MySQL
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
329 56
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
|
10月前
|
缓存 负载均衡 JavaScript
探索微服务架构下的API网关模式
【10月更文挑战第37天】在微服务架构的海洋中,API网关犹如一座灯塔,指引着服务的航向。它不仅是客户端请求的集散地,更是后端微服务的守门人。本文将深入探讨API网关的设计哲学、核心功能以及它在微服务生态中扮演的角色,同时通过实际代码示例,揭示如何实现一个高效、可靠的API网关。
|
10月前
|
缓存 监控 API
探索微服务架构中的API网关模式
随着微服务架构的兴起,API网关成为管理和服务间交互的关键组件。本文通过在线零售公司的案例,探讨了API网关在路由管理、认证授权、限流缓存、日志监控和协议转换等方面的优势,并详细介绍了使用Kong实现API网关的具体步骤。
128 3
|
10月前
|
存储 缓存 监控
探索微服务架构中的API网关模式
探索微服务架构中的API网关模式
122 2
|
11月前
|
Kubernetes Cloud Native 持续交付
云原生技术:重塑现代应用开发与部署模式####
本文深入探讨了云原生技术的核心概念、发展历程及其在现代软件开发和部署中的关键作用。通过分析云原生架构的特点,如容器化、微服务、持续集成与持续部署(CI/CD),以及它如何促进应用的可伸缩性、灵活性和效率,本文旨在为读者提供一个关于云原生技术全面而深入的理解。此外,还将探讨实施云原生策略时面临的挑战及应对策略,帮助组织更好地把握数字化转型的机遇。 ####

热门文章

最新文章