【发布时间】:2017-05-06 23:52:41
【问题描述】:
我在 Google Container Engine 上部署了一个容器,它运行良好。现在,我要公开它。
此应用程序是一个侦听 2 个端口的服务。使用 kubectl Expose 部署,我创建了 2 个负载均衡器,每个端口一个。
我制作了 2 个负载均衡器,因为 kubectl expose 命令似乎不允许超过一个端口。虽然我在 kubectl 上将其定义为 type=LoadBalancer,但一旦在 GKE 上创建它们,它们就被定义为与同样由 kubectl 创建的 2 个目标池相关联的转发规则。 kubectl 还自动为每个平衡器制定防火墙规则。
我所做的第一个公开了应用程序。我能够与应用程序通信并获得响应。
第二个根本没有连接。我不断收到连接被拒绝或连接超时。为了解决这个问题,我进一步剥离了我的防火墙规则,以尽可能宽容地解决这个问题。由于允许 ICMP,默认情况下,ping 此平衡器的 ip 会导致回复。
kubernetes 是否只允许一个负载均衡器工作,即使可以配置多个?如果重要的话,工作平衡器的外部 ip 在模式 35.xxx.xxx.xxx 中,而不工作的平衡器的 ip 是 107.xxx.xxx.xxx。
作为一个附带问题,有没有一种方法可以使用 kubectl expose --port 公开多个端口,而不定义范围,即我只需要 2 个端口?
最后,我尝试使用 Google 控制台,但我无法让负载均衡器或转发规则与 kubernetes 上的内容一起工作,就像在 kubectl 上做的那样。
这是我使用的命令,第二次使用修改端口和服务名:
kubectl expose deployment myapp --name=my-app-balancer --type=LoadBalancer --port 62697 --selector="app=my-app"
我的防火墙规则基本上设置为允许所有超过 0.0.0.0/0 的传入 TCP 连接。
编辑: 外部IP与它无关。我一直在删除和重新创建平衡器,直到我获得了工作平衡器的 xxx.xxx.xxx.xxx 的 IP,并且平衡器仍然可以正常工作。
我还尝试删除正常工作的平衡器并重新创建不工作的平衡器,以查看平衡器之间是否存在冲突。第二个平衡器仍然无法工作,即使它是唯一一个在运行。
我目前正在研究我的应用程序的第二个服务的代码,尽管它实际上与第一个服务相同,即侦听定义端口的简单 ServerSocket 实现。
【问题讨论】:
标签: java kubernetes google-kubernetes-engine