我需要找到一种方法,让所有 pod 每次需要连接“外部世界”时都使用 1 个 IP。
完整版本:
我正在尝试将我的应用程序与支付网关服务集成。但是,此服务需要将我的服务器 IP 列入白名单,拒绝所有其他连接以确保安全。
现在,我正在运行一个带有 Kubernetes 1.5.2 的 GKE(实际上是 3)集群。在这个集群中,我有大约 30 个 pod,我需要其中 1 个通过静态、可预测的 IP 地址路由其互联网定向流量。
现在,我必须提供要列入白名单的集群实例外部 IP 列表,但这是一个问题。
该集群设置为自动扩展到最多 5 个实例,并且所有这些实例都有一个临时 IP 和 1 - I不想要被迫将所有这些都变成静态 IP。2 - 我也不希望强制通过外部端点公开该特定 pod,使其可用于 Internet 到集群的定向连接。
有什么方法可以说/配置吗:
- This pod forwards all it's Internet directed connections through X endpoint?
Obviously, this should be something easy to configure to work with 1 pod
or with all of them I so desired.
这里正确的做法是什么?我该如何实现这一点?
我参考过这个问题和来源 IP 文档在 Kubernetes 上本说明关于如何设置 NAT 网关(考虑到灵活的集群配置,我认为它不会起作用)
答案1
唯一可行的方法是 NAT 网关。
我假设您正在使用一种 HTTP API(REST API),并且需要 TCP。TCP 需要完成握手,因此您需要知道哪个节点发送了数据包才能找到返回的路径。这就是需要 NAT 的原因。
您找到的有关如何设置 NAT 网关的说明应该有用。您只需要告诉您的容器使用 NAT 实例作为网关。
答案2
目前在 GCP 上还无法实现这一点。虽然有点不方便,但我的建议是在非 GKE 实例上设置一个具有静态 IP 地址的 http 代理。然后当您使用支付网关时,请使用 http 代理,这样您就可以从正确的 IP 地址访问它。
确保 IP 地址不是临时的。
制作代理虚拟机的映像。如果虚拟机发生故障,您可以在同一区域的任何区域中启动一个节点作为代理。您还可以在实例之间移动 IP 地址,但这会终止当前连接,因此您应该确保您的代码会在失败时重试。当然,您应该始终确保您的代码会在失败时重试。