通过配置路由规则(Ingress)YAML 文件中特定的注解(Annotation)内容,实现更加丰富的七层负载均衡(CLB)能力和更加多样的服务路由规则。
注意
当您在容器服务集群中配置 Ingress 时,允许通过配置 YAML 文件中特定的注解,新建或复用七层负载均衡实例。
新建和复用七层负载均衡实例的主要区别如下表所示。
资源对象 | 新建 CLB | 复用 CLB |
---|---|---|
CLB |
|
说明
|
监听器 |
|
|
k8s_
前缀的内容。此场景使用的负载均衡(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 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-id | String | 是 | 指定已存在的 CLB 实例 ID。 | 无 |
使用如下 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 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-name | String | 否 | 新创建的负载均衡器实例名称。如未指定,系统会自动生成。 | 无 |
ingress.vke.volcengine.com/loadbalancer-spec | String | 是 | 表示负载均衡器实例的规格。取值:small_1、small_2、medium_1、meidum_2、large_1、large_2 。详情请参见 产品类型与规格。 | 无 |
ingress.vke.volcengine.com/loadbalancer-subnet-id | String | 是 | 指定创建的负载均衡器实例所属的子网。 | 无 |
ingress.vke.volcengine.com/loadbalancer-address-type | String | 否 | 指定负载均衡实例的类型。取值:
| 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 带宽峰值。
| 10 |
ingress.vke.volcengine.com/loadbalancer-ip-version | String | 否 | 负载均衡实例的 IP 版本。取值:ipv4。 | ipv4 |
ingress.vke.volcengine.com/loadbalancer-scheduler | String | 否 | 负载均衡器使用的调度算法。取值:
| wrr |
ingress.vke.volcengine.com/loadbalancer-protocol | String | 否 | 负载均衡实例的监听协议。取值:
| http |
ingress.vke.volcengine.com/loadbalancer-port | Integer | 否 | 负载均衡器的监听端口,取值范围为 1~65535。 |
|
ingress.vke.volcengine.com/loadbalancer-eip-BandwidthPackageId | String | 否 | 指定 EIP 的共享带宽包。 说明 共享带宽包是一种支持复用和共享带宽的云资源。将单个地域内多个公网 IP 或 IPv6 公网带宽添加到一个共享带宽包实例中,共享一条带宽,可以帮助您降低公网带宽的使用成本。详情请参见 什么是共享带宽包。 | 无 |
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 实例。
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