服务网格ASM为应用服务提供了跨地域流量分布和跨地域故障转移能力。跨地域流量分布功能可以将流量按照设定的权重路由至多个集群,实现多地域负载均衡。跨地域故障转移功能可以在某地域服务发生故障时,将该地域流量转移至其他地域,实现跨地域容灾。以Bookinfo应用为例,本文介绍如何使用跨地域故障转移和流量分布能力实现跨地域容灾和流量负载均衡。
网络规划
在进行操作前,您需要对vSwitch、VPC和集群的网段、名称等信息进行规划,本文规划如下:
关于数据平面多集群地址规划的详细介绍,请参见多集群网络规划。
vSwitch和VPC的网络规划
VPC网络规划
对象
VPC名称
Region
IPv4网段
集群
vpc-hangzhou
cn-hangzhou
20.0.0.0/8
vpc-shanghai
cn-shanghai
21.0.0.0/8
服务网格
vpc-hangzhou2
cn-hangzhou
192.168.0.0/16
vSwitch网络规划
重要为了避免使用CEN打通VPC网络后产生路由冲突,两个vSwitch不能使用相同的网段。
对象
vSwitch名称
VPC
IPv4网段
集群
vpc-hangzhou-switch-1
vpc-hangzhou
20.0.0.0/16
vpc-shanghai-switch-1
vpc-shanghai
21.0.0.0/16
服务网格
vpc-hangzhou-switch-2
vpc-hangzhou2
192.168.0.0/24
集群的Pod和Service网络规划
集群名称
Region
VPC
Pod CIDR
Service CIDR
ack-hangzhou
cn-hangzhou
vpc-hangzhou
10.0.0.0/16
172.16.0.0/16
ack-shanghai
cn-shanghai
vpc-shanghai
10.1.0.0/16
172.17.0.0/16
步骤一:创建不同地域的集群
按照以上规划创建杭州和上海地域的VPC和vSwitch。具体操作,请参见创建交换机和创建专有网络和交换机。
使用上文创建的VPC和网络规划创建杭州和上海地域的集群。具体操作,请参见创建ACK托管集群。
根据以上规划创建杭州地域的ASM实例。具体操作,请参见创建ASM实例。
步骤二:使用CEN实现跨地域VPC网络互通
使用CEN打通集群之间的VPC网络,以及集群和服务网格之间的VPC网络。
创建转发路由器。
在云企业网实例页面,单击步骤1创建的云企业网实例名称,然后在基本信息页签下方,单击创建转发路由器。
在创建转发路由器对话框,选择地域,输入名称,然后单击确认。
本示例配置了两个转发路由器:
地域为华东2(上海),名称为shanghai-router。
地域为华东1(杭州),名称为hangzhou-router。
将VPC添加到转发路由器,为上海和杭州两个转发路由器重复下列步骤,将VPC连接到转发路由器。
在云企业网实例页面,单击步骤1创建的云企业网实例名称,然后在基本信息页签下方,单击刚创建的转发路由器ID,进入转发路由器页面。
单击地域内连接管理页签,然后单击创建网络实例连接,实例类型选择专有网络(VPC),网络实例选择Region对应的VPC实例。
其他选项保持默认,单击确定创建。
设置跨地域带宽。
添加安全组规则。
以下以Flannel网络插件为例,在两个集群的安全组内添加对方集群的Pod网络CIDR。
说明Terway网络插件请使用集群vSwitch的CIDR。您可以登录专有网络管理控制台,在交换机页面的IPv4网段列,获取vSwitch的CIDR。
登录容器服务管理控制台,在左侧导航栏选择集群列表。
获取Pod网络CIDR。
在集群列表页面,选择上海地域,单击ack-shanghai集群名称,然后在集群信息页面的基本信息页签,获取ack-shanghai集群的Pod网络CIDR。
返回集群列表页面,选择杭州地域,单击ack-hangzhou集群名称,然后在集群信息页面的基本信息页签,获取ack-hangzhou集群的Pod网络CIDR。
配置安全组。
分别在两个集群的集群信息页面单击基本信息页签,然后单击控制面安全组右侧的安全组ID。
在安全组详情页签入方向下单击手动添加。
设置协议类型为全部,源对方集群的Pod网络CIDR,其他为默认值,然后单击操作列下的保存。
分别登录两个集群的节点, 使用ping命令测试与另一个集群中的网络是否连通。具体操作,请参见节点登录。
步骤三:添加集群到ASM实例并创建托管式的入口网关
将杭州地域和上海地域的两个集群添加到ASM实例。具体操作,请参见添加集群到ASM实例。
创建入口网关。
apiVersion: istio.alibabacloud.com/v1beta1 kind: IstioGateway metadata: annotations: asm.alibabacloud.com/managed-by-asm: 'true' name: ingressgateway namespace: istio-system spec: gatewayType: ingress dnsPolicy: ClusterFirst externalTrafficPolicy: Local hostNetwork: false ports: - name: http port: 80 protocol: TCP targetPort: 80 - name: https port: 443 protocol: TCP targetPort: 443 replicaCount: 1 resources: limits: cpu: '2' memory: 2G requests: cpu: 200m memory: 256Mi rollingMaxSurge: 100% rollingMaxUnavailable: 25% runAsRoot: true serviceType: LoadBalancer
步骤四:部署演示应用Bookinfo
分别在ack-hangzhou集群和ack-shanghai集群部署Bookinfo应用。
kubectl apply -f bookinfo.yaml
使用kubectl连接到ASM实例,创建路由规则。
使用以下内容,创建asm.yaml。
创建路由规则。
kubectl apply -f asm.yaml
验证Bookinfo应用是否部署成功。
获取入口网关地址。
在浏览器地址栏,输入http://{入口网关服务的IP地址}/productpage,持续刷新页面10次,访问Bookinfo应用。
每次刷新都会访问reviews服务的v1、v2和v3版本。您可以看到reviews服务三个版本出现的比例接近1:1:1。
步骤五:使用跨地域故障转移和跨地域流量分布
设置跨地域故障转移
停用ack-hangzhou集群的review。
登录容器服务管理控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在无状态页面设置命名空间为default,单击reviews-v1右侧操作列下的伸缩。
在伸缩页面设置所需容器组数量为0,然后单击确定。
配置DestinationRule。
配置DestinationRule,当1s内无法请求到reviews服务,该reviews服务将被移除1min。
在网格详情页面左侧导航栏,选择 。
在目标规则页面单击reviews右侧操作列下的YAML。
在编辑面板增加以下内容,然后单击确定。
spec: ...... trafficPolicy: connectionPool: http: maxRequestsPerConnection: 1 outlierDetection: baseEjectionTime: 1m consecutive5xxErrors: 1 interval: 1s
maxRequestsPerConnection:最大连接数量。
baseEjectionTime:最小的移除时间长度。
consecutive5xxErrors:连续错误数量。
interval:移除检测的时间间隔。
启用跨地域故障转移。
在网格详情页面左侧导航栏,选择 。
ASM实例版本1.22.6.66以下
在基本信息页面,单击基于地理位置的负载均衡右侧的设置。
在基于地理位置的故障转移对话框设置当策略源是cn-shanghai,源故障转移至cn-hangzhou,当策略源是cn-hangzhou,源故障转移至cn-shanghai,然后单击确认。
ASM实例版本1.22.6.66及以上
在基本信息页面,单击基于地理位置的负载均衡右侧的设置基于地理位置的负载均衡。
单击跨地域规则下的设置地域优先级规则,设置故障地域是
cn-shanghai
,优先转移地域为cn-hangzhou
。单击添加,再设置故障地域是
cn-hangzhou
,优先转移地域cn-shanghai
,然后单击保存配置。
执行以下命令,循环请求10次Bookinfo应用,并对路由到v2版本reviews服务的结果数量进行统计。
for ((i=1;i<=10;i++));do curl http://<ack-hangzhou集群中80端口的入口网关地址>/productpage 2>&1|grep full.stars;done|wc -l
预期输出:
20
可以看到访问10次,返回20(每次路由到v2版本reviews服务会返回两行包含
full stars
的结果),说明10次请求全部路由到了ack-shanghai集群的v2版本reviews服务,跨地域故障转移成功。
设置跨地域流量分布
跨地域流量分布能力仅支持版本≥1.22.6.66的实例。
登录ASM控制台,在左侧导航栏,选择 。
在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择 。
在基本信息页面,单击基于地理位置的负载均衡右侧的设置基于地理位置的负载均衡。
单击设置流量分布规则,设置源为
cn-hangzhou
,目标为cn-shanghai
,流量比例为10%,单击保存配置。说明基于地理位置的负载均衡默认启用的是故障转移模式,您需要先单击页面右上角的关闭功能才可以重新选择并启用流量分布模式。
执行以下命令,循环请求10次Bookinfo应用,验证跨地域流量分布是否成功。
for ((i=1;i<=10;i++));do curl http://<ack-hangzhou集群中80端口的入口网关地址>/productpage 2>&1|grep full.stars;done
预期输出:
<!-- full stars: --> <!-- full stars: -->
可以看到访问10次,输出2行
full stars
,说明10次请求中9次路由到了ack-hangzhou集群的v1版本reviews服务,1次路由到了ack-shanghai集群的v2版本reviews服务,流量按照权重路由到多个集群成功。
FAQ
为什么通过云企业网CEN打通了集群VPC网络,在ASM中加入K8s集群仍然提示失败?
当您的集群处于不同地域,在打通集群VPC网络时,您若未购买跨地域流量包,或者未正确设置跨地域流量,ASM控制平面将无法连接到数据平面集群,导致ASM添加集群失败。
针对以上这个问题,您需要重新在云企业网CEN中设置跨地域流量打通集群VPC网络,具体操作,请参见步骤二:使用CEN实现跨地域VPC网络互通。