You need to enable JavaScript to run this app.
导航

负载均衡 (LoadBalancer)

最近更新时间2023.11.09 11:33:42

首次发布时间2022.03.04 23:10:38

负载均衡(LoadBalancer)一般用于将集群中的服务(Service)暴露到 VPC 内或公网。
alt

使用限制

  • 若需要将 LoadBalancer 类型 Service 修改为其他类型,建议通过 编辑 Yaml 方式进行操作,通过控制台更新配置会导致 CLB 资源残留。
  • 请勿擅自在服务端更改通过创建 LoadBalancer 类型 Service 维护的 CLB 实例,或其监听器和后端服务器组,否则将造成 CLB 服务异常,须自行承担责任。
  • 请勿修改监听器和后端服务器组的名称中带有k8s_前缀的内容。
  • 若直接在服务端修改 LoadBalancer 类型的 Service 指定或维护的资源配置,可能存在配置被覆盖的风险。
  • 一般情况下(不包含 VPC-CNI 网络模型场景),负载均衡(LoadBalancer)类型的 Service 其实是 NodePort 类型的扩展,通过 LoadBalancer 访问 Service,Service 再将请求转发到节点的 NodePort。实现了负载均衡,提供了更高的可靠性保障。
  • VPC-CNI 网络模型场景下,支持直通 Pod 模式,把 Pod 对应的辅助网卡 ENI 直接关联到 CLB 的后端。

    说明

    直通 Pod 模式场景,负载均衡器允许的后端服务器数有限,需自行规划和保证。详细限制,请参见 CLB 约束限制

前提条件

已创建无状态或有状态工作负载。详细操作,请参见 创建无状态负载创建有状态负载

通过控制台使用

  1. 登录 容器服务控制台
  2. 单击左侧导航栏中的 集群
  3. 在集群列表页面,单击需要配置的目标集群。
  4. 在集群管理页面的左侧导航栏中,选择 服务与路由 > 服务,单击 创建服务,配置服务。
    • 配置服务的基本信息。
      配置项说明
      名称根据系统提示,配置服务的名称。在同一个命名空间下,名称必须唯一。
      命名空间选择服务所属的命名空间。建议选择您自定义的命名空间,或系统默认创建的 default 命名空间。命名空间相关介绍,请参见 命名空间概述
      标签单击 添加标签 图标,配置服务的标签。标签能够为服务定义不同的属性,方便批量筛选等需求。
      注解单击 添加注解,为服务添加注解并配置键值对。也可通过配置路由规则 YAML 文件中特定的注解内容,以实现更加丰富的四层负载均衡能力。详细说明,请参见 通过 Annotation 配置四层负载均衡
    • 配置服务的访问规则。
      alt
      配置项说明
      访问类型配置服务的访问类型,本例中选择:负载均衡(LoadBalancer)

      通信协议

      邀测·申请试用】针对 IPv4/IPv6 双栈集群,提供按需配置服务通信协议能力,兼容 IPv6 地址访问服务的业务场景。包括以下选项:

      • IPv4:表示仅支持 IPv4 地址访问服务。

      • IPv4&IPv6:同时支持通过 IPv4 和 IPv6 访问服务,默认使用 IPv4。

      • IPv6&IPv4:同时支持通过 IPv6 和 IPv4 访问服务,默认使用 IPv6。

      说明

      IPv4/IPv6 双栈集群搭建方法参见:通过 VKE 搭建 IPv4/IPv6 双栈集群

      直通 Pod 模式仅 VPC-CNI 容器网络模型集群中显示该参数。默认不开启,开启后直接关联 Pod 作为负载均衡器的后端。但负载均衡器允许的后端服务器数有限,需自行规划和保证。详细限制,请参见 CLB 约束限制

      负载均衡器

      配置服务的负载均衡器,按需选择或自动创建一个负载均衡器。支持 公网访问私网访问 两种访问模式。

      • 使用已有:仅支持已有的且未被容器服务使用的 按量计费包年包月 类型 CLB 实例。使用已有 CLB 实例时不覆盖该实例已有的监听器规则。

        非特殊情况建议选择全新创建的 CLB 实例。

      • 自动创建:自动创建新的 CLB 实例。您需配置以下参数,详细参数说明,请参见 创建负载均衡实例

        注意

        • 请勿将自动创建的 CLB 实例使用到其他 Ingress 或者 Service 资源中,避免资源残留。
        • 自动创建的 CLB 实例在服务删除时会被同步删除,请勿手动修改该 CLB 实例的监听器。
        • 当前仅支持创建 按量计费 类型的 CLB 实例。
        • 通过容器服务创建的 CLB,支持多可用区能力。若当前地域的负载均衡器支持跨可用区容灾,将默认创建主备可用区负载均衡器实例,当主可用区故障时,访问流量切换至备可用区,从而保障业务正常运行。
        • 名称:根据系统提示的命名规则,自定义负载均衡器的名称。
        • 子网:为负载均衡器实例提供私网部署环境,分配私网 IP 地址。

          负载均衡器实例创建成功后,不支持修改私网 IP 地址。

        • 线路类型:提供公网服务的线路类型,不同类型的线路在性能和计费标准上存在差异,默认仅支持 BGP(多线)。

          私网访问 无需配置该参数。

        • 计费方式:负载均衡器的计费方式,当前支持如下两种:
          • 按量计费-按带宽上限:指定带宽上限后,将按照使用时长计费,与实际流量无关。
          • 按量计费-按实际流量:指定带宽上限后,将按照实际使用的出公网流量计费,与使用时长无关。

          私网访问 无需配置该参数。

        • 带宽上限:公网 IP 的带宽上限,单位为 Mbps。实例创建后,您可以随时按需调整公网带宽上限。

          私网访问 无需配置该参数。

        • IP 版本:IP 地址版本类型。当前仅支持 IPv4
        • 实例规格:CLB 实例的规格。您可以根据不同的业务场景对性能的要求,选择适合的规格。规格说明,请参见 产品类型与规格

      监听器

      监听器负责监听负载均衡器上的请求,并分发流量。您需要配置监听器的调度算法和健康检查:

      • 调度算法:指定监听器转发请求时需要遵循的规则。
        • 加权轮询(WRR):基于权重值进行流量的分发,权重值越高的后端服务器,被轮询到的次数(概率)越高。
        • 加权最小连接数(WLC):优先将流量分发给当前连接数与权重比值最小的后端。
        • 源地址哈希(SH):基于源 IP 地址的一致性哈希,相同源地址的请求会调度到相同的后端服务器。
      • 健康检查:按需选择是否启用健康检查。若启用健康检查,需要配置以下参数:
        • 响应超时:等待健康检查响应的时间。如果后端服务器在指定的时间内没有正确响应,则判定为健康检查异常。
        • 检测间隔:执行健康检查的时间间隔。默认间隔为 2 秒,表示每 2 秒对后端服务器进行一次健康检查。

          注意

          检测间隔时间需大于响应超时时间。

        • 健康阈值:判断后端服务器正常的健康检查次数。默认为 3 次,表示连续执行 3 次健康检查,结果均为“正常”的后端服务器则判定为健康检查正常。
        • 不健康阈值:判断后端服务器异常的健康检查次数。默认为 3 次,表示连续执行 3 次健康检查,结果均为“异常”的后端服务器则判定为健康检查异常。
      端口映射配置服务端口与容器端口的映射关系:
      • 名称:配置端口映射的名称。
      • 服务端口:配置 Service 对外提供服务的端口,同一种协议的服务端口不允许重复。
      • 协议:在下拉菜单中选择协议,支持 TCP 协议和 UDP 协议。
      • 容器端口:配置容器的端口,该端口为工作负载对外提供服务的端口号或端口名称。例如:Nginx 开放的默认端口号为 80。

      标签选择器

      Service 通过标签选择器与后端容器组实例(Pod)绑定:

      • 添加标签:输入添加工作负载的标签,关联 Service 到指定工作负载。您可以在集群管理页面左侧导航栏单击 工作负载,找到目标工作负载,获取工作负载标签。
      • 关联工作负载:直接选择工作负载,关联到 Service。当前仅支持关联 无状态负载(Deployment)、有状态负载(Statefulset)。

      注意

      LoadBlancer 类型 Service 关联弹性容器实例方式部署的工作负载时,仅支持使用 直通 Pod 模式,系统默认开启 直通 Pod 模式 开关,且不允许关闭。

      外部流量策略

      Service 转发外部流量的策略:

      • Cluster:流量可以均衡转发到工作负载对应的所有 Pod。
      • Local:流量只能转发到本节点的 Pod,可能存在流量不均衡转发问题,但可以保留客户端源 IP。

      会话保持

      默认不配置。您可根据实际需求,勾选 配置超时时间,启用会话保持功能,并配置会话保持的持续时间。启用后 Service 将来自同一个 IP 地址的访问请求转发到同一台后端服务器上。

      建议设置超时时间数值大于 120 秒。

      说明

      LoadBlancer 类型 Service 的会话保持,建议与 CLB 监听器的会话保持时间一致。两种会话保持相关说明,请参见 FAQ

  5. 单击 确定,完成配置。

通过 kubectl 命令行使用

说明

通过 kubectl 命令行配置 LoadBalancer 访问类型的 Service 前请确保:

  • 已安装 kubectl 工具到本地。具体操作说明,请参见 安装和设置 kubectl
  • 已通过 Kubectl 连接目标集群。具体操作说明,请参见 连接集群
  1. 创建工作负载的 YAML 文件。示例文件service-demo.yaml代码如下:
    apiVersion: v1
    kind: Service
    metadata:
      name: service-demo # 服务的名称。
    spec:
      selector:
        app: nginx # 通过标签选择器将服务与后段容器组(Pod)绑定。
      ipFamilyPolicy: PreferDualStack  # 通信协议类型。SingleStack 表示单栈,PreferDualStack 表示双栈。
      ipFamilies: # 具体使用的通信协议。单栈场景支持 IPv4;双栈场景支持 IPv4&IPv6、IPv6&IPv4。
      - IPv6
      - IPv4
      ports:
      - name: rule # 端口映射规则名称。
        protocol: TCP  # 服务协议,支持 TCP 或 UDP。
        port: 80 # 服务端口。
        targetPort: 80 # 容器端口,即工作负载对外提供服务的端口号或端口名称,例如:Nginx 开放的默认端口号为 80。
      type: LoadBalancer # 服务的类型,包括:Nodeport、ClusterIP 和 LoadBalancer。
    
  2. 执行以下命令,创建服务。
    kubectl apply -f service-demo.yaml