来自群集内部的HTTP调用不使用分配的外部IP

时间:2017-01-30 15:35:51

标签: kubernetes google-kubernetes-engine

我有一个Kubernetes Service,其中一个静态External IP分配给分发给Replication Controller的{​​{1}}管理1应用程序。我可以使用外部IP访问应用程序,这部分工作正常。

我现在希望在向外部应用程序(集群外)发出HTTP请求时,使用相同的IP将应用程序放在Pod中。

Pods的简单调用表明此应用程序的IP与其回答的外部IP完全不同。如何让它使用相同的IP?

2 个答案:

答案 0 :(得分:1)

根据documentationexternalIP的{​​{1}}分配仅适用于入口流量。除此之外,OpenShift中有些相关的Integrating External Services文档没有提及通过定义的Service代理出口流量的任何选项。因此,您似乎正在尝试开箱即用的Kubernetes。

答案 1 :(得分:1)

短而简单的答案是 - 你不能。您的Pod分配了群集内部的IP,很可能来自特定群集范围的网络地址空间的每个节点范围。在与外部世界交谈时,pods流量来自内部桥接接口/ IP,如果目标不是群集的一部分,则通过特定的节点默认路由离开,最后以SNAT形式传递给节点如果您的流量通过,则为IP或NAT网关的IP。

即使你是通过一些k8s观看等来创建pod的自定义SNAT规则(很像入口控制器),流量仍会从负载均衡器反弹而不是到达你的pod。

如果您需要一个维护的IP地址,您可以做的是通过NAT网关传递您的pod流量并确保它按预期进行NAT(这不会为您提供与您的服务相同的IP,只需一个&#34 ;稳定" one),或者像http请求那样的流量通过PROXY传输稳定的IP。

总而言之,虽然在某种程度上可能不值得设置它的头痛。