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

通过 kubectl 创建 CLB Ingress

最近更新时间2023.12.20 19:15:12

首次发布时间2022.03.10 16:33:40

通过配置路由规则(Ingress)YAML 文件中特定的注解(Annotation)内容,实现更加丰富的七层负载均衡(CLB)能力和更加多样的服务路由规则。

注意

  • ALB Ingress 提供更加丰富的功能和可靠性,为保障您业务的安全和稳定,建议在集群中优先选择 ALB Ingress 实现业务发布。详情请参见 ALB Ingress
  • 注解的内容需要严格区分大小写。

背景信息

当您在容器服务集群中配置 Ingress 时,允许通过配置 YAML 文件中特定的注解,新建或复用七层负载均衡实例。

新建和复用七层负载均衡实例的主要区别如下表所示。

资源对象新建 CLB复用 CLB

CLB

  • 控制器会根据 Annotation 配置,自动创建 CLB、监听器和后端服务器组。
  • 删除 Ingress 时,控制器会删除自动创建的 CLB。
  • 在 Annotation 配置ingress.vke.volcengine.com/loadbalancer-id中指定复用 CLB 实例的 ID。
  • 控制器会根据 Annotation 中的其他配置,为 CLB 创建监听器和后端服务器组。
  • 删除 Ingress 时,控制器会删除为复用 CLB 创建的监听器和后端服务器组,不会删除 CLB 实例。

说明

  • 仅支持复用通过负载均衡控制台创建的 CLB,不支持复用通过容器服务 Ingress 自动创建的 CLB。
  • CLB 在 VPC 内提供负载均衡,复用的 CLB 需要和集群处于同一个 VPC。

监听器

  • 控制器会根据 Annotation 的配置,自动创建监听器和后端服务器组。
  • 删除 Ingess 时,控制器会删除创建的监听器和后端服务器组。
  • 控制器会根据 Annotation 的配置,自动创建监听器和后端服务器组。
  • 控制器无法在指定复用 CLB 上已经存在的端口上创建监听器。

使用限制

  • 请勿擅自在服务端更改通过创建 CLB Ingress 维护的 CLB 实例,或者其监听器、后端服务器组和转发规则,否则将造成 CLB 服务异常,须自行承担责任。
  • 请勿修改监听器和后端服务器组的名称中带有k8s_前缀的内容。
  • 若直接在服务端修改 CLB Ingress 指定或维护的资源配置,可能存在配置被覆盖的风险。
  • 使用负载均衡(Cloud Load Balancer,CLB)产品,会产生云基础资源使用费用。详细信息,请参见 负载均衡产品计费

创建 CLB Ingress

对接已有 CLB 实例

此场景使用的负载均衡(CLB)实例,特指在控制台手动创建的负载均衡实例。详细操作,请参见 创建负载均衡实例

注意

请勿对接集群 APIServer、LoadBalancer 类型的 Service、其他 Ingress 创建的 CLB,否则可能导致已有服务或集群功能异常。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    ingress.vke.volcengine.com/loadbalancer-id: "clb-rrxpqzg37eo0v0x58******"
    # 指定使用的负载均衡 ID
  name: clb-ingress # 自定义路由规则名称
  namespace: default # 指定命名空间
spec:
  ingressClassName: clb # 指定 IngressClass 资源名称
  rules:
  - host: example.com # 需要对外提供访问的域名
    http:
      paths:
      - backend:
          service:
            name: service-demo-a # 需要对接的服务名称
            port:
              number: 80 # 需要对接服务的端口号
        path: /foo # 请求匹配的路径
        pathType: Prefix # 路径类型:Exact(精确匹配)/Prefix(前缀匹配)
      - backend:
          service:
            name: service-demo # 需要对接的服务名称
            port:
              number: 80 # 需要对接服务的端口号
        path: /bar # 需要设定的访问路径信息
        pathType: Prefix # 路径类型:Exact(精确匹配)/Prefix(前缀匹配)

Annotation 说明如下表所示。

Key类型是否必须描述默认值
ingress.vke.volcengine.com/loadbalancer-idString指定已存在的 CLB 实例 ID。

新建 CLB 实例

使用如下 YAML 配置,创建 Ingress 并同时创建新的 CLB 实例。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    ingress.vke.volcengine.com/loadbalancer-name: "clb-demo"
    # 配置负载均衡名称
    ingress.vke.volcengine.com/loadbalancer-spec: "small_1"
    # 配置创建负载均衡的规格。small_1:200Mbps、small_2:500Mbps、medium_1:1000Mbps、meidum_2:2000Mbps、large_1:5000Mbps、large_2:10000Mbps
    ingress.vke.volcengine.com/loadbalancer-subnet-id: "subnet-rrhvmyikek1sv0x58***"
    # 配置负载均衡器实例所属的子网
    ingress.vke.volcengine.com/loadbalancer-address-type: "public" 
    # 配置负载均衡类型。取值: public (公网类型)、 private (私网类型)
    ingress.vke.volcengine.com/loadbalancer-isp-type: "BGP"
    # 配置负载均衡 EIP 线路类型
    ingress.vke.volcengine.com/loadbalancer-bandwidth:  "10" 
    # 配置公网负载均衡实例的 EIP 带宽峰值,取值范围:1~500Mbps
    ingress.vke.volcengine.com/loadbalancer-eip-BandwidthPackageId: "bwp-2d63yyj3ki4u858oz***"
    # 指定 EIP 的共享带宽包
  name: clb-ingress # 路由规则名称
  namespace: default #路由规则所在的命名空间
spec:
  ingressClassName: clb # 指定 IngressClass 资源名称
  rules:
  - host: example.com # 对外提供访问的域名
    http:
      paths:
      - backend:
          service:
            name: service-demo-a # 需要对接的服务名称
            port:
              number: 80 # 需要对接服务的端口号
        path: /foo # 请求匹配的路径
        pathType: Prefix
      - backend:
          service:
            name: service-demo-b # 需要对接的服务名称
            port:
              number: 80 # 需要对接服务的端口号
        path: /bar # 请求匹配的路径
        pathType: Prefix

Annotation 说明如下表所示。

Key类型是否必选描述默认值
ingress.vke.volcengine.com/loadbalancer-nameString新创建的负载均衡器实例名称。如未指定,系统会自动生成。
ingress.vke.volcengine.com/loadbalancer-specString表示负载均衡器实例的规格。取值:small_1、small_2、medium_1、meidum_2、large_1、large_2 。详情请参见 产品类型与规格
ingress.vke.volcengine.com/loadbalancer-subnet-idString指定创建的负载均衡器实例所属的子网。

ingress.vke.volcengine.com/loadbalancer-address-type

String

指定负载均衡实例的类型。取值:

  • public:公网类型的负载均衡实例。
  • private:私网类型的负载均衡实例。

public

ingress.vke.volcengine.com/loadbalancer-isp-type

String

公网负载均衡实例的 EIP 线路类型。包括:BGP、SingleLine_BGP、Static_BGP、Fusion_BGP、ChinaMobile、ChinaTelecom、ChinaUnicom、ChinaMobile_Value、ChinaUnicom_Value 和 ChinaTelecom_Value。详细参数解释,请参见 EIP 产品文档

注意

除 BGP 外,其他线路类型均为 EIP 产品的邀测功能,如需使用,请 提交工单 或联系客户经理申请。

BGP

ingress.vke.volcengine.com/loadbalancer-bandwidth

Integer

公网负载均衡实例的 EIP 带宽峰值。

  • 取值:1~500
  • 单位:Mbps

10

ingress.vke.volcengine.com/loadbalancer-ip-versionString负载均衡实例的 IP 版本。取值:ipv4。ipv4

ingress.vke.volcengine.com/loadbalancer-scheduler

String

负载均衡器使用的调度算法。取值:

  • wrr:权重值越高的后端服务器,被轮询到的次数(概率)越高。
  • wlc:将请求分发给 当前连接/权重 比值最小的后端服务器。
  • sh:基于源 IP 地址的一致性哈希,相同的源地址会调度到相同的后端服务器。

wrr

ingress.vke.volcengine.com/loadbalancer-protocol

String

负载均衡实例的监听协议。取值:

  • http:负载均衡实例的监听协议为 HTTP 协议。
  • https:负载均衡实例的监听协议为 HTTPS 协议。

http

ingress.vke.volcengine.com/loadbalancer-port

Integer

负载均衡器的监听端口,取值范围为 1~65535。

  • https 协议:443
  • http 协议:80

ingress.vke.volcengine.com/loadbalancer-eip-BandwidthPackageId

String

指定 EIP 的共享带宽包。

说明

共享带宽包是一种支持复用和共享带宽的云资源。将单个地域内多个公网 IP 或 IPv6 公网带宽添加到一个共享带宽包实例中,共享一条带宽,可以帮助您降低公网带宽的使用成本。详情请参见 什么是共享带宽包

结果验证

  1. 执行以下命令,查看已创建的路由规则。
kubectl get ingress

预期结果如下:

NAME            CLASS   HOSTS         ADDRESS           PORTS   AGE
clb-ingress     clb     example.com   180.xxx.xxx.xxx   80      40s

说明

ADDRESS是与该路由规则对接的 CLB 公网 IP 地址。您可以在 均衡负载 控制台中,使用该 IP 地址查找对应的 CLB 实例。

  1. 执行以下命令,查看指定路由规则的详细信息。
kubectl describe ingress clb-ingress

预期结果如下。其中,Annotation 中展示了 CLB 的相关信息,包括:CLB ID、监听器、健康检查等。详细解释,请参见 使用 Annotation 配置 CLB Ingress

Name:             clb-ingress
Labels:           <none>
Namespace:        default
Address:          180.xxx.xxx.xxx
Default backend:  default-http-backend:80
Rules:
  Host         Path  Backends
  ----         ----  --------
  example.com  
               /   service:80 (192.168.112.4:80,192.168.128.9:80,192.168.48.3:80)
Annotations:   ingress.vke.volcengine.com/loadbalancer-healthcheck-enabled: true
               ingress.vke.volcengine.com/loadbalancer-healthcheck-httpcode: http_2xx,http_3xx
               ingress.vke.volcengine.com/loadbalancer-healthcheck-interval: 3
               ingress.vke.volcengine.com/loadbalancer-healthcheck-method: GET
               ingress.vke.volcengine.com/loadbalancer-healthcheck-path: /
               ingress.vke.volcengine.com/loadbalancer-healthcheck-timeout: 3
               ingress.vke.volcengine.com/loadbalancer-healthy-threshold: 3
               ingress.vke.volcengine.com/loadbalancer-id: clb-5g8puqwem0ao73i******
               ingress.vke.volcengine.com/loadbalancer-port: 80
               ingress.vke.volcengine.com/loadbalancer-protocol: http
               ingress.vke.volcengine.com/loadbalancer-scheduler: wrr
               ingress.vke.volcengine.com/loadbalancer-unhealthy-threshold: 3
Events:
  Type     Reason              Age                From     Message
  ----     ------              ----               ----     -------
  Normal   ReconcilingIngress  33s (x3 over 55s)  ingress  Reconciling Ingress
  Normal   ReconciledIngress   31s (x2 over 33s)  ingress  Reconciled Ingress