更新时间:2024-10-18 GMT+08:00
分享

使用南北向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对象

  1. 使用kubectl连接集群联邦,详细操作请参见使用kubectl连接集群联邦
  2. 创建并编辑 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
    表1 关键参数说明

    参数

    是否必填

    参数类型

    描述

    metadata.name

    String

    MCS对象的名称,应与关联Service保持一致。

    etadata.namespace

    String

    MCS对象所在命名空间名称,应与关联Service所在命名空间名称保持一致。不填则默认为default。

    spec.types

    String

    流量方向,实现集群间服务发现能力应配置为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。{service name}请修改为联邦Service的名称。

    说明:
    • 健康检查参数配置示例:

    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。

    {service name}请修改为联邦Service的名称。

    表2 HealthCheck参数说明

    参数

    是否必填

    参数类型

    描述

    protocol

    String

    健康检查使用的协议,支持TCP/HTTP。

    connect_port

    Int

    健康检查使用的端口。支持值为1-65535。

    elay

    Int

    健康检查的延迟时间,以秒为单位,1-50。

    timeout

    Int

    健康检查的超时时间,以秒为单位,1-50。

    path

    String

    健康检查的请求URL,当type为HTTP/HTTPS时生效。

    以"/"开头,默认为"/"。支持使用字母、数字和短划线(-)、正斜线(/)、半角句号(.)、百分号(%)、半角问号(?)、井号(#)和and(&)以及扩展字符集。长度为1-80个字符。

    max_retries

    Int

    最大重试次数,取值范围1-10

  3. 执行如下命令创建MCS对象。

    kubectl apply -f mcs.yaml

  4. 创建完成后,可以执行如下命令操作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的工作是否正常。

相关文档