インターネットアクセスが制限されたプライベートクラスターをデプロイする - Amazon EKS

インターネットアクセスが制限されたプライベートクラスターをデプロイする

このトピックでは、AWS Cloud にデプロイされているが、アウトバウンドインターネットアクセスがない Amazon EKS クラスターをデプロイする方法について説明します。AWS Outposts にローカルクラスターがある場合、このトピックの代わりに「AWS Outposts で Amazon Linux ノードを作成する」を参照してください。

Amazon EKS でのネットワークに詳しくない場合は、「De-mystifying cluster networking for Amazon EKS worker nodes (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-endpoint および certificate-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

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

  • クラスターの aws-auth ConfigMap は VPC 内から作成する必要があります。エントリの作成と aws-auth ConfigMap への追加の詳細については、ターミナルで eksctl create iamidentitymapping --help と入力してください。サーバーに ConfigMap が存在しない場合は、このコマンドを使用して ID マッピングを追加したときに eksctl によって作成されます。

  • サービスアカウントの IAM ロールで構成された Pods は、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 Security Token Service エンドポイントを設定する」を参照してください。

  • クラスターの VPC サブネットには、Pods がアクセスする必要のあるすべての AWS サービスに対して VPC インターフェイスエンドポイントが必要です。詳細については、「インターフェイス VPC エンドポイントを使用して AWS サービスにアクセスする」を参照してください。下表には、一般的に使用されるサービスとエンドポイントがリスト表示されています。エンドポイントの詳細なリストについては、AWS 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および ネットワークロードバランサー

    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 EFSAmazon EFS ボリュームを使用する場合、Amazon EFS で伸縮自在なファイルシステムを保存する をデプロイする前に、Amazon EKS クラスターと同じ AWS リージョンを使用するように、ドライバーの kustomization.yaml ファイルを変更して、コンテナイメージを設定する必要があります。

  • AWS Load Balancer Controller を使用して、AWS Application Load Balancer (ALB) および Network Load Balancer をプライベートクラスターにデプロイできます。デプロイするときは、コマンドラインフラグを使用して、enable-shieldenable-waf、および enable-wafv2 を false に設定する必要があります。Ingress オブジェクトのホスト名を使用した証明書の検出は、サポートされていません。これは、コントローラーが VPC インターフェイスエンドポイントを持たない AWS Certificate Manager に到達する必要があるからです。

    このコントローラーでは、Fargate で必要な IP ターゲットを持つネットワークロードバランサをサポートします。詳細については、Application Load Balancer を使用してアプリケーションと HTTP トラフィックをルーティングするおよびネットワークロードバランサーを作成するを参照してください。

  • Cluster Autoscaler がサポートされています。クラスターオートスケーラー Pods をデプロイする場合、コマンドラインに --aws-use-static-instance-list=true が含まれていることを確認してください。詳細については、「GitHub」で「静的インスタンスリストを使用」を参照してください。ワーカーノード VPC には、AWS STS VPC エンドポイントと自動スケーリング VPC エンドポイントも含める必要があります。

  • 一部のコンテナソフトウェア製品では、AWS Marketplace Metering Service にアクセスする API コールを使用して、使用状況をモニタリングします。プライベートクラスターではこれらの呼び出しが許可されないため、これらのコンテナタイプはプライベートクラスターには使用できません。