最近更新时间:2023.11.08 19:44:05
首次发布时间:2022.02.08 17:53:49
通过配置服务(Service)YAML 文件中特定的注解(Annotation)内容,实现更丰富的四层负载均衡(CLB)能力。
当您在容器服务集群中配置 Service 时,允许通过配置 YAML 文件中特定的注解,新建或复用四层负载均衡实例。
新建和复用四层负载均衡实例的主要区别如下表所示。
资源对象 | 新建 CLB | 复用 CLB |
---|---|---|
CLB |
|
说明
|
监听器 |
|
|
LoadBalancer 类型的 Service 会在如下场景触发调谐:
因此,需要注意以下事项:
暂不支持通过 Annotation 修改 CLB 实例的规格和类型。
注解的内容需要严格区分大小写。
注意
service.beta.kubernetes.io/volcengine-loadbalancer-acl-status
,为负载均衡服务关联的 CLB 实例监听器配置了访问控制策略,则 VKE 侧的配置,会覆盖负载均衡控制台上的配置(只要触发 VKE 侧的配置,就会覆盖 CLB 侧的配置),请谨慎操作。通过新建的负载均衡器,创建负载均衡服务。YAML 配置示例如下所示,示例中的 Annotation 详细说明,请参见本文下方 常用 Annotation 集合。
apiVersion: v1 kind: Service metadata: annotations: service.beta.kubernetes.io/volcengine-loadbalancer-name: "test-svc" #必填,要创建的负载均衡实例名称。 service.beta.kubernetes.io/volcengine-loadbalancer-subnet-id: "subnet-mizw4xqzpssg5smt1b******" #必填,[CLB 实例配置]负载均衡实例所属的子网 ID。 service.beta.kubernetes.io/volcengine-loadbalancer-address-type: "PUBLIC" #非必填,[CLB 实例配置]负载均衡实例的网络类型。不设置时,默认网络类型为 PUBLIC。 service.beta.kubernetes.io/volcengine-loadbalancer-isp-type: "BGP" #address-type 为 PUBLIC 时必填,[CLB 实例配置]负载均衡实例的线路类型。 service.beta.kubernetes.io/volcengine-loadbalancer-eip-billing-type: "2" #address-type 为 PUBLIC 时必填,[CLB 实例配置]公网 IP(EIP)计费类型。 service.beta.kubernetes.io/volcengine-loadbalancer-bandwidth: "25" #address-type 为 PUBLIC 时必填,[CLB 实例配置]公网类型负载均衡实例需要指定公网 IP(EIP)带宽峰值。 service.beta.kubernetes.io/volcengine-loadbalancer-ip-version: "ipv4" #非必填,[CLB 实例配置]负载均衡实例的 IP 地址类型。CLB 目前仅支持 IPv4。 service.beta.kubernetes.io/volcengine-loadbalancer-spec: "small_1" #必填,[CLB 实例配置]负载均衡实例的规格。 service.beta.kubernetes.io/volcengine-loadbalancer-pass-through: "false" #非必填,[监听器配置]是否开启负载均衡器直通 Pod 模式。 service.beta.kubernetes.io/volcengine-loadbalancer-scheduler: "wrr" #非必填,[监听器配置]监听器的调度算法。 service.beta.kubernetes.io/volcengine-loadbalancer-acl-status: "on" #非必填,[监听器配置]是否开启监听器的访问控制。 service.beta.kubernetes.io/volcengine-loadbalancer-acl-type: "white" #acl-status 为 on 时必填,[监听器配置]开启访问控制的方式(白名单、黑名单)。 service.beta.kubernetes.io/volcengine-loadbalancer-acl-id: "acl-3cj44nv0jhhxc6c6rrtet****,acl-2febxt4pu0zy85oxruw0t****" #acl-status 为 on 时必填,[监听器配置]监听器绑定的访问控制策略组 ID。 service.beta.kubernetes.io/volcengine-loadbalancer-health-check-flag: "on" #非必填,[监听器配置]是否开启健康检查。 service.beta.kubernetes.io/volcengine-loadbalancer-health-check-connect-timeout: "2" #health-check-flag 为 on 时必填,[监听器配置]等待健康检查的响应时间。 service.beta.kubernetes.io/volcengine-loadbalancer-health-check-interval: "2" #health-check-flag 为 on 时必填,[监听器配置]健康检查的时间间隔。 service.beta.kubernetes.io/volcengine-loadbalancer-healthy-threshold: "3" #health-check-flag 为 on 时必填,[监听器配置]后端服务器正常的健康检查次数。 service.beta.kubernetes.io/volcengine-loadbalancer-unhealthy-threshold: "3" #health-check-flag 为 on 时必填,[监听器配置]后端服务器异常的健康检查次数。 name: test-service #服务的名称。 namespace: default #服务所属的命名空间。 spec: externalTrafficPolicy: Cluster ports: - name: test #端口映射策略命名。 port: 80 #服务端口。 protocol: TCP #端口通信协议,支持 TCP/UDP。 targetPort: 80 #容器端口。 type: LoadBalancer #服务的类型。
使用已有的负载均衡器,创建负载均衡服务。YAML 配置示例如下所示,示例中的 Annotation 详细说明,请参见本文下方 常用 Annotation 集合。
apiVersion: v1 kind: Service metadata: annotations: service.beta.kubernetes.io/volcengine-loadbalancer-id: "clb-mim02n8g5kw05smt1b******" #必填,[CLB 实例配置]已有负载均衡实例的 ID。 service.beta.kubernetes.io/volcengine-loadbalancer-pass-through: "false" #非必填,[监听器配置]是否开启负载均衡器直通 Pod 模式。 service.beta.kubernetes.io/volcengine-loadbalancer-scheduler: "wrr" #非必填,[监听器配置]监听器的调度算法。 service.beta.kubernetes.io/volcengine-loadbalancer-acl-status: "on" #非必填,[监听器配置]是否开启监听器的访问控制。 service.beta.kubernetes.io/volcengine-loadbalancer-acl-type: "white" #acl-status 为 on 时必填,[监听器配置]开启访问控制的方式(白名单、黑名单)。 service.beta.kubernetes.io/volcengine-loadbalancer-acl-id: "acl-3cj44nv0jhhxc6c6rrtet****,acl-2febxt4pu0zy85oxruw0t****" #acl-status 为 on 时必填,[监听器配置]监听器绑定的访问控制策略组 ID。 service.beta.kubernetes.io/volcengine-loadbalancer-health-check-flag: "on" #非必填,[监听器配置]是否开启健康检查。 service.beta.kubernetes.io/volcengine-loadbalancer-health-check-connect-timeout: "2" #health-check-flag 为 on 时必填,[监听器配置]等待健康检查的响应时间。 service.beta.kubernetes.io/volcengine-loadbalancer-health-check-interval: "2" #health-check-flag 为 on 时必填,[监听器配置]健康检查的时间间隔。 service.beta.kubernetes.io/volcengine-loadbalancer-healthy-threshold: "3" #health-check-flag 为 on 时必填,[监听器配置]后端服务器正常的健康检查次数。 service.beta.kubernetes.io/volcengine-loadbalancer-unhealthy-threshold: "3" #health-check-flag 为 on 时必填,[监听器配置]后端服务器异常的健康检查次数。 name: test-service #服务的名称。 namespace: default #服务所属的命名空间。 spec: externalTrafficPolicy: Cluster ports: - name: test #端口映射策略命名。 port: 80 #服务端口。 protocol: TCP #端口通信协议 TCP/UDP targetPort: 80 #容器端口。 type: LoadBalancer #服务的类型。
创建一个新的负载均衡服务并关联以弹性容器实例(VCI)方式部署的工作负载。YAML 配置示例如下所示,示例中的 Annotation 详细说明,请参见本文下方 常用 Annotation 集合。
apiVersion: v1 kind: Service metadata: annotations: service.beta.kubernetes.io/volcengine-loadbalancer-name: "test-svc" #必填,要创建的负载均衡实例名称。 service.beta.kubernetes.io/volcengine-loadbalancer-subnet-id: "subnet-mizw4xqzpssg5smt1b******" #必填,[CLB 实例配置]负载均衡实例所属的子网 ID。 service.beta.kubernetes.io/volcengine-loadbalancer-address-type: "PUBLIC" #非必填,[CLB 实例配置]负载均衡实例的网络类型。不设置时,默认网络类型为 PUBLIC。 service.beta.kubernetes.io/volcengine-loadbalancer-isp-type: "BGP" #address-type 为 PUBLIC 时必填,[CLB 实例配置]负载均衡实例的线路类型。 service.beta.kubernetes.io/volcengine-loadbalancer-eip-billing-type: "2" #address-type 为 PUBLIC 时必填,[CLB 实例配置]公网 IP(EIP)计费类型。 service.beta.kubernetes.io/volcengine-loadbalancer-bandwidth: "25" #address-type 为 PUBLIC 时必填,[CLB 实例配置]公网类型负载均衡实例需要指定公网 IP(EIP)带宽峰值。 service.beta.kubernetes.io/volcengine-loadbalancer-ip-version: "ipv4" #非必填,[CLB 实例配置]负载均衡实例的 IP 地址类型。CLB 目前仅支持 IPv4。 service.beta.kubernetes.io/volcengine-loadbalancer-spec: "small_1" #必填,[CLB 实例配置]负载均衡实例的规格。 service.beta.kubernetes.io/volcengine-loadbalancer-pass-through: "true" #必填,[监听器配置]是否开启负载均衡器直通 Pod 模式。关联 VCI 工作负载时必须开启。 service.beta.kubernetes.io/volcengine-loadbalancer-scheduler: "wrr" #非必填,[监听器配置]监听器的调度算法。 service.beta.kubernetes.io/volcengine-loadbalancer-health-check-flag: "on" #非必填,[监听器配置]是否开启健康检查。 service.beta.kubernetes.io/volcengine-loadbalancer-health-check-connect-timeout: "2" #health-check-flag 为 on 时必填,[监听器配置]等待健康检查的响应时间。 service.beta.kubernetes.io/volcengine-loadbalancer-health-check-interval: "2" #health-check-flag 为 on 时必填,[监听器配置]健康检查的时间间隔。 service.beta.kubernetes.io/volcengine-loadbalancer-healthy-threshold: "3" #health-check-flag 为 on 时必填,[监听器配置]后端服务器正常的健康检查次数。 service.beta.kubernetes.io/volcengine-loadbalancer-unhealthy-threshold: "3" #health-check-flag 为 on 时必填,[监听器配置]后端服务器异常的健康检查次数。 name: test-service #服务的名称。 namespace: default #服务所属的命名空间。 spec: externalTrafficPolicy: Cluster ports: - name: test #端口映射策略命名。 port: 80 #服务端口。 protocol: TCP #端口通信协议,支持 TCP/UDP。 targetPort: 80 #容器端口。 selector: #标签选择器,将 Service 与后端容器组实例(Pod)绑定。 app: vci-deployment #具体标签。本示例选择以 VCI 方式部署的工作负载标签。 type: LoadBalancer #服务的类型。
负载均衡 CLB 常用注解如下所示。
Key | 类型 | 是否必须 | 描述 | 默认值 |
---|---|---|---|---|
service.beta.kubernetes.io/volcengine-loadbalancer-id | String | 使用已有 CLB 时,必须 | 使用已有的负载均衡实例 ID,设置后无法修改。 | 无 |
service.beta.kubernetes.io/volcengine-loadbalancer-name | String | 否 | 要创建的负载均衡实例名称。 | 无 |
service.beta.kubernetes.io/volcengine-loadbalancer-subnet-id | String | 自动创建 CLB 时,必须 | 负载均衡实例所属的子网 ID。 | 无 |
service.beta.kubernetes.io/volcengine-loadbalancer-address-type | String | 否 | 负载均衡实例的网络访问类型。取值如下:
| PUBLIC |
service.beta.kubernetes.io/volcengine-loadbalancer-isp-type | String | address-type 为 PUBLIC 时,必须 | 负载均衡实例的线路类型。取值如下: | BGP |
service.beta.kubernetes.io/volcengine-loadbalancer-eip-BandwidthPackageId | String | 否 | 共享带宽资源包 ID。 注意
| 无 |
service.beta.kubernetes.io/volcengine-loadbalancer-eip-billing-type | Integer | address-type 为 PUBLIC 时,必须 | 公网 IP(EIP)计费类型。取值如下:
| 3 |
service.beta.kubernetes.io/volcengine-loadbalancer-bandwidth | Integer | address-type 为 PUBLIC 时,必须 | 负载均衡实例的公网带宽峰值。
| 10 |
service.beta.kubernetes.io/volcengine-loadbalancer-ip-version | String | 否 | 负载均衡实例的 IP 地址类型。当前仅支持取值为:ipv4。 | ipv4 |
service.beta.kubernetes.io/volcengine-loadbalancer-spec | String | 否 | 负载均衡实例的规格类型。详细说明,请参见 产品类型与规格。
| small_1 |
service.beta.kubernetes.io/volcengine-loadbalancer-pass-through | Boolean | 否 | 是否开启负载均衡器直通 Pod 模式。取值如下:
注意 LoadBlancer 类型 Service 关联弹性容器实例(VCI)方式部署的工作负载时,必须配置该 Annotation 且取值必须为 true,否则会导致 Service 不可用。 | false |
service.beta.kubernetes.io/volcengine-loadbalancer-scheduler | String | 否 | 负载均衡实例的监听器调度算法。取值如下:
| wrr |
service.beta.kubernetes.io/volcengine-loadbalancer-acl-status | String | 否 | 负载均衡实例的监听器是否开启访问控制。取值如下:
| off |
service.beta.kubernetes.io/volcengine-loadbalancer-acl-type | String | acl-status 为 on 时,必须 | 负载均衡实例的监听器开启访问控制的方式。取值如下:
| black |
service.beta.kubernetes.io/volcengine-loadbalancer-acl-id | String | acl-status 为 on 时,必须 | 负载均衡实例的监听器所绑定的访问控制策略组(ACL)ID。策略组相关信息,请参见 管理访问控制策略组。 | 无 |
service.beta.kubernetes.io/volcengine-loadbalancer-health-check-flag | String | 否 | 是否开启健康检查。取值如下:
| off |
service.beta.kubernetes.io/volcengine-loadbalancer-health-check-interval | Integer | 否 | 健康检查的时间间隔。
| 2 |
service.beta.kubernetes.io/volcengine-loadbalancer-health-check-connect-timeout | Integer | 否 | 健康检查的超时时间。
| 2 |
service.beta.kubernetes.io/volcengine-loadbalancer-healthy-threshold | Integer | 否 | 健康检查连续成功多少次后,将后端服务器的健康检查状态由 Fail 判定为 Success。
| 3 |
service.beta.kubernetes.io/volcengine-loadbalancer-unhealthy-threshold | Integer | 否 | 健康检查连续失败多少次后,将后端服务器的健康检查状态由 Success 判定为 Fail。
| 3 |
service.beta.kubernetes.io/volcengine-loadbalancer-proxy-protocol | String | 否 | 是否开启 Proxy Protocal 源 IP 透传,取值如下:
注意 目前,CLB 的配置最终会与 LB Service 中的设置保持一致。若此前已经手动在负载均衡控制台修改了 CLB 的配置,请在 LB service 中配置相应的内容,防止手动修改的内容失效。 | off |