首页 文章

Kubernetes:暴露的部署无法访问的服务

提问于
浏览
0

我在Google容器引擎上部署了一个容器,运行正常 . 现在,我想公开它 .

此应用程序是一个侦听2个端口的服务 . 使用kubectl公开部署,我创建了2个负载 balancer 器,每个端口一个 .

我制作了2个负载 balancer 器,因为kubectl expose命令似乎不允许多个端口 . 虽然我在kubectl上将其定义为 type=LoadBalancer ,但是一旦在GKE上创建了它们,它们就被定义为与2个目标池相关联的转发规则,这些规则池也是由kubectl创建的 . kubectl还自动为每个 balancer 器制定防火墙规则 .

我做的第一个应用程序暴露了应用程序 . 我能够与应用程序通信并获得响应 .

第二个根本没有连接 . 我一直得到连接拒绝或连接超时 . 为了解决这个问题,我进一步剥离了我的防火墙规则,尽可能地允许解决这个问题 . 由于允许使用ICMP,因此默认情况下,ping此 balancer 器的ip会导致回复 .

kubernetes是否只允许一个负载均衡器工作,即使可以配置多个负载均衡器?如果重要的是,工作 balancer 器的外部IP是35.xxx.xxx.xxx模式,并且不工作的 balancer 器的IP是107.xxx.xxx.xxx .

作为一个附带问题,有没有办法使用kubectl expose --port暴露多个端口,而不定义范围,即我只需要2个端口?

最后,我尝试使用谷歌控制台,但我无法获得负载均衡器,或转发规则来处理kubernetes上的内容,就像在kubectl上做的那样 .

这是我使用的命令,在第二次使用时修改端口和服务名称:

kubectl expose deployment myapp --name=my-app-balancer --type=LoadBalancer --port 62697 --selector="app=my-app"

我的防火墙规则基本上设置为允许所有传入的TCP连接超过0.0.0.0/0 .

Edit: 外部IP与它无关 . 我一直在删除和重新创建 balancer 器,直到我为工作 balancer 器提供了xxx.xxx.xxx.xxx的IP,并且 balancer 器仍然正常工作 .

我也尝试删除工作 balancer 器并重新创建一个不起作用的 balancer 器,看看它是否是 balancer 器之间的冲突 . 第二个 balancer 器仍然没有工作,即使它是唯一运行的 balancer 器 .

我正在调查我的应用程序的第二个服务的代码,虽然它几乎与第一个服务相同,一个简单的ServerSocket实现,它侦听已定义的端口 .

1 回答

  • 1

    经过更彻底的调查(在运行的pod中打开控制台,安装tcpdump,iptables等)后,我发现该服务(即负载均衡器)实际上是可以访问的 . 在这种情况下发生的情况是,虽然流量到达容器的虚拟网络interfrace(eth0),但数据未被路由到侦听服务,即使这些是接口的ip别名(eth0:1,eth0:2) .

    实现此目的的最后一步是创建所需的路由

    iptables -t nat -A PREROUTING -p tcp -i eth0 --dport <listener-ip> -j DNAT --to-destination <listener-ip>
    

    注意,还有其他方法可以实现这一点,但这是我选择的方法 . 我希望Docker / Kubernetes文档提到这一点 .

相关问题