跳至内容

如何从 VPC 或对等 VPC 内部安全访问 Amazon EKS 集群 API 服务器端点?

2 分钟阅读
0

我想从 Amazon Virtual Private Cloud (Amazon VPC) 或对等 VPC 内部安全访问 Amazon Elastic Kubernetes Service (Amazon EKS) 集群 API 服务器端点。

简短描述

当您创建新的 Amazon EKS 集群时,Amazon EKS 会为托管 Kubernetes API 服务器创建一个端点。默认情况下,API 服务器端点对互联网是公开的。该系统结合使用 AWS Identity and Access Management (IAM) 和原生 Kubernetes 基于角色的访问控制 (RBAC) 来保护对 API 服务器的访问。有关详细信息,请参阅 Kubernetes 网站上的使用 RBAC 鉴权

要从 VPC 或对等 VPC 内安全访问您的 Amazon EKS 集群,您必须配置私有端点。有关安全最佳实践的详细信息,请参阅安全最佳实践

解决方法

开启对 Kubernetes API 服务器的私有访问权限,这样您的节点和 API 服务器之间的所有通信都将保留在您的 VPC 内。您可以限制可从互联网访问您的 API 服务器的 IP 地址,也可以完全关闭对 API 服务器的互联网访问。

当您开启端点私有访问时,Amazon EKS 集群的行为如下:

  • 所有流向您的集群 API 服务器的流量都来自集群的 VPC 内部或已连接的网络。
  • 您的 API 服务器无法从互联网公开访问。任何 kubectl 命令都从 VPC 内部或已连接的网络运行。有关连接选项,请参阅访问仅限私有 API 服务器
  • 公有 DNS 服务器将集群的 API 服务器端点解析为 VPC 中的私有 IP 地址。

如果您的端点无法解析为现有集群的 VPC 内的私有 IP 地址,请执行以下操作之一:

  • 打开公共访问权限,然后再次将其关闭。您只需要为集群执行一次此操作,端点即可解析为私有 IP 地址。
  • 更新您的集群

当您关闭集群的 Kubernetes API 服务器端点的公有访问权限时,您只能从 VPC 内部或已连接的网络访问 API 服务器。您可以通过以下任一方式访问 Kubernetes API 服务器端点:

  • 使用中转网关或其他连接选项将您的网络连接到 VPC,然后在已连接的网络中使用计算机。确保您的 Amazon EKS 控制面板安全组包含允许来自已连接的网络端口 443 上的入口流量的规则。
  • 在集群的 VPC 中的公有子网中启动 Amazon Elastic Compute Cloud (Amazon EC2) 实例。然后,使用 SSH 登录该实例来运行 kubectl 命令。有关详细信息,请参阅使用会话管理器和 Amazon EC2 Instance Connect 访问堡垒主机

使用 AWS 管理控制台修改您的集群 API 服务器端点访问权限

  1. 打开 Amazon EKS 控制台
  2. 选择集群的名称以显示您的集群信息。
  3. 打开 Networking(网络)选项卡,然后选择 Update(更新)。
  4. 选择开启还是关闭集群的 Kubernetes API 服务器端点的私有访问权限。如果您开启私有访问权限,则来自集群 VPC 内部的 Kubernetes API 请求将使用私有 VPC 端点。要关闭公共访问权限,必须先开启私有访问权限。
  5. 选择打开还是关闭集群的 Kubernetes API 服务器端点的公共访问权限。如果关闭公共访问权限,则您的集群的 Kubernetes API 服务器只能接收来自集群 VPC 内部的请求。
  6. 选择 Update(更新)。

使用 AWS CLI 修改您的集群 API 服务器端点访问权限

**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI

要关闭集群的端点公共访问权限并开启私有端点访问权限,请运行以下命令:

aws eks update-cluster-config --name example \
--resources-vpc-config endpointPublicAccess=false,endpointPrivateAccess=true

**注意:**将 example 替换为您的集群名称。

输出示例:

{
    "update": {
        "id": "ec883c93-2e9e-407c-a22f-8f6fa6e67d4f",
        "status": "InProgress",
        "type": "EndpointAccessUpdate",
        "params": [
            {
                "type": "EndpointPublicAccess",
                "value": "false"
            },
            {
                "type": "EndpointPrivateAccess",
                "value": "true"
            }
        ],
        "createdAt": 1565806986.506,
        "errors": []
    }
}

如果您开启私有访问权限,则来自集群的 VPC 内部的 Kubernetes API 请求将使用私有 VPC 端点。该参数的默认值为 false,这将关闭您的 Kubernetes API 服务器的私有访问权限。有关详细信息,请参阅 update-cluster-config

AWS 官方已更新 2 个月前