翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
EKS 完全プライベートクラスター
eksctl は、アウトバウンドインターネットアクセスがなく、プライベートサブネットのみを持つ完全プライベートクラスターの作成をサポートしています。VPC エンドポイントは、AWS サービスへのプライベートアクセスを有効にするために使用されます。
このガイドでは、アウトバウンドインターネットアクセスなしでプライベートクラスターを作成する方法について説明します。
完全プライベートクラスターの作成
完全プライベートクラスターを作成するために必要なフィールドは のみですprivateCluster.enabled
。
privateCluster: enabled: true
クラスターの作成後、Kubernetes API サーバーへのアクセスを必要とする eksctl コマンドは、クラスターの VPC 内、ピア接続された VPC、または AWS Direct Connect などの他の方法を使用して実行する必要があります。EKS APIs へのアクセスを必要とする eksctl コマンドは、クラスターの VPC 内から実行されている場合、機能しません。これを修正するには、Amazon EKS のインターフェイスエンドポイントを作成して、Amazon Virtual Private Cloud (VPC) から Amazon Elastic Kubernetes Service (Amazon EKS) 管理 APIs にプライベートにアクセスします。今後のリリースでは、eksctl はこのエンドポイントを作成するためのサポートを追加するため、手動で作成する必要はありません。OpenID Connect プロバイダー URL へのアクセスを必要とするコマンドは、Amazon EKS の AWS PrivateLink を有効にすると、クラスターの VPC の外部から実行する必要があります。
マネージド型ノードグループの作成は引き続き機能し、クラスターの VPC 内、ピア接続された VPC、または AWS Direct Connect などの他の方法を使用してコマンドを実行する場合、EKS インターフェイスエンドポイント
注記
VPC エンドポイントは、使用量に基づいて時間単位で課金されます。料金の詳細については、AWS PrivateLink の料金
警告
完全プライベートクラスターは、 ではサポートされていませんeu-south-1
。
追加の AWS サービスへのプライベートアクセスの設定
ワーカーノードが AWS のサービスにプライベートにアクセスできるようにするには、eksctl は次のサービスの VPC エンドポイントを作成します。
-
コンテナイメージをプルするための ECR (
ecr.api
と の両方ecr.dkr
) のインターフェイスエンドポイント (AWS CNI プラグインなど) -
S3 が実際のイメージレイヤーをプルするためのゲートウェイエンドポイント
-
aws-cloud-provider
統合に必要な EC2 のインターフェイスエンドポイント -
サービスアカウント (IRSA) の Fargate ロールと IAM ロールをサポートする STS のインターフェイスエンドポイント
-
CloudWatch ログ記録が有効になっている場合の CloudWatch ログ記録 (
logs
) のインターフェイスエンドポイント
これらの VPC エンドポイントは機能するプライベートクラスターに不可欠であるため、eksctl はそれらの設定または無効化をサポートしていません。ただし、クラスターには他の AWS のサービスへのプライベートアクセスが必要になる場合があります (Cluster Autoscaler に必要な Autoscaling など)。これらのサービスはprivateCluster.additionalEndpointServices
、eksctl にそれぞれの VPC エンドポイントを作成するように指示する で指定できます。
たとえば、Autoscaling と CloudWatch ログ記録へのプライベートアクセスを許可するには:
privateCluster: enabled: true additionalEndpointServices: # For Cluster Autoscaler - "autoscaling" # CloudWatch logging - "logs"
でサポートされているエンドポイントadditionalEndpointServices
は、autoscaling
、、cloudformation
および ですlogs
。
エンドポイント作成のスキップ
必要な AWS エンドポイントがセットアップされ、EKS ドキュメントで説明されているサブネットにリンクされた VPC がすでに作成されている場合、 eksctl
はskipEndpointCreation
次のようなオプションを指定して作成をスキップできます。
privateCluster: enabled: true skipEndpointCreation: true
この設定は、 と一緒に使用することはできませんadditionalEndpointServices
。エンドポイントの作成はすべてスキップされます。また、この設定は、エンドポイント<→
サブネットトポロジが正しく設定されている場合にのみ推奨されます。サブネット ID が正しい場合、vpce
ルーティングはプレフィックスアドレスで設定され、必要なすべての EKS エンドポイントが作成され、提供された VPC にリンクされます。 eksctl
はこれらのリソースを変更しません。
ノードグループ
クラスターの VPC はパブリックサブネットなしで作成されるため、完全プライベートクラスターではプライベートノードグループ (マネージド型とセルフマネージド型の両方) のみがサポートされます。privateNetworking
フィールド (nodeGroup[].privateNetworking
と managedNodeGroup[
) は明示的に設定する必要があります。フルプライベートクラスターで未privateNetworking
設定のままにすることはエラーです。
nodeGroups: - name: ng1 instanceType: m5.large desiredCapacity: 2 # privateNetworking must be explicitly set for a fully-private cluster # Rather than defaulting this field to `true`, # we require users to explicitly set it to make the behaviour # explicit and avoid confusion. privateNetworking: true managedNodeGroups: - name: m1 instanceType: m5.large desiredCapacity: 2 privateNetworking: true
クラスターエンドポイントのアクセス
完全プライベートクラスターは、クラスター作成clusterEndpointAccess
時の変更をサポートしていません。完全プライベートクラスターはプライベートアクセスのみを持つことができclusterEndpoints.privateAccess
、これらのフィールドの変更を許可するとクラスターが壊れる可能性があるため、 clusterEndpoints.publicAccess
または のいずれかを設定するのはエラーです。
ユーザー提供の VPC とサブネット
eksctl は、既存の VPC とサブネットを使用した完全プライベートクラスターの作成をサポートしています。プライベートサブネットのみを指定でき、 でサブネットを指定するのはエラーですvpc.subnets.public
。
eksctl は、指定された VPC に VPC エンドポイントを作成し、指定されたサブネットのルートテーブルを変更します。eksctl はメインルートテーブルを変更しないため、各サブネットには明示的なルートテーブルが関連付けられている必要があります。
apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: private-cluster region: us-west-2 privateCluster: enabled: true additionalEndpointServices: - "autoscaling" vpc: subnets: private: us-west-2b: id: subnet-0818beec303f8419b us-west-2c: id: subnet-0d42ef09490805e2a us-west-2d: id: subnet-0da7418077077c5f9 nodeGroups: - name: ng1 instanceType: m5.large desiredCapacity: 2 # privateNetworking must be explicitly set for a fully-private cluster # Rather than defaulting this field to true for a fully-private cluster, we require users to explicitly set it # to make the behaviour explicit and avoid confusion. privateNetworking: true managedNodeGroups: - name: m1 instanceType: m5.large desiredCapacity: 2 privateNetworking: true
完全プライベートクラスターの管理
クラスターの作成後にすべてのコマンドを使用するには、eksctl に EKS API サーバーエンドポイントへのプライベートアクセスとアウトバウンドインターネットアクセス ( の場合) が必要ですEKS:DescribeCluster
。API サーバーへのアクセスを必要としないコマンドは、eksctl にアウトバウンドインターネットアクセスがある場合にサポートされます。
完全プライベートクラスターを強制削除する
eksctl はクラスターのすべてのリソースに自動的にアクセスできないため、eksctl を介して完全プライベートクラスターを削除するとエラーが発生する可能性があります。 はこれを解決するために--force
存在します。クラスターは強制的に削除され、エラーが発生したときに続行されます。
制限
現在の実装の制限は、eksctl が最初にパブリックエンドポイントアクセスとプライベートエンドポイントアクセスの両方を有効にしてクラスターを作成し、すべてのオペレーションが完了した後にパブリックエンドポイントアクセスを無効にすることです。これは、eksctl が自己管理型ノードをクラスターに参加させ、GitOps と Fargate をサポートするために、Kubernetes API サーバーにアクセスする必要があるために必要です。これらのオペレーションが完了すると、eksctl はクラスターエンドポイントへのアクセスをプライベートのみに切り替えます。この追加更新は、完全プライベートクラスターの作成に標準クラスターよりも時間がかかることを意味します。将来、eksctl は VPC 対応の Lambda 関数に切り替えて、これらの API オペレーションを実行する場合があります。
HTTP プロキシサーバーを介したアウトバウンドアクセス
eksctl は、設定された HTTP(S) プロキシサーバーを介して AWS APIs と通信できますが、プロキシ除外リストを正しく設定する必要があります。
通常、値 を含む適切なno_proxy
環境変数を設定することで、クラスターの VPC エンドポイントに対するリクエストがプロキシ経由でルーティングされないようにする必要があります.eks.amazonaws.com
。
プロキシサーバーが「SSL 傍受」を実行し、サービスアカウント (IRSA) の IAM ロールを使用している場合は、ドメイン の SSL Man-in-the-Middle明示的にバイパスする必要がありますoidc.<region>.amazonaws.com
。そうしないと、eksctl が OIDC プロバイダーの誤ったルート証明書のサムプリントを取得し、IAM 認証情報を取得できないために AWS VPC CNI プラグインが起動しなくなり、クラスターが動作しなくなります。