您可以为每个命名空间部署一个专用的 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 控制器,并且不会受到部署到其他命名空间的 Ingress 控制器重启的影响(包括默认的:ingressClass=nginx)。
请记住,部署新的 Ingress 控制器可能会导致配置新的“物理”负载均衡器(为您的云提供商每月账单增加额外的 $$),因此仅对受到严重影响的服务进行操作是值得的由于连接断开(流式传输、WebSockets 等),设计良好的 REST 服务不应受到短暂 Ingress 重启的严重影响。