プライベートクラスター - Amazon EKS

プライベートクラスター

このトピックでは、アウトバウンドインターネットアクセスを持たない、プライベートな Amazon EKS クラスターをデプロイする方法について説明します。Amazon EKS でのネットワークに詳しくない場合は、「De-mystifying cluster networking for Amazon EKS worker nodes (Amazon EKS ワーカーノードのクラスターネットワークを解明する)」を参照してください。

要件

アウトバウンドインターネットアクセスのないプライベートクラスターで Amazon EKS を実行するには、以下の要件を満たす必要があります。

  • プルするコンテナイメージは、Amazon Elastic Container Registry (Amazon ECR) か、 VPC 内のレジストリに配置 (あるいはコピー) する必要があります。詳細については、「コンテナイメージのローカルコピーの作成」を参照してください。

  • ノードをクラスターエンドポイントに登録するには、エンドポイントのプライベートアクセスが必要です。エンドポイントのパブリックアクセスはオプションです。詳細については、「Amazon EKS クラスターエンドポイントでのアクセスコントロール」を参照してください。

  • Linux ノードおよび Windows ノードでは、セルフマネージド型ノードを起動する際にブートストラップ引数を含める必要があります。このテキストは Amazon EKS のイントロスペクションをバイパスするため、VPC 内からの Amazon EKS API へのアクセスは不要です。api-server-endpoint および certificate-authority を、Amazon EKS クラスターの値に置き換えます。

    • Linux ノードの場合:

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

      その他の引数については、GitHub の「ブートストラップのスクリプト」を参照してください。

    • Windows ノードの場合:

      -APIServerEndpoint api-server-endpoint -Base64ClusterCA certificate-authority

      その他の引数については、「Amazon EKS 最適化 Windows AMI」を参照してください。

  • aws-auth ConfigMap は VPC 内から作成する必要があります。aws-auth ConfigMap の作成方法については、「クラスターへの IAM ユーザーおよびロールアクセスを有効にする」を参照してください。

考慮事項

ここでは、アウトバウンドインターネットアクセスのないプライベートクラスターで、Amazon EKS を実行する場合に考慮すべき点をいくつか示します。

  • 多くの AWS のサービスは、プライベートクラスターをサポートしていますが、VPC エンドポイントの使用がその前提となっています。詳細については、「VPC エンドポイント」を参照してください。一般的に使用されるサービスとエンドポイントには、以下のようなものがあります。

    サービス エンドポイント
    Amazon Elastic Container Registry com.amazonaws.region-code.ecr.api: および com.amazonaws.region-code.ecr.dkr
    Application Load Balancerおよび ネットワークロードバランサー com.amazonaws.region-code.elasticloadbalancing
    AWS X-Ray com.amazonaws.region-code.xray
    Amazon CloudWatch Logs com.amazonaws.region-code.logs
    サービスアカウントの IAM ロール

    com.amazonaws.region-code.sts

    App Mesh

    com.amazonaws.region-code.appmesh-envoy-management
  • Amazon EFS CSI ドライバー をデプロイする前に、Amazon EKS クラスターと同じ AWS リージョン を使用するように、kustomization.yaml ファイルを変更して、コンテナイメージを設定する必要があります。

  • セルフマネージド型およびマネージド型ノードがサポートされています。ノードのインスタンスには VPC エンドポイントへのアクセスが必要です。マネージド型ノードグループを作成する場合には、VPC エンドポイントのセキュリティグループでサブネットの CIDR を許可するか、ノードのセキュリティグループを作成し VPC エンドポイントのセキュリティグループに追加する必要があります。

  • -Amazon FSx for Lustre CSI ドライバーはサポートされていません。

  • AWS Fargate はプライベートクラスターでサポートされています。AWSLoad Balancer Controller を使用して、AWS Application Load Balancer (ALBs) および Network Load Balancer をデプロイできます。このコントローラーでは、Fargate で必要な IP ターゲットを持つネットワークロードバランサをサポートします。詳細については、「Amazon EKS でのアプリケーション負荷分散」および「ネットワークロードバランサーを作成する」を参照してください。

  • AWS Load Balancer Controller アドオンのインストール がサポートされています。ただし、インストール中に、コマンドラインフラグを使用して、enable-shieldenable-wafenable-wafv2 を設定し、falseに設定する必要があります。加えて、証明書の検出は、Ingress オブジェクトのホスト名に置き換えることはできません。これは、コントローラーが VPC エンドポイントを持たない ACM に到達する必要があるためです。

コンテナイメージのローカルコピーの作成

プライベートクラスターにはアウトバウンドインターネットアクセスがないため、コンテナイメージを Docker Hub などの外部ソースからプルすることはできません。代わりに、コンテナイメージをローカルで Amazon ECR にコピーするか、VPC 内のアクセス可能な代替レジストリにコピーする必要があります。コンテナイメージは、プライベート VPC の外部から Amazon ECR にコピーできます。プライベートクラスターは、Amazon ECR の VPC エンドポイントを使用して Amazon ECR リポジトリにアクセスします。ローカルコピーの作成に使用するワークステーションに Docker と AWS CLI がインストールされている必要があります。

コンテナイメージのローカルコピーを作成するには

  1. Amazon ECR リポジトリを作成します。詳細については、「リポジトリの作成」を参照してください。

  2. docker pull を使用して外部レジストリからコンテナイメージをプルします。

  3. docker tag を使用しながら、Amazon ECR レジストリ、リポジトリ、およびオプションのイメージタグ名を組み合わせたタグをイメージに付与します。

  4. レジストリに対して認証します。詳細については、「レジストリの認証」を参照してください。

  5. docker push を使用して、Amazon ECR にイメージをプッシュします。

    注記

    新しいイメージの場所を使用するようにリソースの設定を更新してください。

    次の例では、タグ v1.3.1-linux-amd64 を使用する amazon/aws-node-termination-handler イメージを Docker Hub からプルし、そのローカルコピーを Amazon ECR に作成します。

    aws ecr create-repository --repository-name amazon/aws-node-termination-handler docker pull amazon/aws-node-termination-handler:v1.3.1-linux-amd64 docker tag amazon/aws-node-termination-handler 111122223333.dkr.ecr.region-code.amazonaws.com/amazon/aws-node-termination-handler:v1.3.1-linux-amd64 aws ecr get-login-password --region region-code | docker login --username AWS --password-stdin 111122223333.dkr.ecr.region-code.amazonaws.com docker push 111122223333.dkr.ecr.region-code.amazonaws.com/amazon/aws-node-termination-handler:v1.3.1-linux-amd64

AWS STSサービスアカウントの IAM ロール用の エンドポイント

サービスアカウントの IAM ロールを指定して構成されたポッドは、AWS Security Token Service (AWS STS) API コールから認証情報を入手します。アウトバウンドのインターネットアクセスがない場合は、VPC で AWS STS VPC エンドポイントを作成して使用する必要があります。ほとんどの AWS v1 SDK は、AWS STS VPC エンドポイントを使用しないグローバル AWS STS エンドポイント (sts.amazonaws.com) をデフォルトで使用します。AWS STS VPC エンドポイントを使用するには、リージョンの AWS STS エンドポイント (sts.region-code.amazonaws.com) を使用するように SDK を構成することが必要な場合があります。これを行うには、AWS リージョン とともに、値が regionalAWS_STS_REGIONAL_ENDPOINTS 環境可変を設定します。

例えば、ポッドの仕様では、次のようになります。

... containers: - env: - name: ' value: region-code - name: AWS_STS_REGIONAL_ENDPOINTS value: regional ... ```

region-code は、クラスターが存在する AWS リージョン (us-west-2 など) に置き換えてください。