【问题标题】:How to avoid restarting/dropping all connections when a new ingress is added?添加新入口时如何避免重新启动/断开所有连接?
【发布时间】:2018-12-07 13:27:57
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: nginx kubernetes google-kubernetes-engine nginx-ingress


    【解决方案1】:

    您可以为每个命名空间部署一个专用的 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 重启的严重影响。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-23
      • 2020-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-14
      • 2014-11-27
      • 2021-07-18
      相关资源
      最近更新 更多