【问题标题】:Kubernetes traffic forwarding between servicesKubernetes服务间流量转发
【发布时间】:2018-04-23 23:22:44
【问题描述】:

我有 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 接口。

知道如何做到这一点吗?

【问题讨论】:

标签: kubernetes portforwarding network-traffic


【解决方案1】:

在 cmets 中,@VonC 为您提供了一个很好的链接,其中包含有关网络的解释。

我只想在那个话题上加一点。

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

如果您使用NodePort 类型创建Service 而不是暴露您的Pod 的端口,您将得到您所需要的:每个连接到服务will be forwardedNodePort 到正确的pod循环负载均衡。

这是来自官方文档:

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

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-26
  • 2020-10-15
  • 2021-10-27
  • 2021-05-31
  • 1970-01-01
  • 1970-01-01
  • 2021-02-02
相关资源
最近更新 更多