Kubernetes服务之间的流量转发

时间:2018-04-21 20:00:11

标签: kubernetes portforwarding network-traffic

我有1个主节点和2个工作节点。在1个节点上运行1个服务,在另一个节点上运行类似的服务。它们都是NodePort类型。如何将进入第一个服务的pod的http请求转发到第二个服务的pod?

我尝试在第一个工作节点上使用这些iptable规则:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport <nodeport-of-service1> -j DNAT --to <public IP of worker2>:<nodeport-of-service2> iptables -t nat -A POSTROUTING -p tcp -d <public IP of worker2> --dport <nodeport of service2> -j MASQUERADE

但它似乎不起作用。 eth0是worker-1上的WAN接口。

知道如何做到这一点?

1 个答案:

答案 0 :(得分:2)

在评论中,@ VonC为您提供了与网络解释相关的非常好的链接。

我只想为该主题添加一点。

您尝试添加的规则与Kube-proxy在群集内创建iptablesService添加的规则非常相似。

如果您使用NodePort类型创建Service而不是暴露Pod的端口,您将获得所需内容:与服务NodePort的每个连接{{ 3}}使用循环负载平衡到右侧pod。

这是来自官方文件:

  

对于每个Service,kube-proxy安装iptables规则,这些规则捕获到服务的clusterIP(虚拟)和端口的流量,并将该流量重定向到Service的后端集之一。对于每个Endpoints对象,它会安装选择后端Pod的iptables规则。默认情况下,后端的选择是随机的。

它总是会那样工作,但是如果你有NodePort类型的服务,kube-proxy将创建一个额外的规则,它将请求从节点上的选定端口转发到服务的clusterIP。