amazon-web-services - EKS Kubernetes 出站流量

标签 amazon-web-services kubernetes amazon-eks

我最近在 AWS 中为我​​公司的新项目设置了一个 EKS 集群。在我进入我的问题之前,这里是我的设置的一些信息。节点组中有两个节点(目前)具有自动缩放功能。起初,我在私有(private)子网中创建了节点,因为我认为它更安全。但是我的主管告诉我,我们需要能够直接通过 SSH 连接到节点,所以我在公共(public)子网中重新创建了节点,以便我们可以使用公钥通过 SSH 连接到节点。

我们有两个 CMS 实例位于 AWS(例如 aws.example.com)和 DigitalOcean(例如 do.example.com)中,其中包含一些数据。当 EKS 集群中的容器启动时,其中一些容器将需要使用 url aws.example.com 或 do.example.com 访问 AWS 中的实例。如果 EKS 中的容器无法访问实例,容器仍会运行,但其中的应用程序不会。因此,我需要将两个 CMS 实例上所有 EKS 节点的公共(public) IP 列入白名单,以便应用程序正常工作。并且有效。

我在我的 EKS 集群中使用入口。当我创建入口对象时,AWS 为我创建了一个应用程序负载均衡器。所有入站流量都由 ALB 处理,这很棒。但问题来了。当创建更多容器时,自动扩展会在我的 EKS 集群中启动新节点(每次使用不同的公共(public) IP),然后我将不得不转到两个 CMS 实例以将新公共(public) IP 地址列入白名单。

那么,有没有什么办法可以让所有的节点都使用一个固定的IP地址进行出站流量呢?或者也可以将它们配置为使用入口创建的 ALB 来处理出站流量?或者我需要创建一个服务器来做到这一点?我现在很迷茫。

这是我尝试过的: 创建集群时,它似乎也创建了一个私有(private)子网,即使我指定了要在公共(public)子网中创建的节点。有一个为私有(private)子网创建的 nat-gateway (ngw-xxxxxx),它带有一个弹性 IP(例如 1.2.3.4)。公共(public)子网的路由表如下: 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 实例上。但就在我应用更改后,所有容器都终止了,所有东西都停止工作了。

最佳答案

正如@Marcin 在上面的评论中提到的那样。 您应该将您的 node-group 移动到 private subnet

私有(private)子网

正如文档所说:

Use a public subnet for resources that must be connected to the internet, and a private subnet for resources that won't be connected to the internet

私有(private)子网的思想是禁止直接从互联网访问内部资源。

您可以在此处阅读 AWS 文档的重要部分:https://docs.aws.amazon.com/vpc/latest/userguide/how-it-works.html

对于私有(private)子网,您需要在路由表(阅读此处:https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html)中设置通过Nat 网关 的传出流量。

公共(public)子网

如果出于某些原因您需要在公共(public)子网 中使用您的集群,但它是BAD parctice,您可以这样做:

您可以通过 Nat Gateways 将流量从 public subnet 路由到特定服务器(您的 CMS)。

您的公共(public)子网路由表可能如下所示:

<表类="s-表"> <头> 目的地 目标 <正文> 10.0.0.0/16 本地 W.X.Y.Z/32 nat 网关 ID 0.0.0.0/0 igw-id

W.X.Y.Z/32 是您的 CMS IP 地址。


一些提示

此外,好的做法是分配一个 EIPpool 并将它们附加到 NAT Gateway 以确保将来不会更改.

当您想要修改基础架构并创建更复杂的 Nat(例如,您想要过滤第 7 层 上的流量)时,您可以创建高可用性 Nat 实例,并将 IP 附加到 NAT 实例 而不是 NAT 网关

在那种情况下,您将避免邮寄一些第 3 方 API 来将您的新 IP 列入白名单。

关于amazon-web-services - EKS Kubernetes 出站流量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65593151/

相关文章:

redis - 调试 istio 限速处理程序

amazon-web-services - 使用 AWS Java SDK v2 从 AWS EKS 获取身份验证 token

java - 如何在 Java AWS 无服务器框架设置下确定 Lambda 是在本地运行还是在 AWS 下运行

java - 获取 AWS CloudFront 失效使用情况(上个月)

python - Django 在 Amazon Elastic Beanstalk 上的迁移命令被杀死

ssl - 当 ingress-nginx 启用 ssl passtrough 时,所有后端是否都会受到性能损失的影响?我应该使用单独的入口吗?

python - 解析AWS Lambda JSON

go - 在 kubernetes 中处理 kafka 客户端更新

kubernetes - 在 GKE : apiserver was unable to write a JSON response: http2: stream closed 中扩展 HPA 时出错

node.js - 如何将来自容器的所有流量路由到同一个 Kubernetes pod 中的另一个容器?