通过MCI实现跨集群业务流量分发
应用场景
在分布式集群场景下,为了提供低延迟的服务,企业的应用可能部署在不同区域、不同厂商的云端上,在某个地区集群发生故障时,该地区业务也随之会受到影响。使用MCI,可进行跨地域集群的流量分发,实现跨地域的应用故障迁移。
![](https://support.huaweicloud.com/bestpractice-ucs/zh-cn_image_0000001966071624.png)
准备工作
- 准备两个部署于不同Region的CCE Turbo 1.21及以上版本集群,或者网络模型为underlay的Kubernetes集群。
- 规划应用部署的地域,并购买相应地域的ELB实例服务,为保证跨Region容灾能力,请保证两个ELB实例,跨Region部署。该ELB实例需要为独享型、支持应用型(HTTP/HTTPS)、支持私网(有私有IP地址),并且开启了跨VPC后端开关,具体创建步骤请参见创建独享型负载均衡器。
- 打通ELB的VPC与Kubernetes集群间的网络,确保ELB实例与容器Pod IP网络可达,并保证成员集群间网络网段不冲突。
- 准备联邦内可用的工作负载(Deployment)和服务(Service),若无请参考无状态负载和集群内访问(ClusterIP)进行创建。
通过MCI实现跨地域应用故障迁移
本小节以部署于两个区域的CCE Turbo集群“cce-cluster01”、“cce-cluster02”为例,通过创建绑定至多地域ELB实例的MCI对象,结合华为云提供的DNS域名解析能力,部署支持跨Region容灾的服务公网访问入口,验证应用的高可用容灾能力。
- 将集群注册到UCS、接入网络并加入容器舰队,具体操作请参见注册集群。
- 为集群所在舰队开通集群联邦,并确保集群已成功接入集群联邦。具体操作请参见集群联邦。
- 创建联邦工作负载,并配置对应的服务。
以nginx镜像为例,将在cce-cluster01与cce-cluster-02集群上部署nginx的工作负载,并配置相应的服务。
- 分别至对应的Region环境创建ELB实例。
网络配置中,开启IP类型后端(跨VPC后端)开关,VPC选择cce-cluster01所在的VPC,并新创建弹性公网IP。分别记录ELB实例1、ELB实例2的ID。
- 分别获取租户的两个区域的项目ID1、项目ID2。
在华为云console控制台,单击右上角的账户名-我的凭证,查询对应区域的项目ID。
- 使用kubectl连接集群联邦,具体操作请参见使用kubectl连接集群。
- 分别创建并编辑对应两个Region的mci.yaml 文件。
创建MCI资源,文件内容定义如下所示,详细的参数定义请参见使用MCI。
kubectl apply -f mci.yaml
apiVersion: networking.karmada.io/v1alpha1 kind: MultiClusterIngress metadata: name: nginx-ingress-region1 namespace: default annotations: karmada.io/elb.id: xxxxxxx # Region1的ELB实例ID karmada.io/elb.port: "80" # Region1的ELB实例监听器端口 karmada.io/elb.projectid: xxxxxxx # Region1的租户项目ID karmada.io/elb.health-check-flag: "on" #开启健康检查,实现故障切流 spec: ingressClassName: public-elb rules: - host: demo.localdev.me http: paths: - backend: service: name: nginx port: number: 8080 path: / pathType: Prefix --- apiVersion: networking.karmada.io/v1alpha1 kind: MultiClusterIngress metadata: name: nginx-ingress-region2 namespace: default annotations: karmada.io/elb.id: xxxxxxx # Region2的ELB实例ID karmada.io/elb.port: "801" # Region2的ELB实例监听器端口 karmada.io/elb.projectid: xxxxxxx # Region2的租户项目ID karmada.io/elb.health-check-flag: "on" #开启健康检查,实现故障切流 spec: ingressClassName: public-elb rules: - host: demo.localdev.me http: paths: - backend: service: name: nginx port: number: 8080 path: / pathType: Prefix
- 检查ELB监听器后端是否正常挂载后端服务器组、后端实例是否运行正常,健康检查是否正常。
请提前放开容器的安全组。以CCE Turbo集群为例,请在集群总览页面>网络信息>默认容器子网安全组中放开其他地域的ELB实例的网段。
配置DNS访问
本文以华为云的内网DNS为例,您也可自行配置DNS。
- 创建内网DNS,在ECS上通过公网的方式访问服务,ECS请先绑定EIP或者NAT配置公网出口。
- 创建与ECS相同VPC的内网域名,该域名为MCI中指定的域名。
- 将两个ELB实例的公网IP分别添加至集群的记录集。
- 在ECS上通过域名curl demo.localdev.me访问对应的服务,查询返回,返回200为正常。
跨地域应用故障迁移验证
示例应用分别部署在集群“ccecluster-01”和“ccecluster-02”中,并以公网EIP的方式提供了服务的访问入口。
故障场景构造
构造单地域故障的场景,以Region1故障为例,执行以下操作,构造单地域故障:
- 休眠Region1的cce-cluster01集群,并关机集群下的节点。
- 解绑Region1的ELB实例的EIP1。
容灾能力验证
- 在DNS的域名解析页面,在记录集中手动删除Region1的ELB实例绑定的ELB IP地址。
- 检查ELB的实例后端是否显示存在健康检查结果异常的后端服务器。
- 在ECS上访问对应的服务,检查服务是否访问正常,返回结果是否为200。