
# 通过MCI实现跨集群业务流量分发
#### 应用场景
在分布式集群场景下，为了提供低延迟的服务，企业的应用可能部署在不同区域、不同厂商的云端上，在某个地区集群发生故障时，该地区业务也随之会受到影响。使用MCI，可进行跨地域集群的流量分发，实现跨地域的应用故障迁移。
图1MCI实现跨集群流量分发架构图   
![](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后端开关，具体创建步骤请参见[创建独享型负载均衡器](https://support.huaweicloud.com/usermanual-elb/elb_lb_000006.html)。
- 打通ELB的VPC与Kubernetes集群间的网络，确保ELB实例与容器Pod IP网络可达，并保证成员集群间网络网段不冲突。
- 准备联邦内可用的工作负载（Deployment）和服务（Service），若无请参考[无状态负载](https://support.huaweicloud.com/usermanual-ucs/ucs_01_0106.html)和[集群内访问（ClusterIP）](https://support.huaweicloud.com/usermanual-ucs/ucs_01_0271.html)进行创建。
 
#### 通过MCI实现跨地域应用故障迁移
本小节以部署于两个区域的CCE Turbo集群"cce-cluster01"、"cce-cluster02"为例，通过创建绑定至多地域ELB实例的MCI对象，结合华为云提供的DNS域名解析能力，部署支持跨Region容灾的服务公网访问入口，验证应用的高可用容灾能力。
1. 将集群注册到UCS、接入网络并加入容器舰队，具体操作请参见[注册集群](https://support.huaweicloud.com/usermanual-ucs/ucs_01_0002.html)。
2. 为集群所在舰队开通集群联邦，并确保集群已成功接入集群联邦。具体操作请参见[集群联邦](https://support.huaweicloud.com/usermanual-ucs/ucs_01_0199.html)。
3. 创建联邦工作负载，并配置对应的服务。 
   以nginx镜像为例，将在cce-cluster01与cce-cluster-02集群上部署nginx的工作负载，并配置相应的服务。
   ![](https://support.huaweicloud.com/bestpractice-ucs/zh-cn_image_0000002002500481.png "点击放大")
   
   
4. 分别至对应的Region环境创建ELB实例。 
   网络配置中，开启IP类型后端（跨VPC后端）开关，VPC选择cce-cluster01所在的VPC，并新创建弹性公网IP。分别记录ELB实例1、ELB实例2的ID。
   ![](https://support.huaweicloud.com/bestpractice-ucs/zh-cn_image_0000002002583657.png "点击放大")
   ![](https://support.huaweicloud.com/bestpractice-ucs/zh-cn_image_0000002002503353.png "点击放大")
   
   
5. 分别获取租户的两个区域的项目ID1、项目ID2。 
   在华为云console控制台，单击右上角的账户名-我的凭证，查询对应区域的项目ID。
   
   
6. 使用kubectl连接集群联邦，具体操作请参见[使用kubectl连接集群](https://support.huaweicloud.com/usermanual-ucs/ucs_01_0320.html)。
7. 分别创建并编辑对应两个Region的mci.yaml 文件。 
   创建MCI资源，文件内容定义如下所示，详细的参数定义请参见[使用MCI](https://support.huaweicloud.com/usermanual-ucs/ucs_01_0312.html)。
   **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
   ```
   
   
8. 检查ELB监听器后端是否正常挂载后端服务器组、后端实例是否运行正常，健康检查是否正常。 
   ![](https://support.huaweicloud.com/bestpractice-ucs/zh-cn_image_0000002002511861.png "点击放大")
   ![](https://support.huaweicloud.com/bestpractice-ucs/public_sys-resources/caution_3.0-zh-cn.png)
   请提前放开容器的安全组。以CCE Turbo集群为例，请在集群总览页面\>网络信息\>默认容器子网安全组中放开其他地域的ELB实例的网段。
   
   
 
#### 配置DNS访问
本文以华为云的内网DNS为例，您也可自行配置DNS。
1. 创建内网DNS，在ECS上通过公网的方式访问服务，ECS请先绑定EIP或者NAT配置公网出口。 
   - 创建与ECS相同VPC的内网域名，该域名为MCI中指定的域名。
   
   - 将两个ELB实例的公网IP分别添加至集群的记录集。
   
   
   ![](https://support.huaweicloud.com/bestpractice-ucs/zh-cn_image_0000002002510637.png "点击放大")
   
   
2. 在ECS上通过域名curl demo.localdev.me访问对应的服务，查询返回，返回200为正常。
 
#### 跨地域应用故障迁移验证
示例应用分别部署在集群"ccecluster-01"和"ccecluster-02"中，并以公网EIP的方式提供了服务的访问入口。
**故障场景构造**
构造单地域故障的场景，以Region1故障为例，执行以下操作，构造单地域故障：
1. 休眠Region1的cce-cluster01集群，并关机集群下的节点。
2. 解绑Region1的ELB实例的EIP1。
**容灾能力验证**
1. 在DNS的域名解析页面，在记录集中手动删除Region1的ELB实例绑定的ELB IP地址。
2. 检查ELB的实例后端是否显示存在健康检查结果异常的后端服务器。
3. 在ECS上访问对应的服务，检查服务是否访问正常，返回结果是否为200。
 
