GKE 不能再有多个入口 nginx 了吗?

GKE Can't have multiple ingress nginx anymore?

过去我使用以下方式安装它们:

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update

helm install ingress-nginx-01 ingress-nginx/ingress-nginx

并且可以有多个。

现在,当我尝试安装另一个时出现此错误:

Error: rendered manifests contain a resource that already exists. Unable to continue with
install: IngressClass "nginx" in namespace "" exists and cannot be imported into the
current release: invalid ownership metadata; annotation validation error: key
"meta.helm.sh/release-name" must equal "ingress-nginx-02": current value is
"ingress-nginx-01"; annotation validation error: key
"meta.helm.sh/release-namespace" must equal "ingress-02": current value is "ingress-01"

您必须在重新安装新的 Nginx 入口控制器时设置 Class 名称

例如:

helm install stable/nginx-ingress --set controller.ingressClass=gce --namespace kube-system --set controller.replicaCount=2 --set rbac.create=false
helm install stable/nginx-ingress --set controller.ingressClass=nginx --namespace kube-system --set controller.replicaCount=2 --set rbac.create=false
helm install stable/nginx-ingress --set controller.ingressClass=third --namespace kube-system --set controller.replicaCount=2 --set rbac.create=false

根据您的 helm 版本,您可以像 ingress-nginx-01ingress-nginx-02 一样传递 Helm 的名称,但主要是 class 名称:--set controller.ingressClass=gce

如错误所述

install: IngressClass "nginx" in namespace "" exists**strong text**

多个 Ingress 控制器

如果您是 运行 多个入口控制器或 运行 在本机处理入口的云提供商(例如 GKE 上,您需要指定在您希望 ingress-nginx 控制器声明的所有入口中注释 kubernetes.io/ingress.class: "nginx"

例如,

metadata:
  name: foo
  annotations:
    kubernetes.io/ingress.class: "gce"

将针对 GCE 控制器,强制 Nginx 控制器忽略它,而像

这样的注解
metadata:
  name: foo
  annotations:
    kubernetes.io/ingress.class: "nginx"

将以 nginx 控制器为目标,强制 GCE 控制器忽略它。

示例:https://kubernetes.github.io/ingress-nginx/user-guide/multiple-ingress/

参考:https://vincentlauzon.com/2018/11/28/understanding-multiple-ingress-in-aks/