TKE基于弹性网卡直连Pod的网络负载均衡
前言
Kubernetes
在集群接入层设计并提供了两种原生资源service
和Ingress
,分别负责四层和七层的网络接入层配置。
传统的做法是创建Ingress或LoadBalancer类型的Service来绑定腾讯云的负载均衡将服务对外暴露。这种做法将用户流量负载到用户节点的NodePort上,通过KubeProxy组件转发到容器网络中,但这种方案在业务的性能和能力支持会有所局限。
为了解决这个问题,TKE容器团队为在腾讯云上使用独立或托管集群的用户提供了一种新的网络模式,利用弹性网卡直连Pod的方案很大的增强了性能和业务能力的支持。

本文将会从传统的模式的问题入手,比较新旧模式的区别,并在最后提供新直连模式的使用指引。
传统模式面临的问题与挑战
性能与特性
KubeProxy
在集群中会将用户NodePort
的流量通过NAT的方式转发到集群网络中。这个NAT转发带来了以下一些问题。
-
NAT转发导致请求在性能上有一定的损失。
-
- 进行NAT操作本身会带来性能上的损失。
- NAT转发的目的地址可能会使得流量在容器网络内跨节点转发。
-
NAT转发导致请求的来源IP被修改了,客户端无法获取来源IP。
-
当负载均衡的流量集中到几个NodePort时。过于集中的流量会导致NodePort的SNAT转发过多,使得源端口耗尽流量异常。还可能导致 conntrack 插入冲突导致丢包,影响性能。
-
KubeProxy
的转发具有随机性,无法支持会话保持。 -
KubeProxy
的每个NodePort其实也起到独立的负载均衡作用,由于负载均衡无法收敛到一个地方,所以难以达到全局的负载均衡。
为了解决以上问题,我们以前给用户提供的技术建议主要是通过Local转发的方式,避免KubeProxy
NAT转发带来的问题。但是因为转发的随机性,一个节点上部署多个副本时会话保持依旧无法支持。而且Local转发在滚动更新时,容易出现服务的闪断,对业务的滚动更新策略以及优雅停机提出了更高的要求。我们有理由去寻找更好的方案解决这个问题。
业务可用性
通过NodePort接入服务时,NodePort的设计存在极大的容错性。负载均衡会绑定集群所有节点的NodePort作为后端。集群任意一个节点的访问服务时,流量将随机分配到集群的工作负载中。这就意味着部分NodePort的不可用,或者是Pod的不可用都不会影响服务的流量接入。
和Local访问一样,直接将负载均衡后端连接到用户Pod的情况下,当业务在滚动更新时,如果负载均衡不能够及时绑定上新的Pod,业务的快速滚动可能导致业务入口的负载均衡后端数量严重不足甚至被清空。因此,业务滚动更新的时候,接入层的负载均衡的状态良好,方能保证滚动更新的安全平稳。
负载均衡的控制面性能
负载均衡的控制面接口。包括创建删除修改四层、七层监听器,创建删除七层规则,绑定各个监听器或者规则的后端。这些接口大部分是异步接口,需要轮询请求结果,接口的调用时间相对较长。当用户集群规模较大时,大量的接入层资源同步会导致组件存在很大的时延上的压力。
新旧模式对比
性能对比
Pod直连模式已经在腾讯TKE上线,是对负载均衡的控制面优化。针对整个同步流程,重点优化了批量调用和后端实例查询两个远程调用比较频繁的地方。优化完成后,Ingress典型场景下的控制面性能较优化前版本有了95%-97%左右的性能提升。目前同步的耗时主要集中在异步接口的等待上。
后端节点突增 (应对集群扩容的场景)
七层规则突增(应对业务第一次上线部署到集群的场景)

除去控制面性能优化这样的硬核优化,负载均衡能够直接访问容器网络的Pod就是组件业务能力最重要的组成部分了,其不仅避免了NAT转发性能上的损失,同时避免了NAT转发带来的各种对集群内业务功能影响。但是在启动该项目时这一块还没有特别好的访问容器网络的支持。所以一期考虑集群CNI网络模式下Pod有弹性网卡入口,这个入口可以直接接入到负载均衡以达到直接访问的目的。负载均衡直接后端访问到容器网络,目前已经有通过云联网解决的方案,后续也会继续跟进这种更贴近集群网络的直连方案。
接下来能够直接访问了,如何保证滚动更新时的可用性保证呢?我们找到了官方提供的一个特性ReadinessGate
。这个特性在1.12正式提供出来,主要是用来控制Pod的状态。默认情况下,Pod有以下Condition:PodScheduled、Initialized、ContainersReady,当这几个状态都Ready的时候,Pod Ready的Condition就通过了。但是在云原生的场景下面,Pod的状态是非常有可能需要参考其他状态的。ReadinessGate
提供了这样一个机制,允许为Pod的状态判断添加一个栅栏,由第三方来进行判断与控制。这样Pod的状态就和第三方关联起来了。
负载均衡流量对比
传统NodePort模式
请求细节过程
- 请求流量进入负载均衡
- 请求被负载均衡转发到某一个节点的NodePort
- KubeProxy将来自NodePort的流量进行NAT转发,目的地址是随机的一个Pod。
- 请求进入容器网络,并根据Pod地址转发到对应节点。
- 请求来到Pod所属节点,转发到Pod。
新的Pod直连模式
请求细节过程
- 请求流量进入负载均衡
- 请求被负载均衡转发到某一个Pod的ENI弹性网卡
直连与Local访问的区别
看起来这两种访问方式的效果是一样的,但是在细节上还是存在一些差别。
- 从性能上区别不大,开启Local访问时,流量不会进行NAT操作也不会进行跨节点转发,所以仅仅多了一个到容器网络的路由。
- 没有进行NAT操作,来源IP就能够正确获取了。会话保持功能可能会有以下问题,当一个节点上存在多个Pod时,流量到哪一个Pod是随机的,这个机制可能会使话保持出现问题。
ReadinessGate的引入
前面有两个细节,可以在这里得到解答。
- 为什么要求集群版本高于 1.12
- 为什么
kubectl get pod -o wide
的结果中READINESS GATES
列有内容。
这里涉及到一个滚动更新相关的问题 当用户开始为应用做滚动更新的时候,Kubernetes
会根据更新策略进行滚动更新。但是其判断一批Pod启动的标识仅包括Pod自身的状态,并不会考虑这个Pod在负载均衡上是否已经进行配置健康检查是否通过。有的时候当接入层组件高负载,不能及时对这些Pod进行及时调度的话,这些滚动更新成功的Pod可能并没有正在对外提供服务,从而导致服务的中断。为了将滚动更新和负载均衡的后端状态关联起来,TKE接入层组件引入了Kubernetes 1.12中引入的新特性ReadinessGate
。TKE接入层组件只有在确认后端绑定成功并且健康检查通过时,通过配置ReadinessGate
的状态来使Pod达到Ready的状态,从而推动整个工作负载的滚动更新。
在集群中使用ReadinessGate
的细节 Kubernetes集群提供的是一个服务注册的机制,你只需要将你的服务以MutatingWebhookConfigurations
资源的形式注册到集群中就可以了。集群会在Pod创建的时候按照你的配置的回调路径通知你,这个时候就可以对Pod做一些创建前的操作,在这个Case里面就是给Pod加上ReadinessGate
。唯一需要注意的就是这个回调过程必须是Https的,所以标配需要在MutatingWebhookConfigurations
中配置签发请求的CA,并在服务端配置该CA签发的证书。
ReadinessGate
机制的灾难恢复 用户集群中的服务注册或是证书有可能被用户删除,虽然这些系统组件资源不应该被用户修改或破坏。但在用户对集群的探索或是误操作下,这类问题会不可避免的出现。所以接入层组件在启动时会检查以上资源的完整性,在完整性受到破坏时会重建以上资源,加强系统的鲁棒性。
QPS和网络时延对比
直连与NodePort是服务应用的接入层方案,其实最终参与工作的还是用户部署的工作负载,用户工作负载的能力直接决定了业务的QPS等指标。所以我们针对这两种接入层方案,在工作负载压力较低的情况下,重点针对网络链路的时延进行了一些对比测试。直连在接入层的网络链路上能够优化10%左右的时间。同时测试中的监控也发现,直连模式减少了大量VPC网络内的流量。测试场景,从20节点到80节点,逐步增大集群规模,通过wrk工具对集群进行网络延时的测试。针对QPS和网络时延,下图给出了直连场景与NodePort的对比测试。
KubeProxy的一些设计思考
KubeProxy
的缺点也在前文中提到的一样明显。但是基于云上负载均衡、VPC网络的各种特性,我们能给出各种其他更加本地化的接入层方案。但这并不意味着KubeProxy
的设计不好或是作用不大。其对集群接入层的设计极具普适性、容错性,基本适用于所有业务场景下的集群,作为一个官方提供的组件这个设计是非常合适的。
新模式使用指引
前置要求
kubernetes
集群版本需要高于 1.12。- 集群网络模式必须开启
VPC-CNI
弹性网卡模式。 - 直连模式
Service
使用的工作负载需使用VPC-CNI
弹性网卡模式。
控制台操作指引
-
登录容器服务控制台。
-
参考控制台 创建service步骤,进入 “新建Service” 页面,根据实际需求设置 Service 参数。
其中,部分关键参数信息需进行如下设置,如下图所示:
- 服务访问方式:选择为【提供公网访问】或【VPC内网访问】。
- 网络模式:勾选【采用负载均衡直连Pod模式】。
- Workload绑定:选择【引用Worklocad】,并在弹出窗口中选择 VPC-CNI 模式的后端工作负载。
-
单击【创建服务】,完成创建。
Kubectl操作指引
-
Workload示例:nginx-deployment-eni.yaml
注意
spec.template.metadata.annotations
中声明了tke.cloud.tencent.com/networks: tke-route-eni
,在工作负载使用VPC-CNI弹性网卡模式。apiVersion: apps/v1 kind: Deployment metadata: labels: app: nginx name: nginx-deployment-eni spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: annotations: tke.cloud.tencent.com/networks: tke-route-eni labels: app: nginx spec: containers: - image: nginx:1.7.9 name: nginx ports: - containerPort: 80 protocol: TCP
-
Service示例:nginx-service-eni.yaml
注意:
metadata.annotations
中声明了service.cloud.tencent.com/direct-access: "true"
,Service在同步负载均衡时将采用直连的方式配置访问后端。apiVersion: v1 kind: Service metadata: annotations: service.cloud.tencent.com/direct-access: "true" labels: app: nginx name: nginx-service-eni spec: externalTrafficPolicy: Cluster ports: - name: 80-80-no port: 80 protocol: TCP targetPort: 80 selector: app: nginx sessionAffinity: None type: LoadBalancer
-
部署以上内容到集群
注意:在你的环境你首先需要连接到集群(没有集群的需要先创建集群),可以参考文章尾部的帮助文档配置kubectl连接集群。
➜ ~ kubectl apply -f nginx-deployment-eni.yaml deployment.apps/nginx-deployment-eni created ➜ ~ kubectl apply -f nginx-service-eni.yaml service/nginx-service-eni configured ➜ ~ kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-deployment-eni-bb7544db8-6ljkm 1/1 Running 0 24s 172.17.160.191 172.17.0.3 1/1 nginx-deployment-eni-bb7544db8-xqqtv 1/1 Running 0 24s 172.17.160.190 172.17.0.46 1/1 nginx-deployment-eni-bb7544db8-zk2cx 1/1 Running 0 24s 172.17.160.189 172.17.0.9 1/1 ➜ ~ kubectl get service -o wide NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR kubernetes ClusterIP 10.187.252.1 443/TCP 6d4h nginx-service-eni LoadBalancer 10.187.254.62 150.158.221.31 80:32693/TCP 6d1h app=nginx
总结
与业界对比,
- AWS有类似方案,通过弹性网卡的方式实现了Pod直连。
- GKE(Google Kubernetes Engine)也有类似方案。结合CLB(Google Cloud Load Balancing)的NEG(Network Endpoint Groups)特性实现接入层直连Pod。
现在腾讯云TKE也利用弹性网卡实现了Pod直连的网络模式,现已在腾讯云TKE上线。接下来,我们还计划对这个特性进行更多优化,包括
- 不依赖VPC-ENI的网络模式,实现普通容器网络下的Pod直连。
- 支持在Pod删除之前,摘除负载均衡后端。
腾讯会议-会议室连接器有哪些功能? 会议室连接器有哪些功能? 1. 会议室连接器介绍 近年来,视频会议越来越多的应用在人们的沟通和交流中,它既能够高效合理的利用时间、提高工作效率,又大大节省了差旅费用、减少了旅途奔波之苦。许多企业通过采购硬件视频会议系统,满足了部分需求,使远程会议得以成为现实。 从技术发展前景和满足现实应用的角度来看,云视频会议系统具有可随时随地召开,灵活、高效、易用、稳定、安全、互联互通的特点,已经成为众多企业及机构多媒体建设视频会议系统的核心部分。 为了在使用云视频会议的时候,充分利旧已有的硬件视频会议系统,腾讯会议推出了会议室连接器 MRA(Meeting Room Adapter)服务,实现腾讯会议兼容客户已经购买的 H.323/SIP 系统的功能。 2. 系统架构介绍 会议室连接器 MRA 将标准 SIP/H.323 会议设备融合到腾讯会议中,同时支持会议室连接器本地部署(VMRA)和私有化部署,实现会议室连接器 SAAS 服务和本地部署的双重模式,给客户根据项目实际情况更多的选择。 会议室连接器兼容 Polycom、思科、华为、亿联、中兴、AVAYA、中创等终端及MCU 产品,支持将标准 SIP/H.323 会议设备加入会议,支持音视频互通、内容共享、轮询、高级布局、个性布局、SIP peer、终端注册服务、手机控制器、呼叫速率控制、预留许可资源等功能,满足腾讯会议与标准 H.323、SIP 会议设备的融合互通,充分保护用户已有的投资成本。 3. 功能介绍 ⚫ 加入会议功能: 支持用户现网硬件终端硬件终端或服务器组网(MCU、信令服务器、穿越服务器等)加入腾讯会议,实现现网硬件终端(MCU)与腾讯会议终端之间音视频、双流的互通,音视频流畅,语音清楚,画面清晰。 […]
腾讯会议会-如何建设一间云视频会议室? 在企业中有各种规模的会议空间,从小型协作空间到大型会议室,培训空间等,根据这些会 议空间选择对应的解决方案,应包含以下几个部分: 1) 会议室专用的云视频应用程序 2) 主机(Windows/Mac/Android) 3) 外设设备(摄像头、麦克风、扬声器) 4) 显示设备(触摸屏、显示器、投影、小间距LED等) 5) 触摸控制器controller 或采用包含2、3、4项的All-in-One触摸一体机 或采用包含2、3项的安卓音视频Bar—体机 如何选择云视频会议室硬件 1. 如何选择主机 腾讯会议 Rooms 适用的主机有Windowss Mac OS、Android三种系统。 基于 Windows 的主机,为保证满足视频会议的流畅性能及稳定性要求,推荐采用腾讯会议 认证的主机,例如: 更多认证硬件,请访腾讯会议官网https://meeting.tencent.com/rooms-device/index.html 也可以采用性能配置符合腾讯会议推荐要求的通用型电脑主机: •软硬件最低要求: 操作系统:Window 10 1809或以上 CPU: 4核1.6Ghz或以上 内存:8G双通道(双4G) […]
腾讯会议-如何构建人性化的会议室体验? 最好的会议体验是无感知 1. 声音,会议沟通的重要基础 大大小小的会议室中,使用音视频会议系统开会时,你是否遇到过这些感受: •环境噪音太大,音视频会议的另一方无法听清你说的内容 •隔壁会议室的人说话太大声,影响到远端 •听对方的感觉沉闷单薄,影响方案展示和情绪表达 •混响太强,听对方说话就像在山洞,长时间沟通感觉很累 •多个人同时打开电脑客户端入会引起啸叫 混响时间频率参考曲线 腾 讯 会议天籁实验室深入了几百间企业会议室实地调研,调研结果发现大部分的房间噪音水平 、 混 响 时 间 都 处 于 超 标 水 平 。 经 过 咨 询 , 在 建 设 初 期 大 部 分 企 业 没 有 把 音 视 频 会 议 室 […]
腾讯会议-会议室连接器MRA本地部署 会议室连接器 MRA 部署方式-本地部署VMRA 1. 会议室连接器本地部署 VMRA 组网 ➢ DMZ 中间隔离区进行安装部署 ; ➢ 企业内网 H.323/SIP 视频会议系统呼叫本地部署的 VMRA 接入地址 IP; ➢ 本地部署 VMRA 与云端腾讯会议平台进行音视频双流互通; ➢ VMware 平台(EXSI),虚拟化部署; ➢ VMRA 支持基于 KVM 的镜像文件,方便客户可以在 KVM 的环境中部署; 腾讯会议室连接器支持本地部署 VMRA,在用户的网络要求在独立网络或信息安全要求较高的用户,可以 采用在用户侧本地部署腾讯会议的会议室连接器 VMRA。 更安全: 媒体转换过程下沉到客户本地,H.323/SIP 视频会议系统会以更安全的方式与腾讯会议公有云平台互通互联 […]
会议室连接器有哪些入会方式? 腾讯会议-会议室连接器有哪些入会方式? 1. 场景一 通过现有H.323/sip视频会议终端直接呼入腾讯会议 方法一: 直接拨打 “会议号@IP 地址” 或 “会议号**会议密码@IP 地址”加入会议 第 1 步 在设备主页选择 呼叫/拨打,进入拨号界面 第 2 步 在 拨 号 界 面 输 入 会议号@IP 地 址 或 会 议 号 ** 会 议 密 码 @IP 地 址 , 例 如 , 909672754@42.187.185.2 或 909672754**327565@42.187.185.2 您可以根据您的地理位置来选择 IP 地址 方法二: 通过拨打 “IP […]
腾讯会议会-会议室连接器 MRA 部署方式 会议室连接器 MRA 部署方式 1. 公有云 MRA–SAAS 服务 腾讯会议室连接器支持云端部署,对于用户来说,无需在用户侧增加任何硬件设备,无需专人维护,只需要用户网络满足可以访问互联网,即可使用会议室连接器服务。 购买会议室连接器服务后,用户使用现有硬件设备可以通过会议室连接器 MRA 就近接入的 IP 地址和腾讯会议号加入会议,会议室连接器支持与传统视频会议系统的 MCU 级联或是终端直接连接两种互通方式。 2. 公有云 MRA 服务流程。 1、 客户联系销售人员购买腾讯 MRA 服务,可以进行线上下单。对于首次使用 MRA 的用户,腾讯提供 MRA 测试试用服务,客户在购买前,可以联系销售人员进行测试试用。 2、 购买后,腾讯将为用户开通 MRA 服务。 3、 在开会时,硬件终端或 MCU 可以通过呼叫就近的会议室连接器接入 IP 地址和腾 讯会议的会议号加入会议中。 Posted on 2023年2月1日 callum 腾讯会议-会议室连接器介绍 腾讯会议会议室连接器 腾讯会议-会议室连接器介绍 […]
腾讯会议会议室连接器 腾讯会议-会议室连接器介绍 1. 产品简介 近年来,视频会议越来越多的应用在人们的沟通和交流中,它既能够高效合理的利用时间、提高工作效率,又大大节省了差旅费用、减少了旅途奔波之苦。许多企业通过采购硬件视频会议系统,满足了部分需求,使远程会议得以成为现实。 从技术发展前景和满足现实应用的角度来看,云视频会议系统具有可随时随地召开,灵活、高效、易用、稳定、安全、互联互通的特点,已经成为众多企业及机构多媒体建设视频会议系统的核心部分。 为了在使用云视频会议的时候,充分利旧已有的硬件视频会议系统,腾讯会议推出了会议室连接器 MRA(Meeting Room Adapter)服务,实现腾讯会议兼容客户已经购买的 H.323/SIP 系统的功能。 会议室连接器 MRA 将标准 SIP/H.323 会议设备融合到腾讯会议中,同时支持会议室连接器本地部署(VMRA)和私有化部署,实现会议室连接器 SAAS 服务和本地部署的双重模式,给客户根据项目实际情况更多的选择。 会议室连接器兼容 Polycom、思科、华为、亿联、中兴、AVAYA、中创等终端及MCU 产品,支持将标准 SIP/H.323 会议设备加入会议,支持音视频互通、内容共享、轮询、高级布局、个性布局、SIP peer、终端注册服务、手机控制器、呼叫速率控制、预留许可资源等功能,满足腾讯会议与标准 H.323、SIP 会议设备的融合互通,充分保护用户已有的投资成本。 2.功能介绍 ⚫ 加入会议功能: 支持用户现网硬件终端硬件终端或服务器组网(MCU、信令服务器、穿越服务器等)加入 […]
腾讯会议如何加强会议安全性? 腾讯会议-指导加强会议安全性? 1. 内部范围可控,安全化接入 企业账号快捷登陆 • 企微登录/SSO 可控内部权限 • 会议范围避免误发外漏 参会成员信息清晰 • 与会者名称规范• 组织架构清晰• 内外参会员一眼辩识 2. 嘉宾名单,内外结合 •内部仅企业成员入会•外部设置嘉宾手机号•嘉宾无需等候室或输入密码即可加入会议•嘉宾手机号名下账号均收到会议议程 3. 敏感会议,场外可控。 对于企业内部敏感会议,企业会服可在场外web端进行实时会议控制。 4. 会议安全,全局掌控 入会安全 强制仅允许企业成员头入会 内容安全 强制屏幕水印 禁止上传文档 成员显示标准规范 禁止昵称修改 头像修改 会议能力控制 虚拟背景 会议红包 会议文档 5. 会中安全,有效管控 多排水印,内容严防追溯 等候室,严格控制入会人员 会中权限,维护会议良好秩序 Posted […]
腾讯会议软件不同版本有哪些区别? 腾讯会议个人版/商业版/企业版有哪些区别? 个人版、商业版、企业版重点能力对比 Posted on 2023年1月12日 callum 腾讯会议软件不同版本有什么区别? 腾讯会议软件不同版本有哪些区别? 腾讯会议个人版/商业版/企业版有哪些区别? 个人版 […] Read More Posted on 2023年1月5日 callum 腾讯会议-会议室如何管理? 腾讯会议-会议室如何管理? 腾讯会议应用指南-会议室如何管理? 1. 会议室管理 […] Read More Posted on 2023年1月5日 callum 腾讯会议如何进行企业账号管理? 腾讯会议如何进行企业账号如何管理? 腾讯会议应用指南-企业账号如何管理? 1. 企业账号管理1 […] Read More Posted on 2023年1月5日 callum 腾讯会议如何进行企业用户管理? 腾讯会议如何进行企业用户管理? 腾讯会议应用指南-企业用户如何管理? 1. 企业用户管理(iDaaS) […]
腾讯会议-会议室如何管理? 腾讯会议应用指南-会议室如何管理? 1. 会议室管理 ⚫ 会议室管理【会议室】可查看rooms设备的状态,可进行查看/编辑/导出设备信息。 2. 会议连接器 ⚫ 详细介绍【MRA】会议连接器的拨入方式、使用手册、支持设备型号、网络端口开放等内容 Posted on 2023年1月12日 callum 腾讯会议软件不同版本有什么区别? 腾讯会议软件不同版本有哪些区别? 腾讯会议个人版/商业版/企业版有哪些区别? 个人版 […] Read More Posted on 2023年1月5日 callum 腾讯会议-会议室如何管理? 腾讯会议-会议室如何管理? 腾讯会议应用指南-会议室如何管理? 1. 会议室管理 ⚫ […] Read More Posted on 2023年1月5日 callum 腾讯会议如何进行企业账号管理? 腾讯会议如何进行企业账号如何管理? 腾讯会议应用指南-企业账号如何管理? 1. 企业账号管理1 […] Read More Posted […]