GKE中使用ingress-nginx内部控制器遇IngressClass验证错误求助
排查IngressClass "nginx-internal" 找不到的问题
1. 确认IngressClass资源是否存在
首先检查集群中是否存在名为nginx-internal的IngressClass对象:
kubectl get ingressclass
如果输出中没有nginx-internal,说明部署内部控制器时未创建对应的IngressClass资源,需要调整部署配置。
2. 修正内部控制器的Helm部署参数
部署内部ingress-nginx控制器时,必须显式配置IngressClass相关参数,确保创建nginx-internal类:
关键配置项(Helm values):
controller: # 启用并指定IngressClass名称 ingressClass: enabled: true name: nginx-internal # GCP内部LB专属注解,确保创建内部负载均衡器 service: annotations: cloud.google.com/load-balancer-type: "Internal" # 可选:指定控制器仅监听该IngressClass(避免干扰外部控制器) watchIngressClass: "nginx-internal"
重新部署内部控制器:
helm upgrade --install ingress-nginx-test-internal ingress-nginx/ingress-nginx \ --namespace <你的命名空间> \ -f internal-values.yaml
3. 验证Ingress资源的IngressClass配置
确保你的Ingress资源使用正确的字段指定IngressClass,避免使用旧版annotation:
正确的Ingress配置示例:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: example-internal-ingress namespace: <你的命名空间> spec: ingressClassName: nginx-internal # 这里必须匹配IngressClass的name rules: - host: internal.example.com http: paths: - path: / pathType: Prefix backend: service: name: example-service port: number: 80
4. 检查内部控制器日志
查看内部控制器的日志,确认是否成功加载nginx-internal IngressClass:
kubectl logs -n <你的命名空间> -l app.kubernetes.io/component=controller -l app.kubernetes.io/instance=ingress-nginx-test-internal | grep -i "ingressclass"
如果日志中出现类似Successfully loaded IngressClass nginx-internal的信息,说明控制器已识别该类;若没有,检查控制器的启动参数是否包含--watch-ingress-class=nginx-internal。
内容的提问来源于stack exchange,提问作者Fernando Barrera Melchor
相关产品推荐
相关产品推荐

