深入理解EKS 工作节点的网络架构

AWS EKS(弹性 Kubernetes 服务)是亚马逊提供的托管 Kubernetes 服务,一旦配置完成,即可像变魔术一样运行。但这通常是 EKS 的默认设置。如果您打算根据组织的设计、合规性标准和隐私要求进行自定义,该怎么办?这时事情就变得复杂了。

我想分享我在构建完全私有的 EKS 集群时遇到的经验和问题,这意味着它只能通过 VPC 访问,并且无法访问互联网。根据教科书上的指导,我在私有 VPC 中配置了私有 EKS 集群,但当我尝试将节点连接到集群时,开始出现网络错误。亚马逊一直致力于提供非常用户友好的界面来在 AWS 中配置资源。然而,如果您不完全了解其底层工作原理,其设置中的一些细微属性可能会耗费您整整一周的时间。

今天,我将解释如何设置 EKS 网络,不妨先从公共 EKS 设置开始,深入了解每个组件以及如何实现完全私有的 EKS 集群。

每个 EKS 集群有两个 VPC


一个 EKS 集群由两个 VPC 组成。第一个 VPC 由 AWS 管理,Kubernetes 控制平面位于此 VPC 内(用户无法看到)。第二个 VPC 是客户 VPC,我们在集群创建期间指定。所有工作节点都放置在此 VPC 内。

EKS 的两个 VPC - AWS 托管 VPC 和客户托管 VPC


集群端点访问类型


集群端点配置了 Kubernetes API 服务器的访问方式。

  1. 公有:集群端点可从您的 VPC(客户托管 VPC)外部访问。工作节点流量将离开您的 VPC(客户托管 VPC)并连接到端点(位于 AWS 托管 VPC 内)。
  2. 公有和私有:集群端点可从您的 VPC(客户托管 VPC)外部访问。流向端点的工作节点流量将保留在您的 VPC(客户托管 VPC)内。
  3. 私有:集群端点只能通过您的 VPC 访问。工作节点到端点的流量将保留在您的 VPC 内。

仅限公共端点

这是 EKS 集群的默认行为。您可以使用安全组控制对公共端点的访问,仅允许已知 IP 范围访问 EKS 控制平面。任何从外部访问 EKS 集群(例如:使用 kubectl)的用户都将通过公共端点进入,通过安全组规则并访问控制平面。

任何源自 VPC 的流量(例如:尝试与 EKS 控制平面通信的工作节点)都将离开 VPC,通过安全组规则并访问控制平面。即使流量离开 VPC,也不会离开 AWS 网络。

要使这些节点连接到 EKS 控制平面,至少需要以下条件之一:

1. 公有 IP 地址和到互联网网关的路由 —(节点位于公有子网中)

2. NAT 网关(已拥有公有 IP 地址)—(节点位于私有子网中,NAT 网关位于公有子网中)

公有和私有端点


此选项允许使用如上所述的公有端点,但客户管理的 VPC 流量(例如:尝试连接到 EKS 控制平面的工作节点)将通过私有端点流经 EKS 管理的弹性网络接口 (ENI)。

如果您希望集群可以通过互联网访问,但希望工作节点位于私有子网中并通过私有端点与 EKS 控制平面通信,则这种情况是理想的选择。

仅私有端点


这是最安全的选项。但这并不意味着其他选项不安全。通过正确的配置,每个设置都可以确保安全。通过此设置,工作节点将通过 EKS 管理的 ENI 与 EKS 控制平面通信。

如果您希望有人使用 kubectl 访问 EKS 集群,您可以允许从 VPC 内部进行此操作。任何外部流量都无法进入集群。

当我们预配工作节点时会发生什么?


当我们请求一个新节点时,它必须执行以下操作:

  1. 启动新的 EC2 实例
  2. 在每个节点的启动过程中安装 Kubelet 和 Kubernetes 节点代理
  3. Kubelet 会联系 EKS 控制平面来注册该节点。
  4. Kubelet 接收来自控制平面的 API 命令,并定期向控制平面发送有关节点状态、容量等的更新。


EKS 的 VPC 配置


现在您已经了解了这些不同类型的端点的工作原理,让我们深入了解配置客户管理的 VPC 的不同方法。

VPC 网络由子网和用于控制流量的指定网络配置(例如路由)组成。因此,配置 VPC 的方法多种多样,让我们​​逐一介绍一下。在本文中,我还将解释我在设置完全私有 VPC 时遇到的问题。

VPC 由子网组成,这些子网可以是公有的,也可以是私有的。我们有以下几种配置方式:

  • 仅公有子网
  • 公有子网和私有子网
  • 仅私有子网

仅公有子网


在此设置中,所有资源(例如负载均衡器和工作节点)都将安装到公有子网中。这意味着,所有这些资源都可以从互联网访问。我的意思是,它们可以访问,但需要通过正确的配置进行控制。

在公共子网内预配工作节点时,每个 EC2 实例(工作节点)在启动时都会分配一个公共 IP。由于给定网络中的 IP 地址数量有限,因此这会限制节点数量。

使用此设置,您可以为 EKS 集群使用任何集群终端节点设置。

公有子网和私有子网


这是 EKS 广泛使用的 VPC 设置,其中工作节点位于私有子网内,而 NAT 网关和负载均衡器位于公有子网内。

仅私有子网


这就是我们所说的完全私有 VPC。VPC 中既没有出站流量,也没有入站流量。对于此设置,只需为您的 EKS 集群启用私有集群端点。

这是一种不常见的架构,但在数据高度敏感的组织中很常见,例如银行、医院等。

这里需要注意的是,我们可以轻松设置带有集群端点的 EKS,并允许您的工作节点与 EKS 控制平面通信。这由 EKS 通过其 EKS 管理的 ENI 进行管理。但是,要启动 EKS 节点,它们需要访问一些其他 AWS 服务。这是每个人在为 EKS 配置完全私有 VPC 时都会犯的一个常见错误。

EKS 节点通常需要访问以下 AWS 服务才能在 EKS 中运行:

  • Amazon ECR(下拉容器镜像)
  • Amazon EC2
  • Amazon S3
  • Cloudwatch 日志
  • Amazon STS(用于 IRSA)


如果没有上述 VPC 终端节点,您将无法为 EKS 创建工作节点,因为它需要访问上述 AWS 服务才能作为 EKS 工作节点运行。(请注意,在某些情况下,您可能不需要所有上述服务。但拥有上述服务总是好的)。

例如,ECR 访问权限至关重要,并且这是唯一可以从完全私有的 VPC 设置中下拉 Docker 镜像的地方。如果没有 ECR 访问权限,您的节点将无法安装初始集群插件并作为 EKS 工作节点运行。

总结

AWSEKS(弹性Kubernetes服务)是亚马逊提供的托管Kubernetes服务,默认配置简单易用,但根据组织的特定需求进行自定义时,可能会遇到复杂问题。本文分享了构建完全私有的EKS集群的经验,特别是网络配置的挑战。EKS集群由两个VPC组成:AWS管理的VPC和客户管理的VPC。集群端点访问类型包括公有、公有和私有、以及仅私有,每种类型都有其特定的安全性和访问控制要求。在配置完全私有的VPC时,必须确保工作节点能够访问必要的AWS服务,如AmazonECR、EC2、S3、Cloudwatch日志和STS,否则节点将无法正常运行。通过理解这些网络配置的细节,可以更有效地设置和管理EKS集群,满足组织的安全和合规性需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云攀登者-望正茂

你的鼓你的鼓励是我前进的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值