文档首页/ 云容器引擎 CCE/ 常见问题/ 网络管理/ 网络指导/ 如何确认监听器配置生效的Ingress
更新时间:2024-11-13 GMT+08:00

如何确认监听器配置生效的Ingress

CCE支持将多个Ingress对接到同一个ELB的监听器,并创建不同的转发策略。由于监听器配置参数通过annotation方式承载,因此可能存在同一个监听器配置在多个Ingress上有不同配置参数的场景。本文为您介绍如何确认监听器配置生效Ingress。

  • 如何获取首路由
  • 监听器证书配置及更新说明
  • 首路由删除对监听器配置影响及配置同步

如何获取首路由

由于对接同监听器的路由(Ingress)均可配置监听器参数,因此CCE采取首个创建的Ingress(简称首路由)上的annotation监听器配置(除SNI证书外)。首路由为通过Ingress的metadata.createTimestamp字段进行升序排列后的第一条路由。

  • v1.21.15-r0、v1.23.14-r0、v1.25.9-r0、v1.27.6-r0、v1.28.4-r0、v1.29.1-r0及以上版本集群将首路由信息写入了annotation,可以查看已有ingress的annotation中的kubernetes.io/elb.listener-master-ingress确认:

  • v1.21.15-r0、v1.23.14-r0、v1.25.9-r0、v1.27.6-r0、v1.28.4-r0、v1.29.1-r0以下的老版本集群需通过kubectl命令,获取关联同一ELB监听器下的ingress,并按时间顺序进行升序排列,第一条即为首路由。

    快速查询命令如下,请替换想要查询的ELB ID和端口。

    elb_id=${1}
    elb_port=${2}
    kubectl get ingress --all-namespaces --sort-by='.metadata.creationTimestamp' -o=custom-columns=Name:'metadata.name',Namespace:'metadata.namespace',elbID:'metadata.annotations.kubernetes\.io\/elb\.id',elbPort:'metadata.annotations.kubernetes\.io\/elb\.port',elbPorts:'metadata.annotations.kubernetes\.io\/elb\.listen-ports' | awk 'NR==1 {print; next} {if ($5 != "<none>") $4 = "<none>"; print}' | grep -E "^Name|${elb_id}" | grep -E "^Name|${elb_port}" | awk '{printf "%-30s %-30s %-38s %-10s %-10s\n", $1, $2, $3, $4, $5}'

    输出如下:第一列为路由名称,第二列为路由命名空间,第三列为ELB ID,第四列为监听器端口号,第五列为多监听器端口号。(设置有多监听器端口号时,替代监听器端口号生效)

    Name             Namespace   elbID                                  elbPort   elbPorts
    ingress-first    default     be56202a-c2cb-40d5-900e-d7a007a4b054   443       <none>
    ingress-second   default     be56202a-c2cb-40d5-900e-d7a007a4b054   443       <none>
    ingress-third    test        be56202a-c2cb-40d5-900e-d7a007a4b054   443       <none>

监听器证书配置及更新说明

当前支持在集群中使用以下方式配置Ingress证书:

  • 使用TLS类型的密钥证书:由Secret承载证书内容,证书内容在CCE侧维护,并自动在ELB侧进行证书的创建、更新或删除。配置在ingress的spec.tls字段下。
  • 使用ELB服务中的证书:直接使用ELB服务中创建的证书,证书内容在ELB侧维护。配置在ingress的annotation字段下。

    ELB服务器证书将证书维护在ELB侧,无需将证书内容导入Secret,实现了跨命名空间配置的统一。因此建议通过ELB服务器证书方式来为ingress配置证书。

    ELB服务器证书支持集群版本:v1.19.16-r2、v1.21.5-r0、v1.23.3-r0。

首路由删除对监听器配置影响

监听器配置仅能在首路由配置上生效(SNI证书例外),首路由删除后,将顺延选取未删除的ingress中创建时间最早的成为首路由,并以新的首路由上的监听器配置进行更新。因此若新老首路由的监听器配置不一致,可能导致ELB侧非预期更新,请确认即将成为首路由的监听器配置是否与原首路由一致或是否符合预期。

  • 您可以在控制台页面中进行监听器配置同步,步骤如下:
    1. 登录CCE控制台,单击集群名称进入集群。
    2. 选择左侧导航栏的“服务”,在右侧选择“路由”页签,单击对应路由“更多 > 更新”选项。
    3. 当路由监听器配置与ELB不一致时,将提供同步选项。单击“点击同步”,即可自动同步服务器证书。

      在同步服务器证书和SNI证书时,如果当前路由使用“TLS密钥”,将被更改为ELB服务器证书。若集群为不支持ELB服务器证书的版本(低于v1.19.16-r2、v1.21.5-r0、v1.23.3-r0),则需通过YAML手动同步

    4. 单击“确定”,下发更新配置。
  • 通过YAML手动同步
    1. 查看如何获取首路由中的快速查询命令,获取对接同一监听器的所有路由。
      Name             Namespace   elbID                                  elbPort   elbPorts
      ingress-first    default     be56202a-c2cb-40d5-900e-d7a007a4b054   443       <none>
      ingress-second   default     be56202a-c2cb-40d5-900e-d7a007a4b054   443       <none>
      ingress-third    test        be56202a-c2cb-40d5-900e-d7a007a4b054   443       <none>
    2. 假设即将删除ingress-first和ingress-second,则需要将ingress-first的监听器配置同步至ingress-third的annotation中。

      若监听器服务器证书是通过TLS密钥方式创建,需要将记录在ingress的spec.tls下的配置信息同步至ingress-third中。

      apiVersion: networking.k8s.io/v1
      kind: Ingress
      metadata:
        name: ingress-first
        namespace: default
        ...
      spec:
        tls:
          - secretName: default-ns-secret-1
          - hosts:
              - 'example.com'
            secretName: default-ns-secret-2
      ...