Kubernetes – 通过单个IP的外部连接

我需要find一种方法,让每个需要连接到“外部世界”的所有荚使用1个IP。

完整版:

我正在尝试将我的应用程序与Payments Gateway服务集成。 但是,此服务需要将我的服务器IP列入白名单,并拒绝所有其他连接以确保安全。

现在,我运行一个GKE(实际上是3)Kubernetes 1.5.2。 在这个集群中,我有大约30个豆荚,我需要1个特定path来通过一个静态的,可预测的IP地址来访问互联网

现在,我必须列出我的群集实例外部IP列入白名单,但这是一个问题。

群集设置为自动调整最多5个实例,所有这些实例都有一个短暂的IP和1 – 我不想被迫将所有这些变成静态IP。 2 – 我也不希望被迫通过外部端点公开该特定窗格,使其可用于Internet到集群的定向连接。

有什么办法可以说/configuration:

- 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. 

这里有什么正确的行动? 我怎样才能做到这一点?

我已经在Kubernetes上引用了这个SO问题和源IP文档 ,以及如何设置NAT网关的说明(考虑到灵活的集群configuration,我认为这不会起作用)

唯一可行的方法是NAT网关。

我假设你正在使用一种HTTP API(REST API),并且需要TCP。 TCP需要完成一次握手,因此您需要知道哪个节点发送了数据包以找回path。 这就是为什么需要NAT。

你find关于如何设置一个NAT Gatway的说明应该工作。 您只需告诉您的容器使用NAT实例作为网关。

这在GCP上是不可能的。 尽pipe这有点不方便,但我的build议是在一个非静态IP地址的GKE实例上设置一个http代理。 然后,当您使用付款网关时,请使用http代理,以便从正确的IP地址进行input。

确保IP地址不是短暂的。

制作您的代理虚拟机的映像。 如果发生故障,您可以在同一地区的任何区域中启动一个节点来充当代理。 您也可以在实例之间移动IP地址,尽pipe这样做会终止当前的连接,所以您应该确保代码将在失败时重试。 当然,你应该确保你的代码会在失败时重试。