You need to enable JavaScript to run this app.
导航
使用 Annotation 配置 ALB Ingress
最近更新时间:2024.09.26 11:47:10首次发布时间:2022.09.27 16:04:07

ALB Ingress 支持通过注解(Annotation)实现更加丰富的 ALB 能力配置。本文主要介绍使用 Annotation 配置 ALB Ingress 的主要场景和配置方法。

注意

注解的内容需要严格区分大小写。

配置监听器

ALB Ingress 支持通过 Annotation 选择监听器,示例和说明如下:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: alb-ingress # 路由规则的名称
  namespace: default  # 路由规则所属的命名空间
  annotations:
    ingress.vke.volcengine.com/loadbalancer-port: "80" # 监听器端口号
    ingress.vke.volcengine.com/loadbalancer-protocol: "http"  # 监听器协议。取值:http、https
    ingress.vke.volcengine.com/loadbalancer-scheduler: "wrr"  # 监听器调度算法。取值:wrr(加权轮询)、wlc(加权最小连接数)、sh(源地址哈希)
spec:
  ingressClassName: alb  # ALBInstance 的资源名称
  rules:
    - host: example.com  # 需要对外提供访问的域名
      http:
        paths:
        - pathType: Prefix # 路径匹配规则,默认为 Prefix(前缀匹配)
          path: / # 请求匹配的路径
          backend:
            service:
              name: service-demo # 需要对接的服务名称
              port: 
                number: 80 # 需要对接服务的端口号

Annotation 说明如下表所示。

字段类型描述默认值
ingress.vke.volcengine.com/loadbalancer-portStringALB 监听器的监听端口,请保证监听器已经配置了对应的监听端口。80

ingress.vke.volcengine.com/loadbalancer-protocol

String

ALB 监听器的监听协议。取值:

  • http:使用 HTTP 协议的监听器。
  • https:使用 HTTPS 协议的监听器。

http

ingress.vke.volcengine.com/loadbalancer-scheduler

String

ALB 监听器使用的调度算法。取值:

  • wrr:加权轮询,权重值越高的后端服务器,被轮询到的次数(概率)越高。
  • wlc:加权最小连接数,在最少连接数的基础上,根据服务器的不同处理能力,为每个服务器分配不同的权重,使其能够接受相应权值数的服务请求。
  • sh:源地址哈希,基于源 IP 地址的一致性哈希,相同的源地址会调度到相同的后端服务器。

wrr

配置直通 Pod 模式

注意

直通 Pod 模式仅在 VPC-CNI 容器网络模式的集群下生效。

ALB Ingress 支持通过 Annotation 配置直通 Pod 模式,示例和说明如下:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: alb-ingress # 路由规则的名称
  namespace: default  # 路由规则所属的命名空间
  annotations:
    ingress.vke.volcengine.com/loadbalancer-pass-through: "true" # 配置直通 Pod 模式
spec:
  ingressClassName: alb  # ALBInstance 的资源名称
  rules:
    - host: example.com  # 需要对外提供访问的域名
      http:
        paths:
        - pathType: Prefix # 路径匹配规则,默认为 Prefix(前缀匹配)
          path: / # 请求匹配的路径
          backend:
            service:
              name: service-demo # 需要对接的服务名称
              port: 
                number: 80 # 需要对接服务的端口号

Annotation 说明如下表所示。

字段类型描述默认值

ingress.vke.volcengine.com/loadbalancer-pass-through

String

是否启用应用型负载均衡器直通 Pod 模式。取值:

  • true:启用应用型负载均衡器直通 Pod 模式。
  • false:(默认值)禁用应用型负载均衡器直通 Pod 模式。

false

配置健康检查

ALB Ingress 支持通过 Annotation 配置健康检查。示例和注解说明如下:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    ingress.vke.volcengine.com/loadbalancer-healthcheck-enabled: "true" # 是否开启健康检查。取值:true、false
    ingress.vke.volcengine.com/loadbalancer-healthcheck-domain: "example.com"  # 健康检查域名
    ingress.vke.volcengine.com/loadbalancer-healthcheck-path: "/"  # 健康检查路径,默认为 "/"。
    ingress.vke.volcengine.com/loadbalancer-healthcheck-method: "GET"  # 健康检查方法。取值 GET、HEAD
    ingress.vke.volcengine.com/loadbalancer-healthcheck-httpcode: "http_2xx,http_3xx"  # 健康检查的状态码。取值:http_2xx(默认)、http_3xx(默认)、http_4xx、http_5xx。
    ingress.vke.volcengine.com/loadbalancer-healthcheck-timeout: "2"  # 等待健康检查响应的时间。取值范围:1~60 秒
    ingress.vke.volcengine.com/loadbalancer-healthcheck-interval: "2"  # 执行健康检查的时间间隔。取值范围:1~300 秒
    ingress.vke.volcengine.com/loadbalancer-healthy-threshold: "3"  # 判断后端服务器正常的健康检查次数。取值范围:2~10 次
    ingress.vke.volcengine.com/loadbalancer-unhealthy-threshold: "3"  # 判断后端服务器异常的健康检查次数。取值范围:2~10 次
  name: alb-ingress      # 自定义路由规则名称。
  namespace: default     # 路由规则所属的命名空间。
spec:
  ingressClassName: alb  # ALBInstance 的资源名称
  rules:
    - host: example.com  # 需要对外提供访问的域名
      http:
        paths:
        - pathType: Prefix # 路径匹配规则,默认为 Prefix(前缀匹配)
          path: / # 请求匹配的路径
          backend:
            service:
              name: service-demo # 需要对接的服务名称
              port: 
                number: 80 # 需要对接服务的端口号

Annotation 说明如下表所示。

字段类型描述默认值

ingress.vke.volcengine.com/loadbalancer-healthcheck-enabled

String

是否开启健康检查。取值:

  • true:(默认值)开启健康检查。
  • false:禁用健康检查。

true

ingress.vke.volcengine.com/loadbalancer-healthcheck-domain

String

健康检查域名。填写后 ALB 会将域名配置到 host 字段中。
如果没有配置域名,则 host 字段为空,ALB 不会在请求中附带 host 字段,而是默认域名为后端服务器组内网 IP。

ingress.vke.volcengine.com/loadbalancer-healthcheck-pathString健康检查路径,默认为//
ingress.vke.volcengine.com/loadbalancer-healthcheck-methodString健康检查的方法。取值:GET、HEADGET

ingress.vke.volcengine.com/loadbalancer-healthcheck-httpcode

String

健康检查正常的状态码。
取值:http_2xx(默认值)、http_3xx(默认值)、http_4xx、http_5xx。

http_2xx,http_3xx

ingress.vke.volcengine.com/loadbalancer-healthcheck-timeout

String

等待健康检查响应的时间。

  • 取值:1~60
  • 单位:秒

2

ingress.vke.volcengine.com/loadbalancer-healthcheck-interval

String

执行健康检查的时间间隔。

  • 取值:1~300
  • 单位:秒

2

ingress.vke.volcengine.com/loadbalancer-healthy-threshold

String

健康检查连续成功多少次后,将后端服务器的健康检查状态由 Fail 判定为 Success。

  • 取值 :2~10
  • 单位:次

3

ingress.vke.volcengine.com/loadbalancer-unhealthy-threshold

String

健康检查连续失败多少次后,将后端服务器的健康检查状态由 Success 判定为 Fail。

  • 取值:2~10
  • 单位:次

3

配置后端服务组健康检查

ALB Ingress 支持通过 Annotation 配置指定后端服务组的健康检查,示例和注解说明如下:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: alb-ingress
  annotations:
    ingress.vke.volcengine.com/loadbalancer-rules-configs: |
        [
            {
                "host": "second.example.com",
                "path": "/",
                "healthCheck":
                 {
                   "enabled": true,
                   "protocol": "http",
                   "method": "GET",
                   "httpcode": "http_2xx,http_3xx",
                   "timeout": 2,
                   "interval": 2,
                   "healthyThreshold": 3,
                   "unhealthyThreshold": 3
                }
            }
        ]
spec:
  ingressClassName: alb # ALBInstance 的资源名称
  rules:
  - host: first.example.com
    http:
      paths:
      - pathType: Prefix
        path: /
        backend:
          service:
            name: service-demo-a
            port:
              number: 80
  - host: second.example.com
    http:
      paths:
      - pathType: Prefix
        path: /
        backend:
          service:
            name: service-demo-b
            port:
              number: 80

ingress.vke.volcengine.com/loadbalancer-rules-configs注解中的参数说明如下表所示。

字段类型描述默认值
hostString匹配健康检查的转发域名。
pathString匹配健康检查的转发路径。
healthCheckArray of healthCheck后端服务器组的健康检查规则。

healthCheck

字段类型描述默认值

enabled

Boolean

启用后端服务组健康检查功能。取值:

  • true:启用指定后端服务组健康检查功能。
  • false:禁用指定后端服务组健康检查功能。

protocolString健康检查协议,仅支持 http。
methodString健康检查方法。取值:GET、HEAD。HEAD
httpcodeString健康检查正常的 HTTP 状态码。取值:http_2xx、http_3xx、http_4xx、http_5xx。http_2xx,http_3xx

timeout

Integer

健康检查的响应超时时间。如果后端服务器在指定的时间内没有正确响应,则判定为健康检查异常。取值范围为 1~60 秒。

注意

响应超时时间需小于等于检查时间间隔。

2

intervalInteger健康检查的时间间隔。取值范围:1~300 秒。2
healthyThresholdInteger健康检查的健康阈值。表示连续执行指定次数的健康检查,结果均为正常的后端服务器将判定为健康检查正常。取值范围为 2~10 次。3
unhealthyThresholdInteger健康检查的不健康阈值。表示连续执行指定次数的健康检查,结果均为异常的后端服务器将判定为健康检查正常。取值范围为 2~10 次。3

配置转发流量限速

说明

邀测·申请试用】:该功能目前处于 邀测 阶段,如需使用,请提交申请。

ALB Ingress 支持通过 Annotation 配置转发流量限速,示例和注解说明如下:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    ingress.vke.volcengine.com/loadbalancer-rules-configs: |   # 配置 ALB Ingress 转发规则的流量限速
      [
          {
              "host": "example.com", 
              "path": "/", 
              "trafficLimitQps": 2000 
          }
      ]
  name: alb-ingress # 自定义路由规则名称
  namespace: default # 路由规则所属的命名空间
spec:
  ingressClassName: alb  # ALBInstance 的资源名称
  rules:
    - host: example.com  # 需要对外提供访问的域名
      http:
        paths:
        - pathType: Prefix # 路径匹配规则,默认为 Prefix(前缀匹配)
          path: / # 请求匹配的路径
          backend:
            service:
              name: service-demo # 需要对接的服务名称
              port: 
                number: 80 # 需要对接服务的端口号

ingress.vke.volcengine.com/loadbalancer-rules-configs注解中的参数说明如下表所示。

字段类型描述默认值
hostString匹配流量限速的转发域名。
pathString匹配流量限速的转发路径。

trafficLimitQps

Integer

该转发规则的 QPS(每秒请求数)。取值范围为 100~100000 QPS。

说明

若不填写参数值,则表示该转发规则不设置流量限速。

配置转发规则重定向

ALB Ingress 支持通过 Annotation 配置转发重定向规则,示例和注解说明如下:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: alb-ingress
  annotations:
    ingress.vke.volcengine.com/loadbalancer-rules-configs: |
      [
            {
                "host": "first.example.com",
                "path": "/",
                "ruleAction": "Redirect",
                "redirectConfig": 
                     {
                       "domain": "test.com",
                       "uri": "/docs",
                       "port": 8080,
                       "httpCode": "302",
                       "protocol": "HTTPS"
                    }
            }
      ]
spec:
  ingressClassName: alb # ALBInstance 的资源名称
  rules:
  - host: first.example.com
    http:
      paths:
      - pathType: Prefix
        path: /
        backend:
          service:
            name: redirect # 固定值,表示重定向的服务
            port:
              name: use-annotation # 固定值,表示重定向的服务
  - host: second.example.com
    http:
      paths:
      - pathType: Prefix
        path: /
        backend:
          service:
            name: service
            port:
              number: 80

ingress.vke.volcengine.com/loadbalancer-rules-configs注解中的参数说明如下表所示。

字段类型描述默认值
hostString匹配重定向规则的转发域名。
pathString匹配重定向规则的转发路径。

ruleAction

String

配置转发规则动作。取值:

  • 空:表示默认转发至服务器组。
  • Redirect:表示开启重定向。

Redirect

redirectConfigArray of redirectConfig转发重定向规则。

redirectConfig

字段类型描述默认值
domainString重定向域名。仅支持精确域名。
若该参数不指定,则为默认值(空),最终效果为与请求域名保持一致。
uriString重定向 URI。必须以正斜线/开头。仅允许包含字母、数字、-_/.%?#&等字符。长度限制为 1~128 个字符。
若该参数不指定,则为默认值(空),最终效果为与请求 URI 保持一致。
portInteger重定向端口。取值范围为 1~65535。
若该参数不指定,将赋值为默认值(空),最终效果为与请求端口保持一致。
httpCodeString重定向状态码,支持 301、302、307、308。
若该参数不指定,则为默认值 301。
301
protocolString重定向使用的协议,支持 HTTP、HTTPS。
若该参数不指定,则为默认值 HTTPS 。
HTTPS