更新时间:2025-08-19 GMT+08:00

为ELB Ingress配置转发规则优先级

Ingress使用同一个ELB监听器时,支持按照以下规则进行转发规则优先级排序:

  • 同一个Ingress的转发规则排序:可使用“kubernetes.io/elb.rule-priority-enabled”注解,设置为“true”时,根据Ingress YAML里paths字段下定义的转发规则顺序进行排序,配置靠前的优先级高;未配置该注解时,同一个Ingress的转发规则会遵循ELB侧的排序规则
  • 不同Ingress的转发规则排序:可使用“kubernetes.io/elb.ingress-order”注解的优先级进行排序,且默认开启同一个Ingress的转发规则排序(即同时设置“kubernetes.io/elb.rule-priority-enabled”注解为“true”),具体规则如下。
    • “kubernetes.io/elb.ingress-order”注解的参数取值范围为1~1000,参数值越小,表示优先级越高。
    • 具有“kubernetes.io/elb.ingress-order”注解的Ingress优先级较高,不具有该注解的Ingress优先级较低。
    • 如果多个Ingress都具有“kubernetes.io/elb.ingress-order”注解,则不同Ingress间先按注解值的大小排序,然后同一个Ingress的规则按照先后顺序排序。

未配置以上注解时,同一个ELB监听器下无论包含多个Ingress还是同一个Ingress的转发规则,都会使用ELB侧的排序规则

关于以上规则,您可以参考转发规则优先级设置示例了解更多场景化的示例。

图1 自定义转发规则优先级

前提条件

约束与限制

通过kubectl命令行配置

  1. 请参见通过kubectl连接集群,使用kubectl连接集群。
  2. 创建名为“ingress-test.yaml”的YAML文件,此处文件名可自定义。

    vi ingress-test.yaml

    以使用已有ELB为例,配置示例如下:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: test
      namespace: default
      annotations:
        kubernetes.io/elb.port: '88'    # 对接的ELB端口
        kubernetes.io/elb.id: 2c623150-17bf-45f1-ae6f-384b036f547e    # 已有ELB的ID
        kubernetes.io/elb.class: performance    # ELB的类型,该功能仅支持performance
        kubernetes.io/elb.ingress-order: '1'    # 不同Ingress间的转发规则优先级
        kubernetes.io/elb.rule-priority-enabled: 'true'   # 同一个Ingress的转发规则按照paths字段下的转发规则顺序进行排序
    spec:
      rules:
        - host: ''
          http:
            paths:
              - path: /test1  # 定义转发规则
                backend:  # 该规则对应的后端Service,示例可进行替换
                  service:
                    name: test1
                    port:
                      number: 8081
                property:
                  ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH
                pathType: ImplementationSpecific
              - path: /test2  # 定义转发规则
                backend:  # 该规则对应的后端Service,示例可进行替换
                  service:
                    name: test2
                    port:
                      number: 8081
                property:
                  ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH
                pathType: ImplementationSpecific
      ingressClassName: cce

    表1 转发规则优先级注解

    参数

    类型

    描述

    kubernetes.io/elb.ingress-order

    String

    不同Ingress间的转发规则排序,参数值越小表示优先级越高,且同一个监听器内规则优先级必须唯一,取值范围为1~1000。

    仅独享型ELB支持配置。

    说明:
    • 配置该注解时,默认开启“kubernetes.io/elb.rule-priority-enabled”注解,即同时对每个Ingress的转发规则进行排序。
    • kubernetes.io/elb.ingress-order注解中设置的优先级与ELB侧的转发策略优先级并不完全对应。该注解可对不同的Ingress进行排序:具有该注解的Ingress优先级较高,而多个Ingress都具有该注解时则按注解值的大小排序,参数值越小表示优先级越高。关于以上规则,您可以参考转发规则优先级设置示例了解更多场景化的示例。

    kubernetes.io/elb.rule-priority-enabled

    String

    仅支持设置为“true”,表示对同一个Ingress的转发规则进行排序,系统将会根据创建Ingress时的转发规则先后顺序确定优先级,配置在上面的优先级高。

    未开启该参数时,同一个Ingress的转发规则会使用ELB侧的默认排序,开启后则不允许关闭。

    仅独享型ELB支持配置。

  3. 创建Ingress。

    kubectl create -f ingress-test.yaml

    回显如下,表示Ingress服务已创建。

    ingress/ingress-test created

  4. 查看已创建的Ingress。

    kubectl get ingress

    回显如下,表示Ingress服务创建成功。

    NAME          CLASS    HOSTS     ADDRESS          PORTS   AGE
    ingress-test  cce      *         121.**.**.**     88      10s

转发规则优先级设置示例

假设当前已存在ingress-a的kubernetes.io/elb.ingress-order参数值设置为1,且该ingress-a存在规则A和规则B;Ingress B的kubernetes.io/elb.ingress-order参数值设置为2,该Ingress B存在规则C和规则D。