【发布时间】:2021-04-12 01:04:38
【问题描述】:
我最近在 AWS 中为我公司的新项目设置了一个 EKS 集群。在我进入我的问题之前,这里是我的设置的一些信息。节点组中有两个节点(目前)具有自动缩放功能。起初,我在私有子网中创建了节点,因为我认为它更安全。但我的主管告诉我,我们需要直接通过 SSH 连接到节点的能力,所以我在公共子网中重新创建了节点,以便我们可以使用公钥 SSH 到节点。
我们在 AWS(例如 aws.example.com)和 DigitalOcean(例如 do.example.com)中有两个 CMS 实例,其中包含一些数据。当 EKS 集群中的容器启动时,其中一些需要使用 url aws.example.com 或 do.example.com 访问 AWS 中的实例。如果 EKS 中的容器无法访问实例,容器仍会运行,但其中的应用程序不会。因此,我需要将两个 CMS 实例上所有 EKS 节点的公共 IP 列入白名单,以便应用程序正常工作。它有效。
我在我的 EKS 集群中使用入口。当我创建入口对象时,AWS 为我创建了一个应用程序负载均衡器。所有入站流量都由 ALB 处理,这很棒。但问题来了。当创建更多容器时,自动缩放会在我的 EKS 集群中启动新节点(每次使用不同的公共 IP),然后我将不得不去两个 CMS 实例将新的公共 IP 地址列入白名单。
那么,有没有什么方法可以让所有节点都使用一个固定的 IP 地址进行出站流量?或者也许将它们配置为将入口创建的 ALB 也用于出站流量?或者我需要创建一个服务器来做到这一点?我现在很迷茫。
这是我尝试过的: 创建集群时,它似乎也创建了一个私有子网,即使我指定了要在公共子网中创建的节点。为私有子网创建了一个 nat-gateway (ngw-xxxxxx),它带有一个弹性 IP(例如 1.2.3.4)。公共子网的路由表如下: 192.168.0.0/16 本地 0.0.0.0/0 igw-xxxxxx
所以我想通过将igw-xxxxxx更改为ngw-xxxxxx,所有出站流量都将使用ngw-xxxxxx并使用IP地址1.2.3.4将流量发送到外界,我只需要将1.2.3.4列入白名单在我的两个 CMS 实例上。但在我应用更改后,所有容器都被终止,所有东西都停止工作。
【问题讨论】:
-
要使用 NAT,您的节点必须在私有子网中,而不是公共子网中。
-
@Marcin 如果我不想将我的节点移动到私有子网,有没有其他方法可以代替使用 NAT?
-
遗憾的是,您不能将它们放在公共子网中并使用 nat。
标签: amazon-web-services kubernetes amazon-eks