如何设置对 Amazon EKS 中的 API 服务器的公有和私有访问权限?

上次更新时间:2020 年 1 月 27 日

我想为我的 Amazon Elastic Kubernetes Service (Amazon EKS) 集群的 Kubernetes API 服务器终端节点设置公有和私有访问权限。

简短描述

要为 Kubernetes API 服务器终端节点设置公有和私有访问权限,您必须:

  • 了解 Kubernetes API 服务器的默认行为
  • 了解 Amazon EKS API 终端节点的私有访问的工作原理
  • 修改终端节点访问权限
  • 了解 Amazon EKS API 终端节点的 DNS 解析的工作原理

如果您的 Kubernetes API 服务器终端节点有问题,请参阅如何排查 Amazon EKS 集群的 API 服务器终端节点的问题?

解决方法

了解 Kubernetes API 服务器的默认行为

在创建新集群时,存在以下情况:

  • Amazon EKS 为您用来与自己的集群通信的的托管 Kubernetes API 服务器创建终端节点。
  • API 服务器终端节点通过公有方式连接到 Internet。
  • 对 API 服务器的访问通过 AWS Identity and Access Management (IAM) 和原生 Kubernetes 基于角色的访问控制 (RBAC) 确保安全。

了解 Amazon EKS API 终端节点的私有访问的工作原理

为了使您的工作线程节点与 Amazon Virtual Private Cloud (Amazon VPC) 中的 API 服务器保持通信,对 Amazon EKS API 终端节点启用私有访问

当您对集群中的 API 终端节点启用私有访问时,存在以下情况:

  • Amazon EKS 代表您创建 Amazon Route 53 私有托管区域,并且仅将该私有托管区域关联到您的集群的 VPC。
  • 私有托管区域由 Amazon EKS 托管,它不会出现在您的账户的 Route 53 资源中。

您只能访问配置为仅允许从以下地址进行私有访问的集群:

  • 工作线程节点驻留的 VPC
  • 与 Amazon EKS 集群的 VPC 对等的网络
  • 通过 AWS Direct Connect 或虚拟专用网络 (VPN) 连接到 Amazon EKS 集群的 VPC 的网络

了解 Amazon EKS API 终端节点的 DNS 解析的工作原理

如果公有 = true私有 = false,则可从 Internet 上的任何位置访问 Amazon EKS API 终端节点。这也是 Amazon EKS 集群的默认行为。您还可以通过 AWS 命令行界面 (AWS CLI) 限制访问。

如果公有 = true私有 = true,则可通过 Internet 以及从 VPC 连接的网络内访问和解析 Amazon EKS API 终端节点。连接的网络包括 DX、VPN 或 VPC 对等连接。

如果公有 = false私有 = true,则至 Amazon EKS 集群的 API 服务器的所有流量都必须从您的 VPC 或其连接的网络内发起。该 API 服务器终端节点不能通过 Internet 访问。集群的 API 终端节点由公有 DNS 服务器从 VPC 解析到私有 IP 地址。

修改终端节点访问权限

要在禁用了私有 API 终端节点访问(设置为 true)的集群上更新私有访问权限,请运行以下 AWS CLI 命令:

aws eks update-cluster-config \
    --region region \
    --name dev \
    --resources-vpc-config endpointPublicAccess=true,endpointPrivateAccess=true

要禁用对该终端节点的公有 API 访问,请将 endpointPublicAccess 设置为 false