将所有TCP和UDP端口从负载均衡器转发到Azure Kubernetes Service上的Nginx入口

时间:2019-11-27 01:59:54

标签: azure nginx kubernetes

我正在尝试使用kubernetes实现TCP / UDP网关,我想动态打开和关闭许多端口。

详细过程如下:

  • 我们有一个运行中的容器(containerA),该容器在端口8080上接受传入的TCP连接
  • 我们有一个IP 1.1.1.1的负载均衡器,端口9091指向nginx入口
  • Nginx Ingress将使用TCP configmap管理负载均衡器和containerA之间的连接
  • Loadbalancer 1.1.1.1:9091-> nginx tcp流9091->后端容器一个端口8080
  • 当新客户到来时,我们将提供一个具有相同端口8080的新容器(containerB)
  • 我们将向负载均衡器添加一个新端口(端口9092)
  • Loadbalancer 1.1.1.1:9092-> nginx tcp流9092->后端容器B端口8080
  • 重复为新客户端添加端口

用于TCP连接的nginx入口配置图如下:

apiVersion: v1
data:
  "9091": default/php-apache1:8080
  "9092": default/php-apache2:8080
  "9093": default/php-apache3:8080
  "9094": default/php-apache4:8080
kind: ConfigMap

摘录自Nginx入口部署yaml:

        ports:
        - containerPort: 9091
          hostPort: 9091
          name: 9091-tcp
          protocol: TCP
        - containerPort: 9092
          hostPort: 9092
          name: 9092-tcp
          protocol: TCP

我能够打开特定的TCP / UDP端口,并且一切正常,但是现在我有两个难题:

  • 在yaml文件上一一添加所有端口效率低下且难以管理
  • 通过修改Deployment yaml文件添加新端口(例如TCP / 9091),将导致现有Pod重新启动。时不时地添加新端口时,这种行为是不受欢迎的

根据我的观察,当将新端口添加到nginx tcp configmap中时,更改将成功重新加载,并且无需重新启动即可打开端口。问题是,除非您修改端口并将其添加到部署yaml中,否则端口尚未正确路由,从而导致pod重新启动。

我的问题是

  1. 是否可以仅添加路由规则,以使nginx pod不必重启?

  2. 是否可以将来自负载均衡器的所有端口直接路由到Azure Kubernetes服务下的NGINX入口

  3. 关于我的用例的其他建议

1 个答案:

答案 0 :(得分:0)

除非我读错了这个问题,(本质上)是:是否可以在不重新启动Pod的情况下编辑部署?

答案是否定的。如果您需要编辑部署-它将重新启动Pod。

但是我看不出问题出在哪里,它们并没有同时全部重启。应该不会有性能下降