openshift集群外部的节点无法访问集群内部的Pod

时间:2018-12-12 03:15:54

标签: openshift iptables sdn

请注意,我有三个节点(A,B,C),其IP为172.18.143.115, 172.18.143.117, 172.18.143.124

A和B是使用ovs-sdn作为其网络插件的openshift集群,pod网络为10.130.0.0/16,服务ip范围为172.30.0.0/16。节点B中有一个Pod P({10.130.3.249:8002),对应的是 服务S(172.30.148.77:8002)。

我可以在节点A或B中卷曲S,但不能在节点C中卷曲S 所以我添加了一条路由,例如dst_ip是P然后转到节点A或B。 然后发生奇怪的事情,如果路线指向B,我可以卷曲S,否则如果 路线指向A,我不能卷曲S。

通过tcpdump,我发现Pod P通过其veth向节点C返回了一个TCP ACK数据包, 然后根据OVS中的流将此数据包输出到tun0,根据路由应由ens192(网络接口)发送,因为其dst_ip是节点C,但我无法通过tcpdump将其捕获到ens192上,这似乎数据包被丢弃。为什么会这样?

1 个答案:

答案 0 :(得分:0)

默认情况下,流量仅在群集内路由,因此,如果C上的应用程序不属于群集,则A / B节点与C之间将无法进行入口和出口。这全部由应用程序的控制服务配置。

要从群集外部路由进出流量,您需要配置应用程序的服务。一种简单的方法是使用LoadBalancer类型的服务。

您还可以使用NodePort类型的服务,它将在所有节点上的30000-32767范围内的映射端口上公开该服务。

最后,您可以为服务分配External IP,以允许外部流量进入群集。

希望这会有所帮助!