Kubernetes 学习总结(41)—— 云原生容器网络详解

背景

随着网络技术的发展,网络的虚拟化程度越来越高,特别是云原生网络,叠加了物理网络、虚机网络和容器网络,数据包在网络 OSI 七层网络模型、TCP/IP 五层网络模型的不同网络层进行封包、转发和解包。网络数据包跨主机网络、容器网络、虚机网络和物理网络到达对端,期间必然带来网络性能损耗。

场景

(1)低延时交易场景

证券交易系统具有交易时间相对集中、交易指令和数据密集的特点,对交易系统处理速度具有极高的要求。近年来,全球各大交易所都在不断对交易系统升级改造,其中“低时延”成为各大交易所竞争的核心,交易系统延时竞争已经进入微秒量级。用户通过客户端委托交易下单经过交易所外的交易软件、主机网络和物理网络,进入交易所内软硬件网络撮合交易,然后将委托回报和成交回报通过反向网络数据链路发送给用户。

图片

(2)视频和云游戏等流媒体场景

在多媒体领域,直播流媒体、在线视频和云游戏等场景都存在对网络性能、传输速度有极高的要求。单纯从软件或者操作系统虚拟化出来的网络设备,无法达到网络收发处理、转发和传输的性能要求,以及保证低丢包率和低时延

(3)流量隔离场景

在银行、证券、保险等金融行业,因金融政策、监管政策的要求,需要实现对管理流量、存储流量和业务流量进行隔离,做到网络运维管理,数据存储、数据备份和数据交互同步与业务流量分离,保障数据交互同步与正常网络访问的相互隔离,提高网络并发能力和降低网络延迟。

以上应用场景,无法通过单纯的应用网络、主机网络和硬件网络来解决微妙级低延时要求。如何提升云原生时代整体网络性能,降低网络时延呢?我们可以从传统网络和容器网络路径分析哪些可以优化的点或片段,针对这些点或片段提供可行的容器网络加速方案。

术语

CNI:Container Network Interface,容器运行时和网络实现之间的容器网络 API 接口。

IPAM:专门用于管理容器的IP地址管理,包含对容器分配 IP 地址、网关、路由和 DNS 等管理。

SR-IOV:Single Root I/O Virtualization,单根虚拟化,允许在虚拟机之间高效共享 PCIe 设备。

PF:Physical Function,包含 SR-IOV 功能结构主要用于 SR-IOV 功能管理。PF 通过分配 VF 来配置和管理 SR-IOV 功能。

VF:Virtual Function,轻量级 PCIE 功能(I/O 处理)的 PCIE 设备,每个VF 都是通过 PF 来生成管理,VF 的具体数量限制受限于 PCIE 设备、自身配置和驱动程序的支持。

RDMA:Remote Direct Memory Access,远程直接内存访问,将网络协议栈下沉到网卡硬件,网卡硬件收发包并进行协议栈封装和解析,然后将数据存放到指定内存地址,而不需要 CPU 干预。

DPDK:Data Plane Development Kit,数据平面开发套件,工作在用户态用于快速数据包处理,使用轮询 Polling 来处理数据包。

VPP:Vector Packet Processing,矢量数据包处理,工作在用户态的高性能数据包处理协议栈。通常与 DPDK 结合使用,提供多种收发数据包、交换和路由能力。

VCL:VPP Communication Library,高性能 VPP 数据包处理协议栈类库。

eBPF:Extended Berkeley Packet Filter,可扩展的伯克利包过滤器,在操作系统内核中运行沙盒程序,安全有效地扩展内核功能,而不需要更改内核源代码或加载内核模块。主要提供主机网络通信、安全管理和可观测的能力。

Cilium:基于 eBPF 技术实现的网络插件,用于提供网络、安全和观测容器工作负载之间的云原生网络。

XDP:eXpress Data Path,快速数据路径,XDP 是 Linux 网络处理流程中的一个 eBPF 钩子,能够挂载 eBPF 程序,能够在网络数据包到达网卡驱动层时对其进行处理。

传统网络数据包处理路径

在传统的 Linux 主机网络中,源应用程序通过系统调用与内核中 Socket 层进行网络数据交互,网络数据包分别依次进入 Socket 层、传输层、网络层和网络接口层,最后通过网卡驱动、CPU 和物理网卡到达目标应用程序所在的物理网卡,期间 CPU 和网卡驱动频繁进行硬中断、软中断与轮询来通知操作系统进行收发收据包。

图片

接下来,我们具体分析一下网络数据包发送流程:首先,在用户态网络协议栈中,源应用程序会调用 Socket 发送数据包的接口,数据包从用户态进入到内核态中的 Socket 层,Socket 层会将应用层数据拷贝到 Socket 发送缓冲区中。然后,在内核态网络协议栈中,从 Socket 发送缓冲区中取出数据包,并按照 TCP/IP 协议栈从上到下逐层处理。如果使用的是 TCP 传输协议发送数据,那么会在传输层增加 TCP 包头,然后交给网络层,网络层会给数据包增加IP包,然后通过查询路由表确认下一跳的 IP,并按照 MTU 大小进行分片。分片后的网络包,就会被送到网络接口层,通过 ARP 协议获得下一跳的 MAC 地址,然后增加帧头和帧尾,放到发包队列中。最后,等队列准备就绪后,会触发软中断告诉网卡驱动程序有新的网络包需要发送,最后驱动程序通过 DMA,从发包队列中读取网络包,将其放入到硬件网卡的队列中,随后在物理网络中,物理网卡再将它发送出去,通过交换机或者网桥等到达目标应用所在主机物理网卡。

网络数据包接收流程与网络数据包发送的流程正好相反,其中,发送流程执行数据包的封包处理,而接收过程则执行数据包的解包处理。基于以上网络数据包通信和处理过程,在高性能网络通信场景下,频繁的网络收发数据包,数据包在内核中不同网络路协议栈之间的封装和解包处理,以及软硬件中断与轮询,导致网络通信延迟较高

容器网络数据包处理路径

在容器网络环境下,网络数据包的处理流程较传统网络数据包的处理路径更加长,网络环境更加复杂。容器网络数据包的发送和接收经过七层,分别是:容器用户态编程协议、容器内核态网络协议栈、容器与主机网卡对、主机用户态容器网络 CNI、虚拟主机网络、主机网卡驱动,主机网卡和物理网络。

图片

相对于普通的容器化应用,微服务服务网格应用的容器网络最具代表性,主要多了边车 Sidecar 对应用的流量劫持和转发,其他的流量数据包处理过程与普通应用一样。下面以服务网格中应用与边车 Sidecar 之间的网络数据包发送和接收路径为例说明。

容器源应用程序访问目标应用程序的数据路径,在容器内与传统网络数据包收发处理流程类似,但是会增加容器主机网络路径。容器内源应用程序通过 Socket 调用,网络数据包由容器用户态进入容器内核态以太网协议栈,然后通过 Loopback 回环进入 Sidecar 边车的内核态和用户态协议栈。经由 Sidecar 流量劫持之后,通过应用 Sidecar 调用内核态 Socket 进入容器内核态以太网协议栈。最后经由主机用户态容器网络 CNI,通过虚拟主机网络,进入物理网卡和物理网络,转发至目标应用程序所在的主机和容器环境。目标应用程序所在的主机网络和容器网络的数据包处理路径与源应用程序数据包处理路径一样,但收发数据包的方向相反。

云原生背景下的容器网络,会在物理网络、主机网络、容器网络和容器主机网络等多个层面网络类型的网络性能瓶颈,可以从下表多维度分析潜在的网络加速方向:

图片

基于以上容器网络数据路径的分析,可以从几个方面进行网络规划和建设:

1、智能硬件网络方面,可以通过 Offload 下沉网卡驱动和数据包至智能硬件(SRIOV/DPU/RDMA)实现加速。

2、软件网络方面,操作系统网络层分为内核态网络和用户态网络,通过 ByPass 操作系统内核态网络协议栈,进入用户态网络协议栈,在用户态借助工具套件 DPDK,以及用户态 VPP、 VCL 和 QUIC 等协议进行编程,解决用户态网络性能问题,实现内核态和用户态网络加速。

容器网络加速方案

1. 智能网络加速

借助于支持 SR-IOV 的智能硬件,把网卡驱动卸载至物理网卡。通过调用 Netlink 包将 VF 修改到容器的 Namespace 下,使得物理机中 PF 扩展出来的 VF 可以被容器直接调用。基于 Multus、SR-IOV Device Plugin 和 SR-IOV CNI (Kubernetes 1.24 之前的版本,CNI 的管理由 Kubelet 负责,新版 Kubernetes 版本 CNI 管理由 CRI 负责)实现网络 IO 卸载至物理网卡上的 VF,同时把 VF 另一端插入容器,作为容器的以太网网卡。容器网络数据包从容器用户态协议栈,经过容器内核态协议栈,通过 VF 卸载至物理网卡 PF,ByPass 容器主机内核和主机内核驱动从而实现网络加速。同时,在 Underlay 网络场景中,通过 IPAM 可以管理集群域的固定 IP 分配、释放和回收,以及防止 IP 泄漏和 IP 冲突检测等。

图片

目前常见的支持容器 SR-IOV 技术的网卡有 Intel X710/X722/X520/540、Mellanox ConnectX-4/5/6 等,同时支持 NUMA、RDMA 和 DPU 等技术。

2. 内核态网络加速

基于支持 eBPF 的高内核版本(Kernel 4.19.57+,推荐5.10+ )的 Linux 操作系统,在 XDP 原生驱动模式(Native-Routing)或卸载模式(Offload,需要智能网卡支持)下 ByPass 内核协议栈,通过 Cilium CNI 将容器网卡一端植入 eBPF 程序,另一端插入容器内作为容器以太网网卡,实现通信和容器网络加速。可以基于 Multus、Cilium CNI 和 SpiderPool 实现内核网络加速

图片

3. 用户态网络加速

用户态的网络加速有多种实现方式,可以通过 SRIOV+DPDK 方式,把内核态网卡驱动切换成用户态网卡驱动,实现“用户态网卡 -> DPDK 轮询 Pool 模式-> DPDK 库 -> 应用程序” 跳过容器内核态网络协议栈,基于用户态 UIO Bypass 数据链路实现加速。或可以 DPDK +VPP/VCL 协议栈自编程模式的用户态网络极速。在服务网格场景下,借助于 Linux 高内核版本通过 eBPF Sockops/Sockmap 技术,实现应用服务与服务网格边车 Sidecar 之间的加速。

图片

以上三种网络方案,各有其有特定使用场景,智能网络加速方案加速性能最好,需要有智能硬件网卡的支持,对操作系统没有特殊的要求。内核态网络加速方案加速性能居中,仅需要操作系统满足一定的内核版本要求,有较好的通用适配性,适应于大多数网络加速场景的要求。用户态网络加速方案作为智能网络加速和用户态网络加速在 ByPass 系统内核之外的互补方案,用于用户态域的的网络加速,可以帮助用户实现全场景的网络加速方案,适应于用户应用程序的在 DPDK 工具、VPP/VCL 协议族、gRPC/QUIC 低延迟协议等自编程。

参考链接:

https://docs.kernel.org/networking/index.html 

https://docs.cilium.io/en/stable/overview/component-overview/ 

https://docs.cilium.io/en/stable/network/servicemesh/ 

https://cilium.io/use-cases/service-mesh/ 

https://ebpf.io/what-is-ebpf/ 

https://docs.openvswitch.org/en/latest/intro/install/afxdp/ 

https://github.com/k8snetworkplumbingwg/ovs-cni/blob/main/docs/ovs-offload.md 

https://xie.infoq.cn/article/6ba14b756c3019cc737ed48a6 

https://upload.wikimedia.org/wikipedia/commons/3/37/Netfilter-packet-flow.svg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2660631.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

开箱即用的企业级数据和业务管理中后台前端框架Ant Design Pro 5的开箱使用和偏好配置

Ant Design Pro 介绍 Ant Design Pro 是一个开箱即用的企业级前端解决方案,基于 Ant Design 设计体系,提供了丰富的组件和功能,帮助开发者更快速地开发和部署企业级应用。 Ant Design Pro 使用 React、umi 和 dva 这三个主要的前端开发技术…

elementui+vue2 input输入框限制只能输入数字

方法1 自定义表单校验 <el-form :model"Formdata" ref"formRef" :rules"nodeFormRules" label-width"100px"><el-form-itemlabel"年龄"prop"age"><el-input v-model.number"Formdata.age&q…

HackTheBox-Machines--Photobomb

文章目录 1 端口扫描2 测试思路3 Web漏洞探测4 权限提升 Photobomb 测试过程 1 端口扫描 nmap -sC -sV 10.129.57.2102 测试思路 目标开启了22、80端口&#xff0c;所以测试点还是从80端口开始。 针对80端口的测试&#xff1a;   1.目录扫描   2.网页源代码   3.web漏洞 …

Java开发框架和中间件面试题(10)

目录 104.怎么保证缓存和数据库数据的一致性&#xff1f; 105.什么是缓存穿透&#xff0c;什么是缓存雪崩&#xff1f;怎么解决&#xff1f; 106.如何对数据库进行优化&#xff1f; 107.使用索引时有哪些原则&#xff1f; 108.存储过程如何进行优化&#xff1f; 109.说说…

白话机器学习的数学-1-回归

1、设置问题 投入的广告费越多&#xff0c;广告的点击量就越高&#xff0c;进而带来访问数的增加。 2、定义模型 定义一个函数&#xff1a;一次函数 y ax b &#xff08;a 是斜率、b 是截距&#xff09; 定义函数&#xff1a; 3、最小二乘法 例子&#xff1a; 用随便确定的参…

node 项目中 __dirname / __filename 是什么,为什么有时候不能用?

__dirname 是 Node.js 中的一个特殊变量&#xff0c;表示当前执行脚本所在的目录的绝对路径。 __filename 同理&#xff0c;是 Node.js 中的一个特殊变量&#xff0c;表示当前执行脚本的绝对路径&#xff0c;包括文件名。 在 Node.js 中&#xff0c;__dirname / __filename是…

用通俗易懂的方式讲解大模型:Prompt 提示词在开发中的使用

OpenAI 的 ChatGPT 是一种领先的人工智能模型&#xff0c;它以其出色的语言理解和生成能力&#xff0c;为我们提供了一种全新的与机器交流的方式。但不是每个问题都可以得到令人满意的答案&#xff0c;如果想得到你所要的回答就要构建好你的提示词 Prompt。本文将探讨 Prompt 提…

鸿鹄电子招投标系统:基于Spring Boot、Mybatis、Redis和Layui的企业电子招采平台源码与立项流程

在数字化时代&#xff0c;企业需要借助先进的数字化技术来提高工程管理效率和质量。招投标管理系统作为企业内部业务项目管理的重要应用平台&#xff0c;涵盖了门户管理、立项管理、采购项目管理、采购公告管理、考核管理、报表管理、评审管理、企业管理、采购管理和系统管理等…

elasticsearch系列九:异地容灾-CCR跨集群复制

概述 起初只在部分业务中采用es存储数据&#xff0c;在主中心搭建了个集群&#xff0c;随着es在我们系统中的地位越来越重要&#xff0c;数据也越来越多&#xff0c;针对它的安全性问题也越发重要&#xff0c;那如何对es做异地容灾呢&#xff1f; 今天咱们就一起看下官方提供的…

分布式事务之最终一致性

分布式事务之最终一致性 参考链接分布式事务基础理论概述案例解决方案:RocketMQ可靠消息注意事项&#xff1a;代码实现 参考链接 原文链接&#xff1a;https://blog.csdn.net/jikeyeka/article/details/126296938 分布式事务基础理论 基于上述的CAP和BASE理论,一般情况下会保…

西北大学844计算机类考研-25级初试高分总攻略

西北大学844计算机类考研-25级初试高分攻略 个人介绍 ​ 本人是西北大学22级软件工程研究生&#xff0c;考研专业课129分&#xff0c;过去一年里在各大辅导机构任职&#xff0c;辅导考研学生专业课844&#xff0c;辅导总时长达400小时&#xff0c;辅导学生超过20余人&#xf…

展现无限创意的Photoshop 2023 Mac/win中文版:打造您的独特艺术之旅

无论您是摄影师、设计师还是艺术家&#xff0c;Photoshop 2023&#xff08;ps 2023&#xff09;都是您不可或缺的创意工具。最新升级的Photoshop 2023带来了更多令人兴奋的功能和改进&#xff0c;让您能够以前所未有的方式展现无限创意。 首先&#xff0c;Photoshop 2023拥有强…

uni-app引入vant表单(附源码)

新建项目 下载安装vant npm i vant main.js引入 import { Form } from vant; import { Field } from vant;Vue.use(Form); Vue.use(Field);代码引入 <van-form submit"onSubmit"><van-fieldclass"rePwd"v-model"username"name"请…

SpringBoot 接口对数据枚举类型的入参以及出参转换处理

目录 1、在项目中使用枚举类型2、不做任何处理的演示效果2.1、接口出参2.2、接口入参 3、用枚举的code作为参数和返回值3.1 代码案例3.1.1、定义枚举基础接口BaseEnum&#xff0c;每个枚举都实现该接口3.1.2、性别Sex枚举并实现接口BaseEnum3.1.3、定义BaseEnum枚举接口序列化3…

Python+OpenCV 零基础学习笔记(4-5):计算机图形基础+Python相对文件路径+OpenCV图像+OpenCV视频

文章目录 相关链接运行环境前言计算机图形OpenCV简单使用图形读取文件读取可能会出现的问题&#xff1a;路径不对解决方案其它路径问题解决方案 图像显示保存OpenCV视频视频素材如何获取&#xff1f;简单视频读取 相关链接 【2022B站最好的OpenCV课程推荐】OpenCV从入门到实战 …

Spring高手之路-Spring事务的传播机制(行为、特性)

目录 含义 七种事务传播机制 1.REQUIRED&#xff08;默认&#xff09; 2.REQUIRES_NEW 3.SUPPORTS 4.NOT_SUPPORTED 5.MANDATORY 6.NEVER 7.NESTED 含义 事务的传播特性指的是当一个事务方法被另一个事务方法调用时&#xff0c;这个事务方法应该如何进行&#xff1f; 七…

HTTP限流控制:Go语言中的精细把关

开场白&#xff1a;在Web应用中&#xff0c;流量控制是一个关键的防护措施&#xff0c;用于防止资源过度消耗和潜在的安全威胁。特别是在面对DDoS攻击或异常请求时&#xff0c;限流显得尤为重要。今天&#xff0c;我们将探讨如何在Go语言中实现HTTP的限流控制。 知识点一&…

elasticsearch-hadoop.jar 6.8版本编译异常

## 背景 重新编译 elasticsearch-hadoop 包&#xff1b; GitHub - elastic/elasticsearch-hadoop at 6.8 编译 7.17 版本时很正常&#xff0c;注意设置下环境变量就好&#xff0c;JAVA8_HOME/.... 编译 6.8 版本时&#xff08;要求jdk8 / jdk9&#xff09;&#xff0c;出现…

使用 Django 的异步特性提升 I/O 类操作的性能

目录 一、引言 二、Django 的异步特性 三、提升 I/O 类操作的性能 四、示例代码 五、总结 一、引言 Django 是一个高级的 Python Web 框架&#xff0c;它以快速开发和简洁的代码而闻名。然而&#xff0c;对于一些 I/O 密集型的应用程序&#xff0c;Django 的同步特性可能…

kubeadm创建k8s集群

kubeadm来快速的搭建一个k8s集群&#xff1a; 二进制搭建适合大集群&#xff0c;50台以上。 kubeadm更适合中下企业的业务集群。 部署框架 master192.168.10.10dockerkubelet kubeadm kubectl flannelnode1192.168.10.20dockerkubelet kubeadm kubectl flannelnode2192.168.1…