Kubernetes使用服务IP的出站请求

Kubernetes使用服务IP的出站请求,kubernetes,Kubernetes,在Kubernetes部署中,我们在部署控制器上部署了一个WebApp,并为外部访问创建了一个负载平衡器。 因此,所有入站请求都通过负载平衡器获得负载平衡,并且工作正常 但我们面临出站请求的问题。在我们的情况下,外部应用程序只能接受来自白名单IP地址的流量,因此我们希望为负载平衡器IP提供白名单,因为POD本质上是短暂的,它们的IP不会是静态的 但由于请求来自pod,它保留pod的源ip,然后外部应用程序丢弃该请求 是否有一种方式可以让pod使用源as服务ip发送出站请求,或者源ip可以被服务i

在Kubernetes部署中,我们在部署控制器上部署了一个WebApp,并为外部访问创建了一个负载平衡器。
因此,所有入站请求都通过负载平衡器获得负载平衡,并且工作正常

但我们面临出站请求的问题。在我们的情况下,外部应用程序只能接受来自白名单IP地址的流量,因此我们希望为负载平衡器IP提供白名单,因为POD本质上是短暂的,它们的IP不会是静态的

但由于请求来自pod,它保留pod的源ip,然后外部应用程序丢弃该请求


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

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

另一种选择是在该外部服务前面有一个反向代理,终止kubernetes内部服务的流量,并启动从反向代理到外部服务的新TCP会话。在这种情况下,反向代理接受来自任何源IP的连接,但外部服务仅接收来自代理的请求。您可以将代理配置为在http头(通常是X-Forwarded-Host)中传递实际的客户端IP


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

这将是一个很好的参考:


请注意,当其他服务想要发现并与其他服务对话时,服务IP非常有用,IP表(在kube代理IP表模式下)将其转换为POD IP。对于来自给定服务的流量,它不起作用

这将有助于应用网络策略