部署具有有限互联网访问权限的私有集群 - Amazon EKS

部署具有有限互联网访问权限的私有集群

本主题将介绍如何部署部署在 AWS 云上但没有出站互联网访问权限的 Amazon EKS 集群。如果您在 AWS 上有一个本地集群,请参阅在 AWS Outpost 上创建 Amazon Linux 节点而不是本主题。

如果您不熟悉 Amazon EKS 联网,请参阅 Amazon EKS 工作线程节点的集群联网解密。如果集群没有出站互联网访问权限,则其必须满足以下要求:

  • 您的集群必须从 VPC 中的容器注册表中拉取映像。您可以在 VPC 中创建 Amazon Elastic Container Registry,并将容器映像复制到其中,以供节点拉取。有关更多信息,请参阅将容器镜像从一个存储库复制到另一个存储库

  • 集群必须启用端点私有访问权限。需要启用该访问权限,节点才能注册到集群端点。终端节点公有访问权限是可选的。有关更多信息,请参阅控制对集群 API 服务器端点的网络访问权限

  • 自行管理 Linux 和 Windows 节点必须包含以下引导参数才能进行启动。这些实际参数绕过 Amazon EKS 自检,且无需从 VPC 内访问 Amazon EKS API。

    1. 使用以下命令确定集群端点的值。将 my-cluster 替换为您的集群的名称。

      aws eks describe-cluster --name my-cluster --query cluster.endpoint --output text

      示例输出如下。

      https://EXAMPLE108C897D9B2F1B21D5EXAMPLE.sk1.region-code.eks.amazonaws.com
    2. 使用以下命令确定集群证书颁发机构的值。将 my-cluster 替换为您的集群的名称。

      aws eks describe-cluster --name my-cluster --query cluster.certificateAuthority --output text

      返回的输出是一个长字符串。

    3. 请将以下命令中的 cluster-endpointcertificate-authority 替换为上一个命令的输出中返回的值。有关在启动自行管理的节点时指定引导参数的更多信息,请参阅 创建自行管理的 Amazon Linux 节点创建自行管理的 Microsoft Windows 节点

      • 对于 Linux 节点:

        --apiserver-endpoint cluster-endpoint --b64-cluster-ca certificate-authority

        有关更多参数,请参阅 GitHub 上的引导脚本

      • 对于 Windows 节点:

        注意

        如果您使用自定义服务 CIDR,则需要使用 -ServiceCIDR 参数进行指定。否则,集群 Pods 中的 DNS 解析将失败。

        -APIServerEndpoint cluster-endpoint -Base64ClusterCA certificate-authority

        有关更多参数,请参阅 引导脚本配置参数

  • 必须从 VPC 内创建集群的 aws-auth ConfigMap。有关在 aws-auth ConfigMap 中创建和添加条目的更多信息,请在终端中输入 eksctl create iamidentitymapping --help。如果您的服务器上不存在 ConfigMap,则 eksctl 将在您使用命令添加身份映射时创建。

  • 配置了服务账户 IAM 角色的 Pods 通过 AWS Security Token Service(AWS STS)API 调用获取凭证。如果没有出站互联网访问权限,则您必须在 VPC 中创建并使用 AWS STS VPC 端点。默认情况下,大多数 AWS v1 SDK 均使用全局 AWS STS 端点(sts.amazonaws.com),而此端点不使用 AWS STS VPC 端点。要使用 AWS STS VPC 端点,您可能需要将 SDK 配置为使用区域 AWS STS 端点(sts.region-code.amazonaws.com)。有关更多信息,请参阅为服务账户配置 AWS Security Token Service 端点

  • 集群的 VPC 子网必须具有 Pods 需要访问的任何 AWS 服务的 VPC 接口端点。有关更多信息,请参阅使用接口 VPC 端点访问 AWS 服务。下表列出了一些常用的服务和端点。有关端点的完整列表,请参阅《AWS PrivateLink 指南》https://docs.aws.amazon.com/vpc/latest/privatelink/中的与 AWS PrivateLink 集成的 AWS 服务

    我们建议您为 VPC 端点启用私有 DNS 名称,这样工作负载即可继续正常使用公共 AWS 服务端点。

    服务 终端节点

    Amazon EC2

    com.amazonaws.region-code.ec2

    Amazon Elastic Container Registry(用于拉取容器映像)

    com.amazonaws.region-code.ecr.api、com.amazonaws.region-code.ecr.dkr 和 com.amazonaws.region-code.s3

    Application Load Balancer 和 Network Load Balancer

    com.amazonaws.region-code.elasticloadbalancing

    AWS X-Ray

    com.amazonaws.region-code.xray

    Amazon CloudWatch Logs

    com.amazonaws.region-code.logs

    AWS Security Token Service(将 IAM 角色用于服务账户时为必需)

    com.amazonaws.region-code.sts

  • 任何自行管理的节点都必须部署到具有您需要的 VPC 接口端点的子网中。如果您创建托管节点组,则 VPC 接口端点安全组必须允许子网的 CIDR,或者您必须将已创建的节点安全组添加到 VPC 接口端点安全组。

  • 如果您的 Pods 使用 Amazon EFS 卷,那么在部署使用 Amazon EFS 存储弹性文件系统之前,必须更改驱动程序的 kustomization.yaml 文件,以将容器映像设置为使用与 Amazon EKS 集群相同的 AWS 区域。

  • 您可以使用 AWS Load Balancer Controller 将 AWS Application Load Balancers(ALB)和 Network Load Balancers 部署到私有集群。部署时,您应该使用命令行标记enable-shieldenable-wafenable-wafv2 设置为 false。带有来自 Ingress 对象中的主机名的证书发现不受支持。这是因为控制器需要访问没有 VPC 接口端点的 AWS Certificate Manager。

    该控制器支持带有 IP 目标的网络负载均衡器,结合 Fargate 一起使用时需要网络负载均衡器。有关更多信息,请参阅使用应用程序负载均衡器路由应用程序和 HTTP 流量创建网络负载均衡器

  • 支持 Cluster Autoscaler。在部署 Cluster Autoscaler Pods 时,请确保命令行包括 --aws-use-static-instance-list=true。有关更多信息,请参阅 GitHub 上的使用静态实例列表。Worker 节点 VPC 还必须包括 AWS STS VPC 端点和弹性伸缩 VPC 端点。

  • 一些容器软件产品使用 API 调用来访问监控使用情况的 AWS Marketplace Metering Service。私有集群不允许这些调用,因此您不能在私有集群中使用这些容器类型。