プライベートクラスター
このトピックでは、アウトバウンドインターネットアクセスを持たない、プライベートな 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-cacertificate-authority
その他の引数については、GitHub の「ブートストラップのスクリプト
」を参照してください。 -
Windows ノードの場合:
-APIServerEndpoint
api-server-endpoint
-Base64ClusterCAcertificate-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.apicom.amazonaws.
region-code
.ecr.dkrApplication Load Balancerおよび ネットワークロードバランサー com.amazonaws.
region-code
.elasticloadbalancingAWS X-Ray com.amazonaws.
region-code
.xrayAmazon CloudWatch Logs – com.amazonaws.
region-code
.logsサービスアカウントの IAM ロール com.amazonaws.
region-code
.stsApp Mesh –
-
Kubernetes 用 App Mesh サイドカーインジェクターがサポートされています。詳細については、GitHub の「App Mesh sidecar injector (App Mesh サイドカーインジェクター)
」を参照してください。 -
Kubernetes 用 App Mesh コントローラーはサポートされていません。詳細については、GitHub の「App Mesh controller (App Mesh コントローラー)
「を参照してください。 -
Cluster Autoscaler がサポートされています。クラスター自動スケーラーポッドをデプロイする場合、コマンドラインに
--aws-use-static-instance-list=true
が含まれていることを確認してください。詳細については、GitHub で「静的インスタンス・リストを使用」を参照してください。ワーカーノード VPC には、STS VPC エンドポイントと自動スケーリング VPC エンドポイントを含める必要があります。
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-shield
、enable-waf
、enable-wafv2
を設定し、falseに設定する必要があります。加えて、証明書の検出は、Ingress オブジェクトのホスト名に置き換えることはできません。これは、コントローラーが VPC エンドポイントを持たない ACM に到達する必要があるためです。
コンテナイメージのローカルコピーの作成
プライベートクラスターにはアウトバウンドインターネットアクセスがないため、コンテナイメージを Docker Hub などの外部ソースからプルすることはできません。代わりに、コンテナイメージをローカルで Amazon ECR にコピーするか、VPC 内のアクセス可能な代替レジストリにコピーする必要があります。コンテナイメージは、プライベート VPC の外部から Amazon ECR にコピーできます。プライベートクラスターは、Amazon ECR の VPC エンドポイントを使用して Amazon ECR リポジトリにアクセスします。ローカルコピーの作成に使用するワークステーションに Docker と AWS CLI がインストールされている必要があります。
コンテナイメージのローカルコピーを作成するには
-
Amazon ECR リポジトリを作成します。詳細については、「リポジトリの作成」を参照してください。
-
docker pull
を使用して外部レジストリからコンテナイメージをプルします。 -
docker tag
を使用しながら、Amazon ECR レジストリ、リポジトリ、およびオプションのイメージタグ名を組み合わせたタグをイメージに付与します。 -
レジストリに対して認証します。詳細については、「レジストリの認証」を参照してください。
-
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 --regionregion-code
| docker login --username AWS --password-stdin111122223333
.dkr.ecr.region-code
.amazonaws.com docker push111122223333
.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 リージョン とともに、値が regional
の AWS_STS_REGIONAL_ENDPOINTS
環境可変を設定します。
例えば、ポッドの仕様では、次のようになります。
... containers: - env: - name:
'
value:region-code
- name:AWS_STS_REGIONAL_ENDPOINTS
value: regional ... ```
は、クラスターが存在する AWS リージョン (region-code
us-west-2
など) に置き換えてください。