使用南北向MCS
约束限制
- 当前MCS仅支持版本为1.21及以上的CCE Turbo集群、网络模型为underlay的其他Kubernetes集群创建。
- 请提前做好网络规划,保证成员集群间容器网络不冲突,确保ELB实例与容器Pod IP网络可达。若MCS的ELB实例与集群处于不同VPC内,请提前打通VPC间的网络。
准备工作
- 如您没有可用的ELB实例,需要先创建ELB实例,具体请参考创建独享型负载均衡器。该ELB实例需要满足以下条件:
- ELB为独享型。
- ELB必须支持网络型(TCP/UDP)。
- ELB网络类型必须支持私网(有私有IP地址)。
- 如果ELB与成员集群的网络不在同一VPC内,ELB需要支持开启跨VPC访问的开关。
- MCS为跨集群后端工作负载提供统一入口和四层网络访问,因此需要在联邦中提前部署可用的工作负载(Deployment)和服务(Service)。若您无可用工作负载和服务,请参考无状态负载和集群内访问(ClusterIP)创建。
- 设置集群为underlay网络,支持underlay网络的集群类型请参见设置集群网络。
创建类别为负载均衡的MCS对象
- 使用kubectl连接集群联邦,详细操作请参见使用kubectl连接集群联邦。
- 创建并编辑 mcs.yaml 文件,文件内容定义如下所示,参数定义请参见表1。
示例YAML定义的MCS对象关联了名为nginx的Service,将nginx的Service注册到华为云ELB的监听器上。
vi mcs.yaml
apiVersion: networking.karmada.io/v1alpha1 kind: MultiClusterService metadata: name: nginx namespace: default annotations: karmada.io/elb.id: 2050857a-45ff-4312-8fdb-4a4e2052e7dc karmada.io/elb.projectid: c6629a1623df4596a4e05bb6f0a2e166 karmada.io/elb.port: "802" karmada.io/elb.health-check-flag: "on" spec: ports: - port: 80 types: - LoadBalancer consumerClusters: - name: clusterA
表1 关键参数说明 参数
是否必填
参数类型
描述
metadata.name
是
String
MCS对象的名称,应与关联Service保持一致。
metadata.namespace
否
String
MCS对象所在命名空间名称,应与关联Service所在命名空间名称保持一致。不填则默认为default。
spec.types
是
String 数组
流量方向。
实现集群间服务发现能力应配置为CrossCluster;
将服务通过ELB对外暴露应配置为LoadBalancer。
spec.ports.port
否
Integer
关联的Service需要注册到ELB监听器上的服务端口。
spec.consumerClusters.name
否
String
Service的访问集群名称,应配置为期望通过MCS实现跨集群访问Service的集群名称。不填则默认设置为所有集群联邦内集群可访问该Service。
karmada.io/elb.id
是
String
MCS关联的elb的id,不允许为空。
取值范围:1-32个字符。
karmada.io/elb.projectid
是
String
MCS关联的elb所属的项目ID,获取方法请参见获取项目ID。
取值范围:1-32个字符。
karmada.io/elb.port
否
String
MCS关联的elb的端口,不填时默认为80。
取值范围:1-65535。
karmada.io/elb.health-check-flag
否
String
是否启用健康检查,可选值为:
- on:开启
- off:不开启
不填写时默认为off。
karmada.io/elb.health-check-option
否
HealthCheck Object
健康检查参数,详情请参见HealthCheck。
说明:- 健康检查参数配置示例:
karmada.io/elb.health-check-option: '{"protocol":"TCP","delay":"5","connect_port":"80","timeout":"1","max_retries":"1","path":"/wd"}'
- 在annotation开启健康检查配置的情况下,Service名称的长度不应超过39个字符。
karmada.io/elb.lb-algorithm
否
String
转发算法:
- ROUND_ROBIN:加权轮询算法。
- LEAST_CONNECTIONS:加权最少连接算法。
- SOURCE_IP:源IP算法。
不填写时默认为ROUND_ROBIN。
表2 HealthCheck参数说明 参数
是否必填
参数类型
描述
protocol
否
String
健康检查使用的协议。支持TCP/HTTP,默认值是TCP。
connect_port
否
Int
健康检查使用的端口。取值范围[1,65535],为可选参数。
说明:默认使用后端服务器默认业务端口进行健康检查。指定特定端口后,使用指定的端口进行健康检查。
delay
否
Int
健康检查的延迟时间,以秒为单位,1-50,默认值是5秒。
timeout
否
Int
健康检查的超时时间,以秒为单位,1-50,默认值是10秒。
path
否
String
健康检查的请求URL,当protocol为HTTP时生效。
以"/"开头,默认为"/"。支持使用字母、数字和短划线(-)、正斜线(/)、半角句号(.)、百分号(%)、半角问号(?)、井号(#)和and(&)以及扩展字符集。长度为1-80个字符。
max_retries
否
Int
最大重试次数,取值范围1-10,默认值是3次。
- 执行如下命令创建MCS对象。
kubectl apply -f mcs.yaml
- 创建完成后,可以执行如下命令操作MCS对象。其中nginx为MCS对象的名称。
- 获取MCS对象:kubectl get mcs nginx
- 更新MCS对象:kubectl edit mcs nginx
- 删除MCS对象:kubectl delete mcs nginx
通过MCS访问服务
MCS对象创建成功后,绑定的ELB侧将自动创建对应的监听器和健康检查策略,您可以通过 http://IP:port 访问后端工作负载,其中IP:port为MCS关联ELB的IP和端口。
如果访问存在问题,请执行 kubectl describe mcs nginx 查询事件来检查MCS的工作是否正常。