我有一个群集,其中多个项目部署在不同的名称空间下。
nginx-ingress
在集群上安装了头盔,并为每个项目部署了一个新的入口。
问题在于添加新项目时,即创建新的名称空间并添加多个部署+入口服务时,nginx
重新启动并删除所有连接,从而破坏了所有其他名称空间中的服务。
看来,即使nginx-ingress
服务在项目名称空间中,nginx-ingress
pods 仍在默认名称空间中共享。因此,我想知道是否有一种方法可以将nginx-ingress
Pod专用于每个名称空间,因此更改一个名称空间的配置不会破坏整个集群吗?
答案 0 :(得分:2)
您可以为每个命名空间部署专用的Ingress控制器(使用Helm图表:https://github.com/helm/charts/tree/master/stable/nginx-ingress和自定义ingressClass)
controller.ingressClass name of the ingress class to route through this controller
,然后使用适当的Ingress注释加以利用:
metadata:
name: fooA
annotations:
kubernetes.io/ingress.class: "namespaceA"
metadata:
name: fooB
annotations:
kubernetes.io/ingress.class: "namespaceB"
metadata:
name: fooC
annotations:
kubernetes.io/ingress.class: "namespaceC"
因此,名称空间 namespaceA 中的所有Pod都使用专用的 namespaceA Ingress控制器,并且不会受到重新部署到其他名称空间(包括默认值: ingressClass = nginx )。
请记住,部署新的Ingress控制器可能会导致配置新的“物理”负载平衡器(向云提供商的每月账单增加额外的$$$),因此仅使用以下服务才值得受到连接断开(流,WebSocket等)的严重影响,设计良好的REST服务不应因短暂的Ingress重新启动而受到严重影响。