当使用ASM管理多个集群时,一个服务的工作负载可能会同时部署在多个集群中。访问服务时,流量默认在多集群之间进行负载均衡。若您希望访问服务时,流量只保持在本集群中,可以使用集群内流量保持功能。以Bookinfo应用为例,本文介绍如何在ASM中使用集群内流量保持功能。
前提条件
- 已在同一VPC下创建两个ACK集群(本文以m1c1和m1c2为例)。具体操作,请参见创建Kubernetes专有版集群。
- 已创建一个ASM实例,且版本为1.15.3.101及以上(本文以mesh1为例)。具体操作,请参见创建ASM实例。
准备工作
步骤一:配置集群的互访联通性
(可选)修改集群的安全组名称将两个集群对应的安全组名称修改为易于辨识的名称,方便后续配置。本示例安全组名称配置为m1c1-sg和m1c2-sg。
展开查看如何修改集群的安全组名称
- 登录ECS控制台,然后在左侧导航栏,选择 。
- 在顶部菜单栏,选择目标ECS实例所在的地域。
- 在安全组页面的操作列,单击目标安全组对应的修改,然后在修改安全组对话框,修改安全组名称,单击确定。

步骤二:添加集群到ASM实例并部署集群的入口网关
将两个集群添加到ASM实例后,两个集群已实现访问互通,因此只需为一个集群部署入口网关即可。
- 将两个集群添加到ASM实例。具体操作,请参见添加集群到ASM实例。
- 为m1c1集群部署入口网关。具体操作,请参见创建入口网关服务。
步骤三:在两个集群中分别部署Bookinfo应用
本文以在两个集群中分别部署Bookinfo应用为例,验证ASM集群内流量保持功能。两个集群中服务的区别为m1c1中Reviews组件为v1版本,m1c2中Reviews组件为v2版本,其他保持一致。
- 使用bookinfo-with-reviews-v1.yaml,在m1c1中部署包含v1版本的Reviews Deployment的Bookinfo应用。具体操作,请参见部署应用到ASM实例。v1版本的Reviews Deployment在网页的书评区域,将不展示星形评分。
- 使用bookinfo-with-reviews-v2.yaml,在m1c2中部署包含v2版本的Reviews Deployment的Bookinfo应用。v2版本的Reviews Deployment在网页的书评区域,将以黑白五角星的形式展示评分。
步骤四:在ASM中创建网关规则、虚拟服务和目标规则
- 使用以下YAML,在ASM实例的default命名空间下创建网关规则。具体操作,请参见管理网关规则。
展开查看网关规则YAML
apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: name: bookinfo-gateway spec: selector: istio: ingressgateway servers: - port: number: 80 name: http protocol: HTTP hosts: - "*"
- 使用以下YAML,在ASM实例的default命名空间下创建虚拟服务。具体操作,请参见管理虚拟服务。
展开查看虚拟服务YAML
apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: bookinfo-cluster-local spec: hosts: - "*" gateways: - bookinfo-gateway http: - match: - uri: exact: /productpage1 rewrite: uri: /productpage route: - destination: host: productpage port: number: 9080 subset: m1c1 - match: - uri: exact: /productpage2 rewrite: uri: /productpage route: - destination: host: productpage port: number: 9080 subset: m1c2 - match: - uri: prefix: /static - uri: exact: /login - uri: exact: /logout - uri: prefix: /api/v1/products route: - destination: host: productpage port: number: 9080
- 使用以下YAML,在ASM实例的default命名空间下创建目标规则。具体操作,请参见管理目标规则。
展开查看目标规则YAML
apiVersion: networking.istio.io/v1beta1 kind: DestinationRule metadata: name: productpage-cluster-local spec: host: productpage subsets: - name: m1c1 labels: cluster: m1c1 - name: m1c2 labels: cluster: m1c2
- 在浏览器访问http://{入口网关IP}/productpage1或http://{入口网关ip}/productpage2,并刷新网页。关于如何查看入口网关IP,请参见创建入口网关服务。若书评区域的星形评分交替出现,表明Bookinfo应用部署成功。
操作步骤
下文以按照服务级别开启集群内流量保持功能为例,将请求Reviews服务的流量保持在本集群。关于按照全局或命名空间开启集群内流量保持功能的具体操作,请参见相关操作。- 登录ASM控制台,在左侧导航栏,选择 。
- 在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择 。
- 在基本信息页面的配置信息区域,单击集群内流量保持右侧的编辑。
- 在配置集群内流量保持服务对话框,打开开启保持集群内流量的能力开关,选中部分服务生效,然后单击选择服务。
- 在添加服务对话框,选中服务,命名空间选择default,在选择服务区域,选中reviews,单击
图标,然后单击确定。
- 配置完成后,在配置集群内流量保持服务对话框,单击确定。
在配置信息区域,集群内流量保持右侧显示已配置,表明集群内流量保持功能已开启。
- 验证集群内流量保持功能是否生效。以上结果表明集群内流量保持功能生效。
结果分析

类型 | 说明 |
---|---|
未开启集群内流量保持功能 | 在Bookinfo应用中,Productpage组件会调用Reviews服务以获取书评信息。在浏览器访问http://{入口网关IP}/productpage1时,会访问m1c1集群中的Productpage;在浏览器访问http://{入口网关IP}/productpage2时,会访问m1c2集群中的Productpage。 在m1c1和m1c2两个集群中都存在Reviews服务的工作负载。默认情况下,即使访问某个特定集群(例如m1c1集群中的Productpage),对Reviews服务的请求也会在两个集群之间进行负载均衡。您可以在Productpage页面的书评区域交替看到星形评分信息。 |
已开启集群内流量保持功能 | 访问某个特定集群时(例如m1c1集群中的Productpage),对Reviews服务的请求不会在两个集群之间进行负载均衡。您可以看到在Productpage页面的书评区域始终不显示评分,不会出现交替星形评分信息的情况。 重要 流量保持功能开启后,如果m1c1集群中的Reviews-v1因故障等原因下线,Productpage无法通过访问m1c2集群中的Reviews-v2来提供服务。 |
相关操作
按照全局开启集群内流量保持功能
- 在基本信息页面的配置信息区域,单击集群内流量保持右侧的编辑。
- 在配置集群内流量保持服务对话框,打开开启保持集群内流量的能力开关,选中全部服务生效,然后单击确定。开启后,集群的流量都将保持在本集群内。
按照命名空间开启集群内流量保持功能
- 在基本信息页面的配置信息区域,单击集群内流量保持右侧的编辑。
- 在配置集群内流量保持服务对话框,打开开启保持集群内流量的能力开关,选中部分服务生效,然后单击选择服务。
- 在添加服务对话框,选中命名空间,在选择服务区域,选中目标命名空间,单击
图标,然后单击确定。
- 在配置集群内流量保持服务对话框,单击确定。
开启后,访问目标命名空间下服务的流量都将保持在本集群内。