腾讯云原生应用负载均衡系列:入口流量分发,容错与高可用调度
引言
在云原生应用负载均衡系列第一篇文章《云原生应用负载均衡选型指南》介绍了云原生容器环境的入口流量管理使用场景与解决方案,用 Envoy 作为数据面代理,搭配 Istio 作控制面的 Istio Ingress Gateway,在多集群流量分发、安全、可观测性、异构平台支持等方面的综合对比中,是云原生应用流量管理的最佳方案。
在接入层,我们需要配置路由规则、流量行为(超时、重定向、重写、重试等)、负载均衡算法、断路器、跨域等流量管理规则,本文将基于 Istio Ingress Gateway 面向入口流量分发、容错与高可用调度介绍上述功能的原理与演示。
组件介绍
Istio Ingress Gateway,可作为 Kubernetes 的一种 Ingress Controller 12,由数据面(Envoy 网络代理 1)与控制面 Istiod 13组成,默认以 Deployment 的形式部署 Pod 至 Kubernetes 集群。
服务发现
Istio Ingress Gateway 控制面 Istiod 可联通各种服务发现系统(Kubernetes,Consul,DNS)获取 endpoints 信息,或者我们可以使用 ServiceEntry 手动添加服务与 endpoints 对应信息。以常见的 Kubernentes 集群为例,Istiod 从 API Server 获取 Kubernetes Services 及其对应的 endpoints,对应关系实时监测与自动更新。获取服务发现信息后,Istiod 会将其转化为数据面标准数据格式,以 Envoy xDS API 的形式 push 到实际执行流量转发操作的数据面 Envoy 网络代理。
值得注意的是,Istio Ingress Gateway 的数据面 Envoy 是以单独 Pods 的形式部署于 Kubernetes 集群,只需使用 Istio 南北向流量管理能力时,无需在业务 Pods 注入 Istio 数据面 sidecar,Ingress Gateway 的 Envoy Pods 即可承载全部入口流量管理的能力,因为 Istio 入口流量管理的功能大部分是在 Envoy 网络代理的 client 端(Istio Ingress Gateway)实现的。

Istio 流量管理模型及 API 介绍
Istio 设计了自己的流量管理 API,主要通过 Gateway,VirtualService,DestinationRule 这几个 CR(Kubernetes Custom Resource 2)实现。
- Gateway:配置监听规则。包括端口、协议、host、SSL 等。
- VirtualService:配置路由规则。包括匹配条件、流量行为、路由目的服务/版本等。
- DestinationRule:配置服务版本及负载均衡、连接池、健康检查策略。

我们可以与安装 Istio 控制面所在集群的 API Server 交互,提交上述 CR,配置流量管理规则。Istiod 会与该集群的 API Server 交互,获取 Istio API,将这些配置转化为 Envoy 数据面标准数据格式,通过 xDS 接口 push 至数据面(Istio Ingress Gateway),数据面即可根据相应规则转发流量。
入口流量管理实践
下面以 Istio Ingress Gateway 为例介绍入口流量分发、容错与高可用调度的实践。
环境准备
环境准备可以使用 TCM 控制台 「一键体验」功能,将自动为您准备 TCM + 2 个跨可用区 Kubernetes 集群 + TCM demo 的初始环境。
我们准备一个 Istio Ingress Gateway(使用腾讯云服务网格 TCM 演示) + Kubernetes 集群(使用腾讯云容器服务 TKE 演示)环境,首先创建一个服务网格实例,并在网格实例中创建 Istio Ingress Gateway,然后添加一个 TKE 集群作为网格的服务发现集群。
在集群部署 TCM demo 3,无需为业务 Pod 注入 envoy sidecar。该 demo 是一个电商网站,由不同语言开发的 6 个微服务组成,以下是 demo 的完整结构:

本次演示入口流量管理会使用 demo 中的 user、product、cart 三个应用,将其提供的 API 通过 istio- ingressgateway 暴露供客户端调用。

入口流量分发
应用发布
业务需要将多个后端模块提供的 API 暴露供客户端调用,需要配置网关路由规则,将请求路径 /product 的流量路由至 product 服务,将 /cart 的请求路由至 cart 服务,将 /user 的请求路由至 user 服务。
TCM demo 中,product 服务提供 /product 接口,可获取在售商品列表;user 服务提供 /user 接口,可获取用户信息;cart 服务提供 /cart 接口,可获取购物车商品列表。下面我们配置 Istio Ingress Gateway 按照请求的路径暴露上述接口。
1. 首先我们通过 kubectl 获取 Ingress Gateway 的 IP,并配置为变量 $INGRESS_HOST
,方便后续直接引用。
$ export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
2. 使用 Gateway 配置 Ingress Gateway 监听规则,开启 80 端口,HTTP 协议,暂不配置 SSL。
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: apis-gw
spec:
servers:
- port:
number: 80
name: HTTP-80-6wsk
protocol: HTTP
hosts:
- '*'
selector:
app: istio-ingressgateway
istio: ingressgateway
3. 使用 VirtualService 配置路由规则,gateway 参数填写上一步创建的 default/apis-gw
,http 路由匹配规则将 /product 的请求路由至 product 服务,/user 路由至 user 服务,/cart 路由至 cart 服务。
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: apis-vs
spec:
hosts:
- '*'
gateways:
- default/apis-gw
http:
- match:
- uri:
exact: /product
route:
- destination:
host: product.base.svc.cluster.local
- match:
- uri:
exact: /user
route:
- destination:
host: user.base.svc.cluster.local
- match:
- uri:
exact: /cart
route:
- destination:
host: cart.base.svc.cluster.local
4. 使用 curl
验证上述配置,请求 API 返回的 JSON 字串使用 jq
解析,提取出返回的 service 信息。请求已按照预设方式按路径路由至不同服务。
$ curl http://$INGRESS_HOST/product | jq '.info[0].Service'
...
"product-v1"
$ curl http://$INGRESS_HOST/cart | jq '.Info[1].Service'
...
"cart-v1"
$ curl http://$INGRESS_HOST/user | jq '.Info[0].Service'
...
"user-v1"
灰度发布
业务需要升级 product 服务,已经完成准备新版本镜像,可以开始部署新版本的 pods。希望服务端在升级时需考虑版本的平滑、无风险迭代,按百分比调整流量逐步切换至新版本服务,灰度验证新版本无问题后再下线旧版本。
以下是配置 Ingress Gateway 做 product 服务灰度发布的流程:
1. 使用 DestinationRule 定义 product 服务的版本(subsets),用标签键值匹配即可定义一个服务内 subsets 与 endpoints 对应关系。
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: product
namespace: base
spec:
host: product
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2
exportTo:
- '*'
2. 使用 VirtualService 配置灰度发布路由策略,发布最初 v2 版本为 0% 的流量,v1 版本 100%。
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: apis-vs
spec:
hosts:
- '*'
gateways:
- default/apis-gw
http:
- match:
- uri:
exact: /product
route:
- destination:
host: product.base.svc.cluster.local
subset: v2
weight: 0
- destination:
host: product.base.svc.cluster.local
subset: v1
weight: 100
- match:
- uri:
exact: /user
route:
- destination:
host: user.base.svc.cluster.local
- match:
- uri:
exact: /cart
route:
- destination:
host: cart.base.svc.cluster.local
3. 我们把 TCM demo product 服务的 v2 版本(deployment)5 部署到集群,然后模拟发起 10 次请求调用 product 服务,返回结果表明发布最初所有流量仍然是路由到 v1 版本。
$ for((i=0;i<10;i++)) do curl http://$INGRESS_HOST/product | jq '.info[0].Service'; done
"product-v1"
"product-v1"
"product-v1"
"product-v1"
"product-v1"
"product-v1"
"product-v1"
"product-v1"
"product-v1"
"product-v1"
4. 修改 VirtualService,把 product v1 和 v2 subset 的权重值分别调整为:50,50。模拟发起 10 次请求调用 product 服务,结果如预设,v2 和 v1 版本调用次数的比例接近 1:1。
$ for((i=0;i<10;i++)) do curl http://$INGRESS_HOST/product | jq '.info[0].Service'; done
"product-v1"
"product-v2"
"product-v1"
"product-v2"
"product-v1"
"product-v2"
"product-v1"
"product-v2"
"product-v1"
"product-v1"
5. 灰度验证完成后,修改灰度发布路由规则,修改 VirtualService 调整 v1 v2 subset 权重分别为:0,100,将 100% 请求 /product 的流量路由至 product v2 版本。再次模拟发起 10 次请求验证,所有请求已被路由至 product v2,灰度发布完成。
$ for((i=0;i<10;i++)) do curl http://$INGRESS_HOST/product | jq '.info[0].Service'; done
"product-v2"
"product-v2"
"product-v2"
"product-v2"
"product-v2"
"product-v2"
"product-v2"
"product-v2"
"product-v2"
"product-v2"
会话保持
同一后端服务一般由多个实例(Pod)承载,通常需要将入口流量在多个后端实例负载均衡(例如 product 服务)负载均衡,此时配置的是 round robin、random 或最小连接数等负载均衡算法,保持多个后端实例均衡处理流量。 在一些特定情况下,需要将来自同一用户的请求路由到相同后端实例,保证某些需要会话保持的服务(例如 cart 购物车服务)能够正常工作。
会话保持有两种:
- 基于 IP 的简单会话保持:来自同一 IP 地址的请求判定为同一用户,路由至相同后端服务实例。实现简单、方便,但无法支撑多个客户端使用代理访问后端服务的场景,此时同一 IP 地址不代表同一用户。
- 基于 cookie(或其他 7 层信息)的会话保持:用户第一次请求时,边缘网关为其插入 cookie 并返回,后续客户端使用此 cookie 访问,边缘网关
腾讯会议-会议室连接器有哪些功能? 会议室连接器有哪些功能? 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 […]