注意,我有三个节点(A、B、C),它们的I是172.18.143.115, 172.18.143.117, 172.18.143.124。
A、B为ovs-sdn为网络拉取的openshift集群,pod网络为10.130.0.0/16,业务网段为172.30.0.0/16。在节点B中存在pod P(10.130.3.249:8002)和对应的服务S(172.30.148.77:8002)。
我可以在节点A或B中卷曲S,但不能在节点C中卷曲,所以我添加了一条路由,如果dst_ip是P,则转到节点A或B。然后奇怪的事情发生了,如果路由指向B,我可以卷曲S,否则如果路由指向A,我不能卷曲S。
通过tcpdump,我发现pod P通过它的veth返回一个TCP ACK包到node C,然后这个包按照OVS中的流量输出到tun0,按照它的dst_ip是node C应该由ens192 (网络接口)发送的路由,但是我用tcpdump在ens192上抓不到它,看起来这个包被丢弃了。为什么会发生这种情况?
发布于 2018-12-13 01:50:09
默认情况下,流量只在集群内路由,所以如果C上的应用程序不是集群的一部分,那么A/B节点和C之间就不可能有入口和出口。这一切都由应用程序的服务配置控制。
要将进出集群的流量路由到集群之外,您需要配置应用程序的服务。一种更简单的方法是使用类型LoadBalancer服务。
您还可以使用NodePort服务类型,它将在所有节点上30000 - 32767范围内的映射端口上公开服务。
最后,您可以为服务分配External IP,以允许外部流量进入集群。
希望这能有所帮助!
https://stackoverflow.com/questions/53735536
复制相似问题