服务(Serivce)支持通过注解(Annotation)实现更加丰富的四层负载均衡(CLB)能力。本文主要介绍使用 Annotation 配置负载均衡服务的配置方法。
注意
使用如下 YAML 配置,创建服务并对接已有的负载均衡实例。
apiVersion: v1 kind: Service metadata: annotations: service.beta.kubernetes.io/volcengine-loadbalancer-id: "clb-mim02n8g5kw05smt1b******" # 必填,已有负载均衡实例的 ID name: clb-service # 服务的名称 namespace: default # 服务所属的命名空间 spec: externalTrafficPolicy: Cluster selector: app: nginx # 通过标签选择器将服务与后端容器组(Pod)绑定 ports: - name: test # 端口映射策略命名 port: 80 # 服务端口 protocol: TCP # 端口通信协议 TCP/UDP targetPort: 80 # 容器端口 type: LoadBalancer # 服务的类型
Annotation 说明如下表所示。
Key | 类型 | 是否必须 | 描述 | 默认值 | 是否支持修改 |
---|---|---|---|---|---|
service.beta.kubernetes.io/volcengine-loadbalancer-id | String | 是 | 已存在的负载均衡实例 ID。 | 无 | 否 |
使用如下 YAML 配置,创建服务并同时创建新的负载均衡实例。
apiVersion: v1 kind: Service metadata: annotations: service.beta.kubernetes.io/volcengine-loadbalancer-name: "clb-demo" # 非必填,新创建的负载均衡实例名称 service.beta.kubernetes.io/volcengine-loadbalancer-subnet-id: "subnet-mizw4xqzpssg5smt1b******" # 必填,负载均衡实例所属的子网 ID service.beta.kubernetes.io/volcengine-loadbalancer-address-type: "PUBLIC" # 非必填,负载均衡实例的网络类型。不设置时,默认网络类型为 PUBLIC service.beta.kubernetes.io/volcengine-loadbalancer-isp-type: "BGP" # 非必填,负载均衡实例的线路类型 service.beta.kubernetes.io/volcengine-loadbalancer-billing-type: "2" # 非必填,负载均衡实例计费类型 service.beta.kubernetes.io/volcengine-loadbalancer-eip-billing-type: "3" # 非必填,公网 IP(EIP)计费类型 service.beta.kubernetes.io/volcengine-loadbalancer-bandwidth: "25" # 非必填,公网类型负载均衡实例需要指定公网 IP(EIP)带宽峰值。 service.beta.kubernetes.io/volcengine-loadbalancer-ip-version: "ipv4" # 非必填,负载均衡实例的 IP 地址类型,目前仅支持 IPv4 service.beta.kubernetes.io/volcengine-loadbalancer-spec: "small_1" # 非必填,负载均衡实例的规格 service.beta.kubernetes.io/volcengine-loadbalancer-sync-fields: "spec" # 更新 CLB 实例规格时必填,填写该字段为 spec 时,会根据 loadbalancer-spec 字段更新 CLB 的实例规格 service.beta.kubernetes.io/volcengine-loadbalancer-master-zone-id: "cn-beijing-a" # 非必填,负载均衡实例的主可用区 ID service.beta.kubernetes.io/volcengine-loadbalancer-slave-zone-id: "cn-beijing-b" # 非必填,负载均衡实例的备可用区 ID service.beta.kubernetes.io/volcengine-loadbalancer-modification-protection-status: "ConsoleProtection" # 非必填,负载均衡实例的修改保护功能 service.beta.kubernetes.io/volcengine-loadbalancer-eip-BandwidthPackageId: "bwp-2d63yyj3ki4u858oz***" # 非必填,共享带宽资源包 ID service.beta.kubernetes.io/volcengine-loadbalancer-eni-address-number: "2" # 非必填,配置负载均衡实例的私网 IPv4 地址数量 service.beta.kubernetes.io/volcengine-loadbalancer-eni-address: "192.168.0.1" # 非必填,配置负载均衡实例的私网 IPv4 地址,该地址必须包含在所选子网的 IPv4 网段中,且未被占用 name: clb-service # 服务的名称 namespace: default # 服务所属的命名空间 spec: externalTrafficPolicy: Cluster selector: app: nginx # 通过标签选择器将服务与后端容器组(Pod)绑定 ports: - name: test # 端口映射策略命名 port: 80 # 服务端口 protocol: TCP # 端口通信协议,支持 TCP/UDP targetPort: 80 # 容器端口 type: LoadBalancer # 服务的类型
Annotation 说明如下表所示。
Key | 类型 | 是否必须 | 描述 | 默认值 | 是否支持修改 |
---|---|---|---|---|---|
service.beta.kubernetes.io/volcengine-loadbalancer-name | String | 否 | 创建的负载均衡实例名称,不指定则自动生成名称。 | 无 | 否 |
service.beta.kubernetes.io/volcengine-loadbalancer-subnet-id | String | 是 | 负载均衡实例所属的子网 ID。 | 无 | 否 |
service.beta.kubernetes.io/volcengine-loadbalancer-address-type | String | 否 | 负载均衡实例的网络访问类型。取值:
| PUBLIC | 否 |
service.beta.kubernetes.io/volcengine-loadbalancer-isp-type | String | 否 | 负载均衡实例的线路类型。包括:BGP、SingleLine_BGP、Static_BGP、Fusion_BGP、ChinaMobile、ChinaTelecom、ChinaUnicom、ChinaMobile_Value、ChinaUnicom_Value 和 ChinaTelecom_Value。详细参数解释,请参见 EIP 产品文档。 注意 除 BGP 外,其他线路类型均为 EIP 产品的邀测功能,如需使用,请 提交工单 或联系客户经理申请。 | BGP | 否 |
service.beta.kubernetes.io/volcengine-loadbalancer-billing-type | Integer | 否 | 负载均衡实例的计费类型。取值:
注意
| 2 | 是 |
service.beta.kubernetes.io/volcengine-loadbalancer-eip-billing-type | Integer | 否 | 公网 IP(EIP)计费类型。取值:
| 3 | 否 |
service.beta.kubernetes.io/volcengine-loadbalancer-bandwidth | Integer | 否 | 负载均衡实例的公网带宽峰值,单位为 Mbps,取值:
| 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-sync-fields | String | 需要更新 CLB 实例的规格时,必选 | 更新 YAML 时,是否感知
| 无 | 否 |
service.beta.kubernetes.io/volcengine-loadbalancer-master-zone-id | String | 否 | 负载均衡实例的主可用区 ID。
说明 均衡负载在各地域支持的可用区情况以及可用区 ID,请参见 地域与可用区。 | 无 | 否 |
service.beta.kubernetes.io/volcengine-loadbalancer-slave-zone-id | String | 否 | 负载均衡实例的备可用区 ID。
| 无 | 否 |
service.beta.kubernetes.io/volcengine-loadbalancer-modification-protection-status | String | 否 | 负载均衡实例的修改保护功能,取值:
| 无 | 是 |
service.beta.kubernetes.io/volcengine-loadbalancer-eip-BandwidthPackageId | String | 否 | 共享带宽资源包 ID。 注意
| 无 | 是 |
service.beta.kubernetes.io/volcengine-loadbalancer-eni-address-number | String | 否 | 配置负载均衡实例的私网 IPv4 地址数量。 说明
| 无 | 否 |
service.beta.kubernetes.io/volcengine-loadbalancer-eni-address | String | 否 | 配置负载均衡实例的私网 IPv4 地址,该地址必须包含在所选子网的 IPv4 网段中,且未被占用。 说明 与 | 无 | 否 |
使用如下 YAML 配置,创建一个新的负载均衡服务并关联以弹性容器实例(VCI)方式部署的工作负载。
apiVersion: v1 kind: Service metadata: annotations: service.beta.kubernetes.io/volcengine-loadbalancer-name: "clb-demo" # 非必填,新创建的负载均衡实例名称 service.beta.kubernetes.io/volcengine-loadbalancer-subnet-id: "subnet-mizw4xqzpssg5smt1b******" # 必填,负载均衡实例所属的子网 ID service.beta.kubernetes.io/volcengine-loadbalancer-pass-through: "true" # 必填,开启负载均衡器直通 Pod 模式。关联 VCI 工作负载时必须开启 name: clb-service # 服务的名称 namespace: default # 服务所属的命名空间 spec: externalTrafficPolicy: Cluster selector: app: nginx # 通过标签选择器将服务与后端容器组(Pod)绑定 ports: - name: test # 端口映射策略命名 port: 80 # 服务端口 protocol: TCP # 端口通信协议,支持 TCP/UDP targetPort: 80 # 容器端口 type: LoadBalancer # 服务的类型
Annotation 说明如下表所示。
Key | 类型 | 是否必须 | 描述 | 默认值 | 是否支持修改 |
---|---|---|---|---|---|
service.beta.kubernetes.io/volcengine-loadbalancer-name | String | 否 | 创建的负载均衡实例名称,不指定则自动生成名称。 | 无 | 否 |
service.beta.kubernetes.io/volcengine-loadbalancer-subnet-id | String | 是 | 负载均衡实例所属的子网 ID。 | 无 | 否 |
service.beta.kubernetes.io/volcengine-loadbalancer-pass-through | Boolean | 是 | 是否开启负载均衡器直通 Pod 模式。取值:
| false | 是 |
注意
true
。修改该字段会导致流量断流,请谨慎操作。说明
监听器支持在对接已有 CLB 实例时配置,也支持在创建新的 CLB 实例时配置。本例以对接已有 CLB 实例为例。
负载均衡服务支持通过 Annotation 配置 CLB 实例的监听器,示例和说明如下:
apiVersion: v1 kind: Service metadata: annotations: service.beta.kubernetes.io/volcengine-loadbalancer-id: "clb-mim02n8g5kw05smt1b******" # 必填,已有负载均衡实例的 ID service.beta.kubernetes.io/volcengine-loadbalancer-scheduler: "wrr" # 非必填,监听器的调度算法 service.beta.kubernetes.io/volcengine-loadbalancer-established-timeout: 100 # 非必填,监听器的超时时间 service.beta.kubernetes.io/volcengine-loadbalancer-listener-bandwidth: 10 # 非必填,监听器的带宽峰值 service.beta.kubernetes.io/volcengine-loadbalancer-persistence-timeout: 3600 # 非必填,监听器的会话保持功能 service.beta.kubernetes.io/volcengine-loadbalancer-drain-timeout: 500 # 非必填,监听器的连接优雅中断 name: clb-service # 服务的名称 namespace: default # 服务所属的命名空间 spec: externalTrafficPolicy: Cluster selector: app: nginx # 通过标签选择器将服务与后端容器组(Pod)绑定 ports: - name: test # 端口映射策略命名 port: 80 # 服务端口 protocol: TCP # 端口通信协议 TCP/UDP targetPort: 80 # 容器端口 type: LoadBalancer # 服务的类型
Annotation 说明如下表所示。
Key | 类型 | 是否必须 | 描述 | 默认值 | 是否支持修改 |
---|---|---|---|---|---|
service.beta.kubernetes.io/volcengine-loadbalancer-scheduler | String | 否 | 配置监听器的调度算法。取值:
| wrr | 是 |
service.beta.kubernetes.io/volcengine-loadbalancer-established-timeout | Integer | 否 | 配置监听器的连接超时时间,当前仅针对 TCP 和 UDP 监听器生效。取值范围:
| 无 | 是 |
service.beta.kubernetes.io/volcengine-loadbalancer-listener-bandwidth | Integer | 否 | 配置监听器的带宽峰值,单位为 Mbps。
| 无 | 是 |
service.beta.kubernetes.io/volcengine-loadbalancer-persistence-timeout | Integer | 否 | 配置监听器的会话保持功能和超时时间。开启后,将支持基于源 IP 的会话保持能力。取值范围为 0~3600,单位为秒。其中:
| 无 | 是 |
service.beta.kubernetes.io/volcengine-loadbalancer-drain-timeout | Integer | 否 | 配置监听器的连接优雅中断功能和超时时间。启用连接优雅中断后,您可以在删除后端服务器或者健康检查失败后,使现有连接在一定时间内正常传输。取值范围为 0~900,单位为秒。其中:
| 无 | 是 |
说明
监听器的健康检查功能支持在对接已有 CLB 实例时配置,也支持在创建新的 CLB 实例时配置。本例以对接已有 CLB 实例为例。
负载均衡服务支持通过 Annotation 配置监听器的健康检查功能,示例和说明如下:
apiVersion: v1 kind: Service metadata: annotations: service.beta.kubernetes.io/volcengine-loadbalancer-id: "clb-mim02n8g5kw05smt1b******" # 必填,已有负载均衡实例的 ID service.beta.kubernetes.io/volcengine-loadbalancer-health-check-flag: "on" # 必填,是否开启健康检查 service.beta.kubernetes.io/volcengine-loadbalancer-health-check-connect-timeout: "2" # 非必填,等待健康检查的响应时间 service.beta.kubernetes.io/volcengine-loadbalancer-health-check-interval: "2" # 非必填,健康检查的时间间隔 service.beta.kubernetes.io/volcengine-loadbalancer-healthy-threshold: "3" # 非必填,后端服务器正常的健康检查次数 service.beta.kubernetes.io/volcengine-loadbalancer-unhealthy-threshold: "3" # 非必填,后端服务器异常的健康检查次数 service.beta.kubernetes.io/volcengine-loadbalancer-health-check-udp-request: "healthcheckrequest" # 非必填,配置健康检查的请求字符串,仅监听器协议为 UDP 时支持 service.beta.kubernetes.io/volcengine-loadbalancer-health-check-udp-expect: "ok" # 非必填,配置健康检查的响应字符串,仅监听器协议为 UDP 时支持 name: clb-service # 服务的名称 namespace: default # 服务所属的命名空间 spec: externalTrafficPolicy: Cluster selector: app: nginx # 通过标签选择器将服务与后端容器组(Pod)绑定 ports: - name: test # 端口映射策略命名 port: 80 # 服务端口 protocol: TCP # 端口通信协议 TCP/UDP targetPort: 80 # 容器端口 type: LoadBalancer # 服务的类型
Annotation 说明如下表所示。
Key | 类型 | 是否必须 | 描述 | 默认值 | 是否支持修改 |
---|---|---|---|---|---|
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-health-check-udp-request | String | 否 | 健康检查的请求字符串,仅监听器协议为 UDP 时支持。
| 无 | 是 |
service.beta.kubernetes.io/volcengine-loadbalancer-health-check-udp-expect | String | 否 | 健康检查的响应字符串,仅监听器协议为 UDP 时支持。
| 无 | 是 |
说明
监听器的访问控制功能支持在对接已有 CLB 实例时配置,也支持在创建新的 CLB 实例时配置。本例以对接已有 CLB 实例为例。
负载均衡服务支持通过 Annotation 配置监听器的访问控制功能,示例和说明如下:
apiVersion: v1 kind: Service metadata: annotations: service.beta.kubernetes.io/volcengine-loadbalancer-id: "clb-mim02n8g5kw05smt1b******" # 必填,已有负载均衡实例的 ID service.beta.kubernetes.io/volcengine-loadbalancer-acl-status: "on" # 必填,是否开启监听器的访问控制 service.beta.kubernetes.io/volcengine-loadbalancer-acl-type: "white" # 必填,开启访问控制的方式(白名单、黑名单) service.beta.kubernetes.io/volcengine-loadbalancer-acl-id: "acl-3cj44nv0jhhxc6c6rrtet****,acl-2febxt4pu0zy85oxruw0t****" # 必填,监听器绑定的访问控制策略组 ID name: clb-service # 服务的名称 namespace: default # 服务所属的命名空间 spec: externalTrafficPolicy: Cluster selector: app: nginx # 通过标签选择器将服务与后端容器组(Pod)绑定 ports: - name: test # 端口映射策略命名 port: 80 # 服务端口 protocol: TCP # 端口通信协议 TCP/UDP targetPort: 80 # 容器端口 type: LoadBalancer # 服务的类型
Annotation 说明如下表所示。
Key | 类型 | 是否必须 | 描述 | 默认值 | 是否支持修改 |
---|---|---|---|---|---|
service.beta.kubernetes.io/volcengine-loadbalancer-acl-status | String | 是 | 监听器是否开启访问控制。取值:
| off | 是 |
service.beta.kubernetes.io/volcengine-loadbalancer-acl-type | String | 是 | 监听器开启访问控制的方式。取值:
| black | 是 |
service.beta.kubernetes.io/volcengine-loadbalancer-acl-id | String | 是 | 监听器绑定的访问控制策略组(ACL)ID。策略组相关信息,请参见 管理访问控制策略组。 | 无 | 是 |
说明
监听器的 Proxy Protocol 源 IP 透传功能支持在对接已有 CLB 实例时配置,也支持在创建新的 CLB 实例时配置。本例以对接已有 CLB 实例为例。
负载均衡服务支持通过 Annotation 配置监听器的 Proxy Protocol 源 IP 透传功能,示例和说明如下:
apiVersion: v1 kind: Service metadata: annotations: service.beta.kubernetes.io/volcengine-loadbalancer-id: "clb-mim02n8g5kw05smt1b******" # 必填,已有负载均衡实例的 ID service.beta.kubernetes.io/volcengine-loadbalancer-proxy-protocol: "standard" # 必填,开启 Proxy Protocol 源 IP 透传 name: clb-service # 服务的名称 namespace: default # 服务所属的命名空间 spec: externalTrafficPolicy: Cluster selector: app: nginx # 通过标签选择器将服务与后端容器组(Pod)绑定 ports: - name: test # 端口映射策略命名 port: 80 # 服务端口 protocol: TCP # 端口通信协议 TCP/UDP targetPort: 80 # 容器端口 type: LoadBalancer # 服务的类型
Annotation 说明如下表所示。
Key | 类型 | 是否必须 | 描述 | 默认值 | 是否支持修改 |
---|---|---|---|---|---|
service.beta.kubernetes.io/volcengine-loadbalancer-proxy-protocol | String | 是 | 是否开启 Proxy Protocol 源 IP 透传,取值:
| off | 是 |
注意
true
。修改该字段会导致流量断流,请谨慎操作。负载均衡服务支持通过 Annotation 配置直通 Pod 模式,示例和说明如下:
apiVersion: v1 kind: Service metadata: annotations: service.beta.kubernetes.io/volcengine-loadbalancer-id: "clb-mim02n8g5kw05smt1b******" # 必填,已有负载均衡实例的 ID service.beta.kubernetes.io/volcengine-loadbalancer-pass-through: "true" # 必填,是否开启负载均衡器直通 Pod 模式 name: clb-service # 服务的名称 namespace: default # 服务所属的命名空间 spec: externalTrafficPolicy: Cluster selector: app: nginx # 通过标签选择器将服务与后端容器组(Pod)绑定 ports: - name: test # 端口映射策略命名 port: 80 # 服务端口 protocol: TCP # 端口通信协议 TCP/UDP targetPort: 80 # 容器端口 type: LoadBalancer # 服务的类型
Annotation 说明如下表所示。
Key | 类型 | 是否必须 | 描述 | 默认值 | 是否支持修改 |
---|---|---|---|---|---|
service.beta.kubernetes.io/volcengine-loadbalancer-pass-through | Boolean | 是 | 是否开启负载均衡器直通 Pod 模式。取值:
| false | 是 |
注意
负载均衡服务支持通过 Annotation 配置是否展示公网 CLB 的私网 IP 地址,示例和说明如下:
apiVersion: v1 kind: Service metadata: annotations: service.beta.kubernetes.io/volcengine-loadbalancer-id: "clb-mim02n8g5kw05smt1b******" # 必填,已有负载均衡实例的 ID service.beta.kubernetes.io/volcengine-loadbalancer-display-internal-ip: "true" # 必填,是否展示公网 CLB 的私网 IP 地址 name: clb-service # 服务的名称 namespace: default # 服务所属的命名空间 spec: externalTrafficPolicy: Cluster selector: app: nginx # 通过标签选择器将服务与后端容器组(Pod)绑定 ports: - name: test # 端口映射策略命名 port: 80 # 服务端口 protocol: TCP # 端口通信协议 TCP/UDP targetPort: 80 # 容器端口 type: LoadBalancer # 服务的类型
Annotation 说明如下表所示。
Key | 类型 | 是否必须 | 描述 | 默认值 | 是否支持修改 |
---|---|---|---|---|---|
service.beta.kubernetes.io/volcengine-loadbalancer-display-internal-ip | Boolean | 是 | 是否展示公网 CLB 的私网 IP 地址。取值:
| false | 是 |
配置完成后,支持通过控制台或 YAML 配置,查看 CLB 实例的公网和私网 IP 地址。