Kubernetes出站请求使用服务IP

时间:2019-12-26 09:12:52

标签: kubernetes

在Kubernetes部署中,我们已在部署控制器上部署了WebApp,并创建了用于外部访问的负载均衡器。
因此,所有入站请求都由负载均衡器进行负载均衡并且可以正常工作。

但是我们面临出站请求的问题。在这种情况下,外部应用程序只能接受来自白名单IP地址的流量,因此我们想提供负载均衡器ip,然后将其列入白名单,因为Pod本质上是短暂的,它们的IP不是静态的。

但是由于请求是从pod发出的,它会保留pod的源ip,然后外部应用程序会丢弃该请求。

是否有一种方法可以使pod可以使用源作为服务ip发送出站请求,或者源ip可以被服务ip屏蔽?

3 个答案:

答案 0 :(得分:0)

在应用程序服务和负载平衡器之间引入入口控制器。使用注释

在入口级别定义列入白名单的IP范围

答案 1 :(得分:0)

您可以为此使用出口网关。 Istio提供Envoy作为出口网关代理。从群集内的服务,所有出站流量都将通过此出口代理进行路由。您可以在将流量发送到外部服务之前在代理上配置TLS起源。然后,您需要在外部服务中将出口网关的IP列入白名单。

其他选择是在该外部服务之前拥有一个反向代理,并终止来自Kubernetes内部服务的流量,并启动一个从反向代理到外部服务的新TCP会话。在这种情况下,反向代理接受来自任何原始IP的连接,但是外部服务仅接收来自代理的请求。您可以将代理配置为在HTTP标头(通常为X-Forwarded-Host

)中传递实际的客户端IP。

https://istio.io/docs/tasks/traffic-management/egress/

答案 2 :(得分:0)

我假设您在IPv4模式下使用Kubernetes。当您从kubernetes容器访问外部IP地址时,请求将经过源NAT处理。这意味着数据包将具有流量通过其流出的主机(VM?)以太网接口的IP地址。请将该IP列入白名单,看看是否有帮助

这将是一个很好的参考:https://www.youtube.com/watch?v=0Omvgd7Hg1I

请注意,当其他服务想要发现其他服务并与之对话时,服务IP很有用,并且IP表(以kube-proxy ip-table模式)会将其转换为POD IP。对于来自给定服务的流量