云容器引擎 CCE-nginx-ingress插件升级检查:问题根因

时间:2023-12-26 21:31:16

问题根因

NGINX Ingress控制器插件基于开源社区Nginx Ingress Controller的模板与镜像。

对于社区较老版本的Nginx Ingress Controller来说(社区版本v0.49及以下,对应CCE插件版本v1.x.x),在创建Ingress时没有指定Ingress类别为nginx,即annotations中未添加kubernetes.io/ingress.class: nginx的情况,也可以被Nginx Ingress Controller纳管。详情请参见社区代码

但对于较新版本的Nginx Ingress Controller来说(社区版本v1.0.0及以上,对应CCE插件版本2.x.x),如果在创建Ingress时没有显示指定Ingress类别为nginx,该资源将被Nginx Ingress Controller忽略,Ingress规则失效,导致服务中断。详情请参见请参见社区代码

社区相关PR链接为:https://github.com/kubernetes/ingress-nginx/pull/7341

目前有两种方式指定Ingress类别:

  • 通过annotations指定,为Ingress资源添加annotations(kubernetes.io/ingress.class: nginx)。
  • 通过spec指定,.spec.ingressClassName字段配置为nginx。但需要配套具有IngressClass资源。

示例如下:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: test
  namespace: default
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  ingressClassName: nginx
  rules:
    …
status:
  loadBalancer: {}
support.huaweicloud.com/usermanual-cce/cce_10_0508.html