根据我的理解,我们可以使用Ingress类注释在集群中使用多个Nginx入口控制器。但我有一个用例,需要在同一个命名空间中使用多个入口控制器,以使用创建的相应入口规则在同一命名空间中公开不同的服务。我跟随https://kubernetes.github.io/ingress-nginx/deploy/#azure以创建样本入口控制器。如果我想在同一个命名空间中有多个Nginx入口控制器,我应该修改哪些参数。
提前感谢
从你的帖子中还不清楚你是打算部署多个nginx入口控制器还是不同的入口控制器。但是,两者都可以部署在同一个命名空间中。
在部署不同入口控制器的情况下,应该很容易在同一命名空间中部署,并使用类注释来指定哪个入口规则由哪个入口控制器处理。然而,如果你想在同一个命名空间中部署多个nginx入口控制器,你就必须使用更新名称/标签或其他标识符来获得不同的东西。
E.g-你提到的链接,https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.47.0/deploy/static/provider/cloud/deploy.yaml,需要更新为-
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
helm.sh/chart: ingress-nginx-3.33.0
app.kubernetes.io/name: ingress-nginx-internal
app.kubernetes.io/instance: ingress-nginx-internal
app.kubernetes.io/version: 0.47.0
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/component: controller
name: ingress-nginx-internal
namespace: ingress-nginx
automountServiceAccountToken: true
假设我们将第二个nginx入口控制器称为入口nginx内部;同样,在链接中创建的所有资源都需要修改,并将它们部署在同一个命名空间中。
此外,您必须更新部署参数以指定ingress.class,您的控制器将以-为目标
spec:
template:
spec:
containers:
- name: nginx-ingress-internal-controller
args:
- /nginx-ingress-controller
- '--ingress-class=nginx-internal'
- '--configmap=ingress/nginx-ingress-internal-controller'
链接https://kubernetes.github.io/ingress-nginx/user-guide/multiple-ingress/解释了如何控制多个入口控制器。
我在AKS(K8s版本1.22.4(上遇到过这样的问题。我有两个Nginx入口控制器,内部和外部。在为每个选举指定一个唯一的选举id之后,问题就得到了解决。
这篇文章可能有助于:https://stackoverflow.com/a/72591382/4049017