华为云UCS
华为云UCS
- 最新动态
- 服务公告
- 产品介绍
- 计费说明
- 快速入门
-
用户指南
- UCS集群
- 容器舰队
- 集群联邦
- 镜像仓库
- 权限管理
-
策略中心
- 策略中心概述
- 策略定义与策略实例的基本概念
- 启用策略中心
- 创建和管理策略实例
- 示例:使用策略中心实现Kubernetes资源合规性治理
-
使用策略定义库
- 策略定义库概述
- k8spspvolumetypes
- k8spspallowedusers
- k8spspselinuxv2
- k8spspseccomp
- k8spspreadonlyrootfilesystem
- k8spspprocmount
- k8spspprivilegedcontainer
- k8spsphostnetworkingports
- k8spsphostnamespace
- k8spsphostfilesystem
- k8spspfsgroup
- k8spspforbiddensysctls
- k8spspflexvolumes
- k8spspcapabilities
- k8spspapparmor
- k8spspallowprivilegeescalationcontainer
- k8srequiredprobes
- k8srequiredlabels
- k8srequiredannotations
- k8sreplicalimits
- noupdateserviceaccount
- k8simagedigests
- k8sexternalips
- k8sdisallowedtags
- k8sdisallowanonymous
- k8srequiredresources
- k8scontainerratios
- k8scontainerrequests
- k8scontainerlimits
- k8sblockwildcardingress
- k8sblocknodeport
- k8sblockloadbalancer
- k8sblockendpointeditdefaultrole
- k8spspautomountserviceaccounttokenpod
- k8sallowedrepos
- 配置管理
- 服务网格
- 流量分发
- 可观测性
- 云原生服务中心
- 容器迁移
- 流水线
- 错误码
- 最佳实践
- API参考
- 常见问题
- 文档下载
- 通用参考
链接复制成功!
通过MCI实现跨集群业务流量分发
应用场景
在分布式集群场景下,为了提供低延迟的服务,企业的应用可能部署在不同区域、不同厂商的云端上,在某个地区集群发生故障时,该地区业务也随之会受到影响。使用MCI,可进行跨地域集群的流量分发,实现跨地域的应用故障迁移。
图1 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容灾的服务公网访问入口,验证应用的高可用容灾能力。
- 将集群注册到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。
父主题: 集群联邦