无法在 Azure k8s 集群中使用带有自定义类的 helm 创建第二个入口控制器

ike*_*him 11 nginx kubernetes kubernetes-ingress azure-aks nginx-ingress

我使用 Helm 和默认配置创建了一个入口控制器

default        nginx-ingress-controller        LoadBalancer   10.0.182.128   xx.xxx.xx.90     80:32485/TCP,443:31756/TCP   62m
default        nginx-ingress-default-backend   ClusterIP      10.0.12.39     <none>           80/TCP                       62m
Run Code Online (Sandbox Code Playgroud)

使用头盔:

helm install nginx-ingress stable/nginx-ingress \         
--set controller.replicaCount=2 \     
--set controller.nodeSelector."beta\.kubernetes\.io/os"=linux \
--set defaultBackend.nodeSelector."beta\.kubernetes\.io/os"=linux \
--set controller.service.loadBalancerIP="Created static IP" \
--set controller.service.annotations."service\.beta\.kubernetes\.io/azure-dns-label-name"="XXX-aks-ingress"
Run Code Online (Sandbox Code Playgroud)

该入口正在默认命名空间中运行。

现在,我想添加第二个入口控制器,从官方文档我有特定的入口类

helm install nginx-ingress stable/nginx-ingress \     
--namespace ingress-nginx-devices \ #I create this namespace first 
--set controller.ingressClass="nginx-devices" \   # custom class to use for different ingress resources  
--set controller.replicaCount=2 \     
--set controller.nodeSelector."beta\.kubernetes\.io/os"=linux \
--set defaultBackend.nodeSelector."beta\.kubernetes\.io/os"=linux \
--set controller.service.loadBalancerIP="A second static Ip address created before" \
--set controller.service.annotations."service\.beta\.kubernetes\.io/azure-dns-label-name"="serviceIot-aks-ingress-iot"
Run Code Online (Sandbox Code Playgroud)

但我不断收到此错误:

Error: rendered manifests contain a resource that already exists. Unable to continue with install: ClusterRole "nginx-ingress" in namespace "" exists and cannot be imported into the current release: invalid ownership metadata; annotation validation error: key "meta.helm.sh/release-namespace" must equal "ingress-nginx-devices": current value is "default"
Run Code Online (Sandbox Code Playgroud)

这里可能出了什么问题?如有任何帮助,我们将不胜感激:)

iam*_*991 13

就我而言,问题在于 ingressclass 已经存在。我只是删除了 ingressclass,它就像一个魅力。

# kubectl get ingressclass --all-namespaces
Run Code Online (Sandbox Code Playgroud)

这将返回已经存在的入口类的名称。就我而言,它是 nginx。删除该入口类。

# kubectl delete ingressclass nginx --all-namespaces
Run Code Online (Sandbox Code Playgroud)

验证 ingressclass 是否已删除

# kubectl get ingressclass --all-namespaces
No resources found
Run Code Online (Sandbox Code Playgroud)

重新运行 helm update 命令应该可以工作。

您还可以使用新的 ingressClassName 和 ingressClassResourceName 并行运行多个 ingrss 控制器。首先获取所有现有类名的列表。

kubectl get ingressclass --all-namespaces
NAME        CONTROLLER             PARAMETERS   AGE
nginx       k8s.io/ingress-nginx   <none>       203d
Run Code Online (Sandbox Code Playgroud)

使用此命令创建一个具有唯一 className 的新入口控制器。

helm install nginx-ingress stable/nginx-ingress \     
--namespace ingress-nginx-devices \ #I create this namespace first 
--set controller.ingressClass="nginx-devices" \   # custom class to use for different ingress resources 
--set controller.ingressClassResource.name="nginx-devices" # custom classResourceName   
--set controller.replicaCount=2 \     
--set controller.nodeSelector."beta\.kubernetes\.io/os"=linux \
--set defaultBackend.nodeSelector."beta\.kubernetes\.io/os"=linux \
--set controller.service.loadBalancerIP="A second static Ip address created before" \
--set controller.service.annotations."service\.beta\.kubernetes\.io/azure-dns-label-name"="serviceIot-aks-ingress-iot"
Run Code Online (Sandbox Code Playgroud)


Har*_*var 3

更新 :

\n

正在处理此ingressClass 的控制器的 Controller-值

\n

通过最近的更新,您可能必须使用controller.ingressClassByName

\n

官方文档:https ://github.com/kubernetes/ingress-nginx/tree/main/charts/ingress-nginx#values

\n
helm install nginx-ingress-devices stable/nginx-ingress \\     \n    --namespace ingress-nginx-devices \\ #I create this namespace first \n    --set controller.ingressClass="nginx-devices" \\   # custom class to use for different ingress resources  \n    --set controller.ingressClassResource.name="nginx-devices" \\\n    --set controller.replicaCount=2 \\     \n    --set controller.nodeSelector."beta\\.kubernetes\\.io/os"=linux \\\n    --set defaultBackend.nodeSelector."beta\\.kubernetes\\.io/os"=linux \\\n    --set controller.service.loadBalancerIP="A second static Ip address created before" \\\n    --set controller.service.annotations."service\\.beta\\.kubernetes\\.io/azure-dns-label-name"="serviceIot-aks-ingress-iot"\n
Run Code Online (Sandbox Code Playgroud)\n

旧答案

\n

你可以尝试一下,我们正在更改的是名称:nginx-ingress-devices而不是nginx-ingress

\n
helm install nginx-ingress-devices stable/nginx-ingress \\     \n--namespace ingress-nginx-devices \\ #I create this namespace first \n--set controller.ingressClass="nginx-devices" \\   # custom class to use for different ingress resources  \n--set controller.replicaCount=2 \\     \n--set controller.nodeSelector."beta\\.kubernetes\\.io/os"=linux \\\n--set defaultBackend.nodeSelector."beta\\.kubernetes\\.io/os"=linux \\\n--set controller.service.loadBalancerIP="A second static Ip address created before" \\\n--set controller.service.annotations."service\\.beta\\.kubernetes\\.io/azure-dns-label-name"="serviceIot-aks-ingress-iot"\n
Run Code Online (Sandbox Code Playgroud)\n

您收到的错误是由于已经存在同名的集群角色:nginx-ingress,因为您收到了错误。

\n
\n

ClusterRoleBindings 向用户、组或服务帐户授予跨整个群集的\nClusterRole\xe2\x80\x99s 权力。

\n
\n

您可以在此处获取参考文件:https://github.com/helm/charts/blob/master/stable/nginx-ingress/templates/clusterrole.yaml

\n