我如何在 kubernetes 中创建多个 nginx 入口控制器
How can i create mutiple nginx ingress controller in kubernetes
我的 kubernetes 集群中有 2 个命名空间,一个名为 first-nginx
,另一个名为 second-nginx
。我正在使用图表 ingress-nginx.. NOT stable/nginx-ingress 因为现在已弃用。
我正在尝试安装多个 nginx 控制器,因为我需要它们通过 GKE 中已创建的静态 ip 公开。我已经像这样在 first-nginx 命名空间中成功安装了我的第一个图表
helm install nginx-ingress ingress-nginx/ingress-nginx --namespace first-nginx --set ingress-class="nginx-devices --set controller.service.loadBalancerIP={first-IP-address}"
我现在正尝试在第二个命名空间中做同样的事情,就像这样
helm install nginx-ingress-2 ingress-nginx/ingress-nginx --namespace second-nginx --set ingress-class="nginx-devices --set controller.service.loadBalancerIP={second-IP-address}"
但是我收到如下所示的错误。
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 "nginx-ingress-2": current
value is "nginx-ingress"; annotation validation error: key
"meta.helm.sh/release-namespace" must equal "second-nginx": current
value is "first-nginx"
我该如何解决这个问题?当我使用 stable/nginx-ingress 图表时,这似乎有效,我可以在其中执行类似 helm install nginx-ingress-devices stable/nginx-ingress --namespace second-nginx --set controller.ingressClass="nginx-devices"
的操作
如何使用 ingress-nginx
实现同样的效果
您应该使用 controller.ingressClassResource.name
为它们设置不同的入口 class 名称
您需要为第二个 ingress-nginx 定义额外的 controller.ingressClassResource.controllerValue
,以便当入口资源引用此 class 时,它知道要使用哪个控制器。
helm install nginx-ingress-devices ingress-nginx/ingress-nginx \
--namespace second-nginx \
--set controller.ingressClassResource.name=second-nginx \
--set controller.ingressClassResource.controllerValue="k8s.io/second-nginx" \
--set controller.ingressClassResource.enabled=true \
--set controller.ingressClassByName=true
我的 kubernetes 集群中有 2 个命名空间,一个名为 first-nginx
,另一个名为 second-nginx
。我正在使用图表 ingress-nginx.. NOT stable/nginx-ingress 因为现在已弃用。
我正在尝试安装多个 nginx 控制器,因为我需要它们通过 GKE 中已创建的静态 ip 公开。我已经像这样在 first-nginx 命名空间中成功安装了我的第一个图表
helm install nginx-ingress ingress-nginx/ingress-nginx --namespace first-nginx --set ingress-class="nginx-devices --set controller.service.loadBalancerIP={first-IP-address}"
我现在正尝试在第二个命名空间中做同样的事情,就像这样
helm install nginx-ingress-2 ingress-nginx/ingress-nginx --namespace second-nginx --set ingress-class="nginx-devices --set controller.service.loadBalancerIP={second-IP-address}"
但是我收到如下所示的错误。
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 "nginx-ingress-2": current value is "nginx-ingress"; annotation validation error: key "meta.helm.sh/release-namespace" must equal "second-nginx": current value is "first-nginx"
我该如何解决这个问题?当我使用 stable/nginx-ingress 图表时,这似乎有效,我可以在其中执行类似 helm install nginx-ingress-devices stable/nginx-ingress --namespace second-nginx --set controller.ingressClass="nginx-devices"
如何使用 ingress-nginx
实现同样的效果您应该使用 controller.ingressClassResource.name
为它们设置不同的入口 class 名称
您需要为第二个 ingress-nginx 定义额外的 controller.ingressClassResource.controllerValue
,以便当入口资源引用此 class 时,它知道要使用哪个控制器。
helm install nginx-ingress-devices ingress-nginx/ingress-nginx \
--namespace second-nginx \
--set controller.ingressClassResource.name=second-nginx \
--set controller.ingressClassResource.controllerValue="k8s.io/second-nginx" \
--set controller.ingressClassResource.enabled=true \
--set controller.ingressClassByName=true