0

我有一个集群,其中多个项目部署在不同的命名空间下。

nginx-ingress在集群上安装了helm,并且为每个项目部署了一个新的ingress。

问题是当添加一个新项目时,即创建一个新的命名空间并添加多个部署+入口服务,nginx重新启动并断开所有连接,中断所有其他命名空间中的服务。

似乎即使nginx-ingress 服务在项目命名空间中,nginx-ingress pod也是在默认命名空间中共享的。因此,我想知道是否有一种方法可以将nginx-ingresspod 专用于每个命名空间,因此更改一个命名空间的配置不会破坏整个集群?

4

1 回答 1

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 控制器,并且不会受到部署到其他命名空间的 Ingress 控制器重启的影响(包括默认的:ingressClass=nginx)。

请记住,部署新的 Ingress 控制器可能会导致配置新的“物理”负载均衡器(为您的云提供商每月账单增加额外的 $$),因此仅对受到严重影响的服务进行操作是值得的由于连接断开(流式传输、WebSockets 等),设计良好的 REST 服务不应受到短暂 Ingress 重启的严重影响。

于 2019-09-18T07:08:13.037 回答