文档首页/ 华为云UCS/ 最佳实践/ 集群联邦/ 通过MCI实现跨集群业务流量分发
更新时间:2024-11-01 GMT+08:00

通过MCI实现跨集群业务流量分发

应用场景

在分布式集群场景下,为了提供低延迟的服务,企业的应用可能部署在不同区域、不同厂商的云端上,在某个地区集群发生故障时,该地区业务也随之会受到影响。使用MCI,可进行跨地域集群的流量分发,实现跨地域的应用故障迁移。

准备工作

  • 准备两个部署于不同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容灾的服务公网访问入口,验证应用的高可用容灾能力。

  1. 将集群注册到UCS、接入网络并加入容器舰队,具体操作请参见注册集群
  2. 为集群所在舰队开通集群联邦,并确保集群已成功接入集群联邦。具体操作请参见集群联邦
  3. 创建联邦工作负载,并配置对应的服务。

    以nginx镜像为例,将在cce-cluster01与cce-cluster-02集群上部署nginx的工作负载,并配置相应的服务。

  4. 分别至对应的Region环境创建ELB实例。

    网络配置中,开启IP类型后端(跨VPC后端)开关,VPC选择cce-cluster01所在的VPC,并新创建弹性公网IP。分别记录ELB实例1、ELB实例2的ID。

  5. 分别获取租户的两个区域的项目ID1、项目ID2。

    在华为云console控制台,单击右上角的账户名-我的凭证,查询对应区域的项目ID。

  6. 使用kubectl连接集群联邦,具体操作请参见使用kubectl连接集群
  7. 分别创建并编辑对应两个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

  8. 检查ELB监听器后端是否正常挂载后端服务器组、后端实例是否运行正常,健康检查是否正常。

    请提前放开容器的安全组。以CCE Turbo集群为例,请在集群总览页面>网络信息>默认容器子网安全组中放开其他地域的ELB实例的网段。

配置DNS访问

本文以华为云的内网DNS为例,您也可自行配置DNS。

  1. 创建内网DNS,在ECS上通过公网的方式访问服务,ECS请先绑定EIP或者NAT配置公网出口。

    • 创建与ECS相同VPC的内网域名,该域名为MCI中指定的域名。
    • 将两个ELB实例的公网IP分别添加至集群的记录集。

  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。