

 **このページの改善にご協力ください** 

このユーザーガイドに貢献するには、すべてのページの右側のペインにある「**GitHub でこのページを編集する**」リンクを選択してください。

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

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

Amazon EKS でのネットワークに詳しくない場合は、「[De-mystifying cluster networking for Amazon EKS worker nodes (Amazon EKS ワーカーノードのクラスターネットワークを解明する)](https://aws.amazon.com/blogs/containers/de-mystifying-cluster-networking-for-amazon-eks-worker-nodes)」を参照してください。クラスターにアウトバウンドインターネットアクセスがない場合、次の要件を満たす必要があります。

## クラスターアーキテクチャの要件

+ クラスターは VPC 内のコンテナレジストリからイメージを取得する必要があります。VPC 内に Amazon Elastic Container Registry を作成し、そこにコンテナイメージをコピーしてノードの取得元にすることができます。詳細については、「[あるリポジトリから別のリポジトリにコンテナイメージをコピーする](copy-image-to-repository.md)」を参照してください。
+ クラスターでは、エンドポイントのプライベートアクセスが有効になる必要があります。これは、ノードをクラスターエンドポイントに登録するために必要です。エンドポイントのパブリックアクセスはオプションです。詳細については、「[クラスター API サーバーエンドポイント](cluster-endpoint.md)」を参照してください。

## ノードの要件

+ セルフマネージド型 Linux ノードおよび Windows ノードには、起動する前に次のブートストラップ引数を含める必要があります。これらの引数は Amazon EKS のイントロスペクションをバイパスするため、VPC 内からの Amazon EKS API へのアクセスは不要です。

  1. 次のコマンドを使用して、クラスターのエンドポイントの値を確認します。*マイクラスター* の部分は自分のクラスター名に置き換えます。

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

     出力例は次のとおりです。

     ```
     https://EXAMPLE108C897D9B2F1B21D5EXAMPLE.sk1.region-code.eks.amazonaws.com
     ```

  1. 次のコマンドを使用して、クラスターの認証機関の値を確認します。*マイクラスター* の部分は自分のクラスター名に置き換えます。

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

     返された出力は長い文字です。

  1. NodeConfig オブジェクト内の `apiServerEndpoint` および `certificateAuthority` の値を、前のコマンドで返された出力の値に置き換えます。セルフマネージド型 Amazon Linux 2023 ノードを起動する際にブートストラップ引数を指定する方法の詳細については、「[セルフマネージド Amazon Linux ノードを作成する](launch-workers.md)」および「[セルフマネージド Microsoft Windows ノードの作成](launch-windows-workers.md)」を参照してください。
     + Linux ノードの場合:

       ```
       ---
       MIME-Version: 1.0
       Content-Type: multipart/mixed; boundary="BOUNDARY"
       
       --BOUNDARY
       Content-Type: application/node.eks.aws
       
       ---
       apiVersion: node.eks.aws/v1alpha1
       kind: NodeConfig
       spec:
         cluster:
           name: my-cluster
           apiServerEndpoint: [.replaceable]https://EXAMPLE108C897D9B2F1B21D5EXAMPLE.sk1.region-code.eks.amazonaws.com
           certificateAuthority: [.replaceable]Y2VydGlmaWNhdGVBdXRob3JpdHk=
           ...
       ```

       その他の引数については、GitHub の「[ブートストラップのスクリプト](https://github.com/awslabs/amazon-eks-ami/blob/main/templates/al2/runtime/bootstrap.sh)」を参照してください。
     + Windows ノードの場合:
**注記**  
カスタムサービス CIDR を使用している場合は`-ServiceCIDR` パラメータを使用して指定する必要があります。そうしないと、クラスター内の Pod の DNS 解決が失敗します。

       ```
       -APIServerEndpoint cluster-endpoint -Base64ClusterCA certificate-authority
       ```

       その他の引数については「[ブートストラップスクリプトの設定パラメータ](eks-optimized-windows-ami.md#bootstrap-script-configuration-parameters)」を参照してください。
+ クラスターの `aws-auth` `ConfigMap` は VPC 内から作成する必要があります。エントリの作成と `aws-auth` `ConfigMap` への追加の詳細については、ターミナルで `eksctl create iamidentitymapping --help` と入力してください。サーバーに `ConfigMap` が存在しない場合は、このコマンドを使用して ID マッピングを追加したときに `eksctl` によって作成されます。

## ポッドの要件

+  **Pod Identity** – EKS Pod Identity と共に設定されたポッドは、EKS Auth API から認証情報を取得します。アウトバウンドインターネットアクセスがない場合は、EKS Auth API の VPC エンドポイントを作成して使用する必要があります: `com.amazonaws.region-code.eks-auth`。EKS と EKS Auth VPC エンドポイントの詳細については、「[AWS プライベートリンクを使用して Amazon EKS にアクセスする](vpc-interface-endpoints.md)」を参照してください。
+  **IRSA** - [サービスアカウントの IAM ロール](iam-roles-for-service-accounts.md)で設定されたポッドは、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 エンドポイントを設定する](configure-sts-endpoint.md)」を参照してください。
+ Pod がアクセスする必要のあるすべての AWS サービスについて、クラスターの VPC サブネットに VPC インターフェイスエンドポイントが必要です。詳細については、「[インターフェイス VPC エンドポイントを使用して AWS サービスにアクセスする](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html)」を参照してください。下表には、一般的に使用されるサービスとエンドポイントがリスト表示されています。エンドポイントの詳細なリストについては、[AWS PrivateLink ガイド](https://docs.aws.amazon.com/vpc/latest/privatelink/)の「[AWS PrivateLink と連携する AWS サービス](https://docs.aws.amazon.com/vpc/latest/privatelink/aws-services-privatelink-support.html)」を参照してください。

  VPC エンドポイントのために [[プライベート DNS 名を有効にする]](https://docs.aws.amazon.com/vpc/latest/privatelink/interface-endpoints.html#enable-private-dns-names) ことをお勧めします。これにより、ワークロードはパブリック AWS サービスエンドポイントを問題なく引き続き使用できます。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/eks/latest/userguide/private-clusters.html)
+ セルフマネージド型ノードはすべて、必要な VPC インターフェイスエンドポイントを持つサブネットにデプロイする必要があります。マネージド型ノードグループを作成する場合には、VPC インターフェイスエンドポイントのセキュリティグループでサブネットの CIDR を許可するか、ノードのセキュリティグループを作成し VPC インターフェイスエンドポイントのセキュリティグループに追加する必要があります。
+  **EFS ストレージ ** - Pod で Amazon EFS ボリュームを使用する場合、「[Store an elastic file system with Amazon EFS](efs-csi.md)」をデプロイする前に、Amazon EKS クラスターと同じ AWS リージョンを使用するように、ドライバーの [kustomization.yaml](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/deploy/kubernetes/overlays/stable/kustomization.yaml) ファイルを変更して、コンテナイメージを設定する必要があります。
+ Route 53 は AWS PrivateLink をサポートしていません。プライベート Amazon EKS クラスターから Route 53 DNS レコードを管理することはできません。これは Kubernetes [external-dns](https://github.com/kubernetes-sigs/external-dns) に影響します。
+ EKS 最適化 AMI を使用した場合は、上記の表に挙げた `ec2` エンドポイントを有効にする必要があります。あるいは、ノードの DNS 名を手動で設定することもできます。最適化 AMI では、EC2 API を使用して、ノードの DNS 名を自動的に設定します。
+ [AWS Load Balancer Controller](aws-load-balancer-controller.md) を使用して、AWS Application Load Balancer (ALB) および Network Load Balancer をプライベートクラスターにデプロイできます。デプロイするときは、[コマンドラインフラグ](https://kubernetes-sigs.github.io/aws-load-balancer-controller/latest/deploy/configurations/#controller-command-line-flags)を使用して、`enable-shield`、`enable-waf`、および `enable-wafv2` を false に設定する必要があります。Ingress オブジェクトのホスト名を使用した[証明書の検出](https://kubernetes-sigs.github.io/aws-load-balancer-controller/latest/guide/ingress/cert_discovery/#discover-via-ingress-rule-host)は、サポートされていません。これは、コントローラーが VPC インターフェイスエンドポイントを持たない AWS Certificate Manager に到達する必要があるからです。

  このコントローラーでは、Fargate で必要な IP ターゲットを持つネットワークロードバランサをサポートします。詳細については、「[Application Load Balancer を使用してアプリケーションと HTTP トラフィックをルーティングする](alb-ingress.md)」および「[ネットワークロードバランサーを作成する](network-load-balancing.md#network-load-balancer)」を参照してください。
+  [Cluster Autoscaler](https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/cloudprovider/aws/README.md) がサポートされています。クラスター自動スケーラー Pod をデプロイする場合は、コマンドラインに `--aws-use-static-instance-list=true` が含まれていることを確認してください。詳細については、GitHub で[「静的インスタンス・リストを使用」](https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/cloudprovider/aws/README.md#use-static-instance-list)を参照してください。ワーカーノード VPC には、AWS STS VPC エンドポイントと自動スケーリング VPC エンドポイントも含める必要があります。
+ 一部のコンテナソフトウェア製品では、AWS Marketplace Metering Service にアクセスする API コールを使用して、使用状況をモニタリングします。プライベートクラスターではこれらの呼び出しが許可されないため、これらのコンテナタイプはプライベートクラスターには使用できません。