为配置了重定向监听器的ELB Ingress配置转发规则优先级
当多个Ingress资源共享同一个ELB时,特别是在涉及HTTP到HTTPS重定向的场景下,转发策略的执行顺序至关重要。如果优先级配置不当,可能导致重定向逻辑干扰正常的业务路由,或者业务路由被重定向规则意外拦截。本文介绍如何为配置了重定向监听器的ELB Ingress配置转发规则优先级。
约束与限制
- 该特性仅在使用独享型ELB时支持配置。
- 集群版本为v1.30.14-r100、v1.31.14-r60、v1.32.13-r30、v1.33.12-r10、v1.34.8-r10、v1.35.5-r10、v1.36.2-r0及以上版本时,使用HTTP重定向到HTTPS协议的策略支持配置优先级排序。
默认优先级规则
为ELB ingress配置转发规则优先级时,可使用“kubernetes.io/elb.ingress-order”注解为不同Ingress的转发规则进行排序,具体规则如下:
- “kubernetes.io/elb.ingress-order”注解的参数取值范围为1~1000,参数值越小,表示优先级越高。
- 具有“kubernetes.io/elb.ingress-order”注解的Ingress优先级较高,不具有该注解的Ingress优先级较低。
即在默认场景下,不同ingress的优先级从高到低如下:
- 配置了kubernetes.io/elb.ingress-order且取值较小
- 配置了kubernetes.io/elb.ingress-order且取值较大
- 未配置kubernetes.io/elb.ingress-order注解
在未配置ingress-order优先级注解的情况下,HTTP至HTTPS的重定向规则默认拥有最高优先级。详情请参见示例2:重定向场景下未配置ingress-order。
场景示例
示例1:重定向场景下配置ingress-order
例如,有四个Ingress资源(ingress-a,ingress-b,ingress-c,ingress-d),共用一个独享型ELB。
| Ingress | ingress-order值 | 端口 | 规则 | 说明 |
|---|---|---|---|---|
| ingress-a | 1 | 80 | 规则A(host: a.com, path: /A) | 80端口HTTP转发 |
| ingress-b | 2 | 80→443 | 规则B(host: b.com, path: /B) | 配置HTTP/80重定向到HTTPS/443 |
| ingress-c | 3 | 443 | 规则C(host: c.com, path: /C) | 443端口HTTPS转发 |
| ingress-d | 未配置 | 80 | 规则D(host: d.com, path: /D) | 80端口HTTP转发 |
创建成功截图示例如下。
查看ELB的80监听器上的转发策略优先级,此时转发策略顺序依次为:
| 转发规则优先级 | 规则 | 所属Ingress | 说明 | 对应的ingress-order |
|---|---|---|---|---|
| 1 | 规则A(host: a.com, path: /A) | ingress-a | 80端口HTTP转发 | 1 |
| 2 | 规则B(host: b.com, path: /B) | ingress-b | 配置HTTP/80重定向到HTTPS/443 | 2 |
| 3 | 规则D(host: d.com, path: /D) | ingress-d | 80端口HTTP转发 | 未配置 |
查看ELB的443监听器上的转发策略优先级,此时转发策略顺序依次为:
| 转发规则优先级 | 规则 | 所属Ingress | 说明 | 对应的ingress-order |
|---|---|---|---|---|
| 1 | 规则B(host: b.com, path: /B) | ingress-b | 配置HTTP/80重定向到HTTPS/443 | 2 |
| 2 | 规则C(host: c.com, path: /C) | ingress-c | 443端口HTTPS转发 | 3 |
若需调重定向规则的优先级,示例如下:
- 将80端口的ingress-a调整到ingress-b后面
更新ingress-a的YAML,将kubernetes.io/elb.ingress-order从1改为3:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-a namespace: default annotations: kubernetes.io/elb.port: '80' # 对接的ELB端口 kubernetes.io/elb.id: fef427e4-6d2c-4c63-bf26-270daa****** # 已有ELB的ID kubernetes.io/elb.class: performance # 已有ELB的类型,该功能仅支持performance kubernetes.io/elb.ingress-order: '3' # 由1调整为3 spec: rules: - host: 'a.com' http: paths: - path: /A # 定义转发规则A backend: # 该规则对应的后端Service,示例可进行替换 service: name: service1 port: number: 80 property: ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH pathType: ImplementationSpecific ingressClassName: cce查看ELB的80监听器上的转发策略优先级:
转发规则优先级
规则
所属Ingress
说明
对应的ingress-order
1
规则B(host: b.com, path: /B)
ingress-b
配置HTTP/80重定向到HTTPS/443
2
2
规则A(host: a.com, path: /A)
ingress-a
80端口HTTP转发
3
3
规则D(host: d.com, path: /D)
ingress-d
80端口HTTP转发
未配置
- 将443端口的ingress-c放到ingress-b前面
更新ingress-c的YAML,将kubernetes.io/elb.ingress-order从3改为1:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-c namespace: default annotations: kubernetes.io/elb.port: '443' # 对接的ELB端口 kubernetes.io/elb.id: fef427e4-6d2c-4c63-bf26-270daa****** # 已有ELB的ID kubernetes.io/elb.class: performance # 已有ELB的类型,该功能仅支持performance kubernetes.io/elb.ingress-order: '1' # 不同Ingress间的转发规则优先级 kubernetes.io/elb.tls-certificate-ids: fd12a22d3ea64ae697066b78d9******,e981aee11f074c8d89c8eaa023****** spec: rules: - host: 'c.com' http: paths: - path: /C # 定义转发规则C backend: # 该规则对应的后端Service,示例可进行替换 service: name: service1 port: number: 80 property: ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH pathType: ImplementationSpecific ingressClassName: cce查看ELB的443监听器上的转发策略优先级:
转发规则优先级
规则
所属Ingress
说明
对应的ingress-order
1
规则C(host: c.com, path: /C)
ingress-c
443端口HTTPS转发
1
2
规则B(host: b.com, path: /B)
ingress-b
配置HTTP/80重定向到HTTPS/443
2
示例2:重定向场景下未配置ingress-order
例如,有三个Ingress资源(ingress-a,ingress-b,ingress-c),共用一个独享型ELB。
| Ingress | ingress-order值 | 端口 | 规则 | 说明 |
|---|---|---|---|---|
| ingress-a | 未配置 | 80→443 | 规则A(host: a.com, path: /A) | 配置HTTP/80重定向到HTTPS/443 |
| ingress-b | 1 | 80 | 规则B(host: b.com, path: /B) | 80端口HTTP转发 |
| ingress-c | 2 | 80 | 规则C(host: c.com, path: /C) | 80端口HTTP转发 |
创建成功截图示例如下。

查看ELB的80监听器上的转发策略优先级:
| 转发规则优先级 | 规则 | 所属Ingress | 说明 | 对应的ingress-order |
|---|---|---|---|---|
| 1 | 规则A(host: a.com, path: /A) | ingress-a | 配置HTTP/80重定向到HTTPS/443 | 未配置 |
| 2 | 规则B(host: b.com, path: /B) | ingress-b | 80端口HTTP转发 | 1 |
| 3 | 规则C(host: c.com, path: /C) | ingress-c | 80端口HTTP转发 | 2 |

