翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
VPC およびサブネットに関する考慮事項
EKS クラスターを操作するには、Kubernetes AWSVPCネットワークに加えて、ネットワークに関する知識が必要です。
クラスターの設計VPCまたは既存の へのデプロイを開始する前に、EKSコントロールプレーンの通信メカニズムを理解しておくことをお勧めしますVPCs。
で使用する VPCおよび サブネットを設計する場合は、クラスターVPCに関する考慮事項と Amazon EKS セキュリティグループの考慮事項を参照してくださいEKS。
概要
EKS クラスターアーキテクチャ
EKS クラスターは 2 つの で構成されますVPCs。
-
Kubernetes コントロールプレーンをホストVPCする AWSマネージド。これはカスタマーアカウントには表示VPCされません。
-
Kubernetes ノードをホストVPCするカスタマーマネージド型。これは、コンテナが実行される場所であり、クラスターで使用されるロードバランサーなどの他のカスタマーマネージドAWSインフラストラクチャも実行します。これはカスタマーアカウントVPCに表示されます。クラスターを作成するVPC前に、カスタマーマネージド型を作成する必要があります。eksctl は、指定しない場合VPCに を作成します。
顧客のノードには、 AWS のマネージドAPIサーバーエンドポイントに接続する機能VPCが必要ですVPC。これにより、ノードは Kubernetes コントロールプレーンに登録し、アプリケーションポッドを実行するリクエストを受信できます。
ノードは、 (a) EKSパブリックエンドポイント、または (b) によって管理されるクロスアカウントエラスティックネットワークインターフェイス (X-ENI) を介してEKSコントロールプレーンに接続しますEKS。クラスターを作成するときは、少なくとも 2 つのVPCサブネットを指定する必要があります。EKS は、クラスターの作成時に指定された各サブネット (クラスターサブネットとも呼ばれます) に X-ENI を配置します。Kubernetes APIサーバーは、これらのクロスアカウントENIsを使用して、カスタマーマネージドクラスターVPCサブネットにデプロイされたノードと通信します。
ノードが起動すると、EKSブートストラップスクリプトが実行され、Kubernetes ノード設定ファイルがインストールされます。各インスタンスの起動プロセスの一環として、コンテナランタイムエージェント、kubelet、Kubernetes ノードエージェントを起動します。
ノードを登録するには、Kubelet が Kubernetes クラスターエンドポイントに連絡します。外部のパブリックエンドポイントVPCまたは 内のプライベートエンドポイントとの接続を確立しますVPC。Kubelet はAPI指示を受け取り、ステータスの更新とハートビートを定期的にエンドポイントに提供します。
EKS コントロールプレーン通信
EKS には、クラスターエンドポイント へのアクセスを制御する 2 つの方法があります。エンドポイントアクセスコントロールを使用すると、パブリックインターネットからエンドポイントにアクセスできるか、 経由でのみエンドポイントにアクセスできるかを選択できますVPC。パブリックエンドポイント (デフォルト)、プライベートエンドポイント、またはその両方を一度にオンにできます。
クラスターAPIエンドポイントの設定により、ノードがコントロールプレーンと通信するためのパスが決まります。これらのエンドポイント設定は、EKSコンソールまたは を通じていつでも変更できることに注意してくださいAPI。
パブリックエンドポイント
これは、新しい Amazon EKSクラスターのデフォルトの動作です。クラスターのパブリックエンドポイントのみが有効になっている場合、クラスター内 VPC (ワーカーノードからコントロールプレーン通信など) から発生する Kubernetes APIリクエストは を離れますがVPC、Amazon のネットワークは離れません。ノードをコントロールプレーンに接続するには、パブリック IP アドレスとインターネットゲートウェイへのルート、またはNATゲートウェイのパブリック IP アドレスを使用できるNATゲートウェイへのルートが必要です。
パブリックエンドポイントとプライベートエンドポイント
パブリックエンドポイントとプライベートエンドポイントの両方が有効になっている場合、Kubernetes APIは 内から 内の X-ENIs を介してコントロールプレーンにVPC通信しますVPC。クラスターAPIサーバーはインターネットからアクセスできます。
プライベートエンドポイント
プライベートエンドポイントのみが有効になっている場合、インターネットからAPIサーバーへのパブリックアクセスはありません。クラスターAPIサーバーへのすべてのトラフィックは、クラスターVPCまたは接続されたネットワーク内から送信する必要があります。ノードは、 内の X-ENIs を介してAPIサーバーと通信しますVPC。クラスター管理ツールにはプライベートエンドポイントへのアクセス権が必要です。Amazon の外部からプライベート Amazon EKSクラスターエンドポイントに接続する方法について説明しますVPC。
クラスターのAPIサーバーエンドポイントは、パブリックDNSサーバーによって からプライベート IP アドレスに解決されることに注意してくださいVPC。以前は、エンドポイントは 内からのみ解決できましたVPC。
VPC 設定
Amazon VPCは IPv4と IPv6 アドレス指定をサポートしています。Amazon IPv4 はデフォルトで EKS をサポートしています。には IPv4CIDRブロックが関連付けられているVPC必要があります。必要に応じて、複数のIPv4クラスレスドメイン間ルーティング/16
プレフィックス (65,536 IP アドレス) と/28
プレフィックス (16 IP アドレス) の間です。
新しい を作成するときはVPC、単一のIPv6CIDRブロックをアタッチし、既存の を変更するときは最大 5 つまでアタッチできますVPC。IPv6 CIDR ブロックサイズのプレフィックスの長さは /44 から /60 の間であり、IPv6サブネットの場合は /44/ から /64 の間です。Amazon が管理するIPv6アドレスのプールからIPv6CIDRブロックをリクエストできます。詳細については、 VPC ユーザーガイドのVPCCIDRブロックセクションを参照してください。
Amazon EKSクラスターは、 IPv4と の両方をサポートしていますIPv6。デフォルトでは、EKSクラスターは IPv4 IP を使用します。IPv6 クラスターの作成時に を指定すると、IPv6クラスターの使用が有効になります。IPv6 クラスターにはデュアルスタックVPCsとサブネットが必要です。
Amazon EKS では、クラスターの作成中に異なるアベイラビリティーゾーンにあるサブネットを少なくとも 2 つ使用することをお勧めします。クラスターの作成時に渡すサブネットは、クラスターサブネットと呼ばれます。クラスターを作成すると、Amazon は指定したサブネットENIsに最大 4 つのクロスアカウント (x-account または x-ENIs) EKSを作成します。x-ENIs は常にデプロイされ、ログ配信、exec、プロキシなどのクラスター管理トラフィックに使用されます。完全な要件VPCとサブネット要件の詳細については、EKSユーザーガイドを参照してください。
Kubernetes ワーカーノードはクラスターサブネットで実行できますが、推奨されません。クラスターのアップグレード中、Amazon はクラスターサブネットENIsに追加をEKSプロビジョニングします。クラスターがスケールアウトすると、ワーカーノードとポッドがクラスターサブネットIPsで使用可能な を消費する可能性があります。したがって、/28 ネットマスクで専用クラスターサブネットの使用を検討してIPs、十分な可用性を確保できます。
Kubernetes ワーカーノードは、パブリックサブネットまたはプライベートサブネットのいずれかで実行できます。サブネットがパブリックかプライベートかは、サブネット内のトラフィックがインターネットゲートウェイ を介してルーティングされるかどうかを指します。パブリックサブネットには、インターネットゲートウェイを介してインターネットへのルートテーブルエントリがありますが、プライベートサブネットはアクセスできません。
別の場所から発信され、ノードに到達するトラフィックは、イングレス と呼ばれます。ノードから発信され、ネットワークを離れるトラフィックは、エグレス と呼ばれます。インターネットゲートウェイで設定されたサブネット内のパブリック IP アドレスまたはエラスティック IP アドレス (EIPs) を持つノードは、 の外部からの進入を許可しますVPC。プライベートサブネットには、通常ゲートウェイ へのルーティングがあります。ゲートウェイ NAT は、ノードからのトラフィックが を離れることを引き続き許可VPCしながら、 の外部からサブネット内のノードへの進入トラフィックを許可しません VPC (進入 )。
IPv6 世界では、すべてのアドレスがインターネットルーティング可能です。ノードとポッドに関連付けられたIPv6アドレスはパブリックです。プライベートサブネットは、エグレス専用インターネットゲートウェイ (EIGW) を に実装することでサポートされVPC、アウトバウンドトラフィックを可能にしながら、すべての受信トラフィックをブロックします。IPv6 サブネットを実装するためのベストプラクティスは、 VPC ユーザーガイドに記載されています。
VPC とサブネットは、次の 3 つの異なる方法で設定できます。
パブリックサブネットのみを使用する
同じパブリックサブネットでは、ノードと進入リソース (ロードバランサーなど) の両方が作成されます。パブリックサブネットに をタグ付けkubernetes.io/role/elb
プライベートサブネットとパブリックサブネットの使用
ノードはプライベートサブネットに作成されますが、イングレスリソースはパブリックサブネットにインスタンス化されます。クラスターエンドポイントへのパブリック、プライベート、またはその両方 (パブリックとプライベート) アクセスを有効にできます。クラスターエンドポイントの設定に応じて、ノードトラフィックはNATゲートウェイまたは を介して入りますENI。
プライベートサブネットのみを使用する
ノードと進入の両方がプライベートサブネットに作成されます。kubernetes.io/role/internal-elb
間の通信 VPCs
これらの に複数のクラスターVPCsと個別のEKSクラスターをデプロイする必要がある場合は、多くのシナリオがありますVPCs。
Amazon Lattice VPC
Amazon VPC Lattice は、 IPv4および のリンクローカルアドレス空間で動作しIPv6、IPv4アドレスが重複している可能性のあるサービス間の接続を提供します。運用効率を高めるため、重複しない IP 範囲にEKSクラスターとノードをデプロイすることを強くお勧めします。インフラストラクチャVPCsに重複する IP 範囲が含まれている場合は、それに応じてネットワークを設計する必要があります。ルーティング可能な RFC1918 IP アドレスを維持しながら、ワークロードを に統合して重複するCIDR課題を解決EKSするには、プライベートNATゲートウェイ または VPCCNIをトランジットゲートウェイと組み合わせたカスタムネットワークモードですることをお勧めします。
お客様がサービスプロバイダーであり、Kubernetes サービスと進入 ( ALBまたは NLB) を別のアカウントVPCで顧客と共有する場合はAWS PrivateLink、エンドポイントサービスとも呼ばれる の使用を検討してください。
複数のアカウントVPC間での共有
多くの企業は、ネットワーク管理を合理化し、コストを削減し、AWS組織内の複数のAWSアカウントでセキュリティを向上させる手段VPCsとして共有 Amazon を採用しました。Resource AWS Access Manager (RAM) を使用して、サポートされているAWSリソースを個々のAWSアカウント、組織単位 (OUs)、またはAWS組織全体と安全に共有します。
Amazon EKSクラスター、マネージドノードグループ、その他のサポートAWSリソース ( LoadBalancers、セキュリティグループ、エンドポイントなど) を、 AWS を使用して別のAWSアカウントから共有VPCサブネットにデプロイできますRAM。次の図は、高レベルアーキテクチャの例を示しています。これにより、中央ネットワークチームはVPCs、、サブネットなどのネットワーク構築を制御できると同時に、アプリケーションまたはプラットフォームチームがそれぞれのAWSアカウントに Amazon EKSクラスターをデプロイできるようになります。このシナリオの完全なチュートリアルは、この github リポジトリ
共有サブネットを使用する際の考慮事項
-
Amazon EKSクラスターとワーカーノードは、すべて同じ の一部である共有サブネット内に作成できますVPC。Amazon EKSは、複数の にまたがるクラスターの作成をサポートしていませんVPCs。
-
Amazon EKSは AWS VPC Security Groups (SGs) を使用して、Kubernetes コントロールプレーンとクラスターのワーカーノード間のトラフィックを制御します。セキュリティグループは、ワーカーノード、他のVPCリソース、および外部 IP アドレス間のトラフィックを制御するためにも使用されます。これらのセキュリティグループは、アプリケーション/参加者アカウントで作成する必要があります。ポッドに使用するセキュリティグループも参加者アカウントにあることを確認します。Central VPCアカウントにあるセキュリティグループとの間で必要なトラフィックを許可するように、セキュリティグループ内のインバウンドルールとアウトバウンドルールを設定できます。
-
Amazon EKSクラスターが存在する参加者アカウント内にIAMロールと関連ポリシーを作成します。これらのIAMロールとポリシーは、Amazon によって管理される Kubernetes クラスターEKS、および Fargate で実行されているノードとポッドに必要なアクセス許可を付与するために不可欠です。アクセス許可によりEKS、Amazon はユーザーに代わって他の AWS のサービスに呼び出しを行うことができます。
-
Amazon S3 バケット、Dynamodb テーブルなどのAWSリソースへのクロスアカウントアクセスを k8s ポッドから許可するには、次の方法に従います。
-
リソースベースのポリシーアプローチ : AWSサービスがリソースポリシーをサポートしている場合は、適切なリソースベースのポリシーを追加して、kubernetes ポッドに割り当てられたIAMロールへのクロスアカウントアクセスを許可できます。このシナリオでは、OIDCプロバイダー、IAMロール、アクセス許可ポリシーがアプリケーションアカウントにあります。リソースベースのポリシーをサポートするAWSサービスを検索するには、 AWS と連携するサービスIAMを参照し、リソースベースの列に「はい」があるサービスを探します。
-
OIDC プロバイダーアプローチ: OIDC プロバイダー、IAMロール、アクセス許可、信頼ポリシーなどのIAMリソースは、リソースが存在する他の参加者AWSアカウントで作成されます。これらのロールは、クロスアカウントリソースにアクセスできるように、アプリケーションアカウントの Kubernetes ポッドに割り当てられます。このアプローチの完全なウォークスルーについては、Kubernetes サービスアカウントブログのクロスアカウントIAMロール
を参照してください。
-
-
Amazon Elastic Loadbalancer (ELB) リソース (ALB または NLB) をデプロイして、アプリケーションまたは中央ネットワークアカウントのいずれかでトラフィックを k8s ポッドにルーティングできます。中央ネットワークアカウントにELBリソースをデプロイする詳細な手順については、「クロスアカウントLoad Balancerによる Amazon EKS Pods の公開
」のチュートリアルを参照してください。このオプションは、Load Balancerリソースのセキュリティ設定を完全に制御できるため、柔軟性が向上します。 -
custom networking feature
Amazon を使用する場合はVPCCNI、中央ネットワークアカウントに記載されているアベイラビリティーゾーン (AZ) ID マッピングを使用して、各 を作成する必要がありますENIConfig
。これは、各AWSアカウントの AZ 名AZsに物理をランダムにマッピングするためです。
セキュリティグループ
セキュリティグループは、関連付けられたリソースに到達するトラフィックおよびリソースから離れるトラフィックを制御します。Amazon EKSはセキュリティグループを使用して、コントロールプレーンとノード間の通信を管理します。クラスターを作成すると、Amazon は という名前のセキュリティグループEKSを作成しますeks-cluster-sg-my-cluster-uniqueID
。EKS これらのセキュリティグループを マネージドノードENIsと ノードに関連付けます。デフォルトのルールでは、すべてのトラフィックがクラスターとノード間で自由に行き来することができます。また、任意の送信先へのすべてのアウトバウンドトラフィックが許可されています。
クラスターを作成するときは、独自のセキュリティグループを指定できます。独自のセキュリティグループを指定する場合は、セキュリティグループの推奨事項を参照してください。
レコメンデーション
マルチ AZ デプロイを検討する
AWS リージョンは、低レイテンシー、高スループット、および冗長性の高いネットワークに接続されている複数の物理的に分離および分離されたアベイラビリティーゾーン (AZ) を提供します。アベイラビリティーゾーンを使用すると、中断することなくアベイラビリティーゾーン間で自動的にフェイルオーバーするアプリケーションを設計および運用できます。Amazon では、複数のアベイラビリティーゾーンにEKSクラスターをデプロイすることをEKS強くお勧めします。クラスターを作成するときは、少なくとも 2 つのアベイラビリティーゾーンにサブネットを指定することを検討してください。
ノードで実行される Kubelet は、 などのノードオブジェクトにラベルを自動的に追加しますtopology.kubernetes.io/region=us-west-2
ノードの作成時にサブネットまたはアベイラビリティーゾーンを定義できます。サブネットが設定されていない場合、ノードはクラスターサブネットに配置されます。EKS マネージドノードグループの のサポートは、利用可能な容量で複数のアベイラビリティーゾーンにノードを自動的に分散します。Karpenter
AWS Elastic Load Balancer は、Kubernetes クラスターの AWS Load Balancer Controller によって管理されます。Kubernetes イングレスリソースには Application Load Balancer (ALB) を、Load Balancer タイプの Kubernetes サービスには Network Load Balancer (NLB) をプロビジョニングします。Elastic Load Balancer コントローラーはタグ
プライベートサブネットにノードをデプロイする
プライベートサブネットとパブリックサブネットの両方VPCを含む は、 に Kubernetes ワークロードをデプロイする理想的な方法ですEKS。2 つの異なるアベイラビリティーゾーンに 2 つ以上のパブリックサブネットと 2 つのプライベートサブネットを設定することを検討してください。パブリックサブネットの関連ルートテーブルには、インターネットゲートウェイ へのルートが含まれています。ポッドはゲートウェイを介してインターネットとやり取りできますNAT。プライベートサブネットは、 IPv6環境のエグレス専用インターネットゲートウェイ () でサポートされていますEIGW。
プライベートサブネット内のノードをインスタンス化することで、ノードへのトラフィックを最大限制御でき、ほとんどの Kubernetes アプリケーションに効果的です。イングレスリソース (ロードバランサーなど) はパブリックサブネットでインスタンス化され、プライベートサブネットで動作する Pod にトラフィックをルーティングします。
厳密なセキュリティとネットワークの分離が必要な場合は、プライベート専用モードを検討してください。この設定では、AWSリージョンの 内の個別のアベイラビリティーゾーンに 3 つのプライベートサブネットがデプロイされますVPC。サブネットにデプロイされたリソースは、インターネットにアクセスすることも、インターネットがサブネット内のリソースにアクセスすることもできません。Kubernetes アプリケーションが他のAWSサービスにアクセスするには、 PrivateLink インターフェイスやゲートウェイエンドポイントを設定する必要があります。Load Balancer Controller を使用してトラフィックを Pods にリダイレクトするように内部AWSLoad Balancerを設定できます。コントローラーがロードバランサーをプロビジョニングするには、プライベートサブネットにタグ (kubernetes.io/role/internal-elb: 1
クラスターエンドポイントのパブリックモードとプライベートモードを検討する
Amazon EKS は、パブリック専用 public-and-private、プライベート専用クラスターエンドポイントモードを提供しています。デフォルトモードはパブリック専用ですが、クラスターエンドポイントをパブリックモードとプライベートモードで設定することをお勧めします。このオプションを使用すると、クラスター内の Kubernetes APIコール VPC (通信など node-to-control-plane) がプライベートVPCエンドポイントとトラフィックを利用して、クラスターの 内に留まることができますVPC。一方、クラスターAPIサーバーにはインターネットからアクセスできます。ただし、パブリックエンドポイントを使用できるCIDRブロックを制限することを強くお勧めします。CIDRブロックの制限など、パブリックおよびプライベートエンドポイントアクセスを設定する方法について説明します。
セキュリティとネットワークの分離が必要な場合は、プライベート専用エンドポイントをお勧めします。EKS ユーザーガイドに記載されているオプションのいずれかを使用して、APIサーバーにプライベートに接続することをお勧めします。
セキュリティグループを慎重に設定する
Amazon EKSは、カスタムセキュリティグループの使用をサポートしています。カスタムセキュリティグループは、ノードと Kubernetes コントロールプレーン間の通信を許可する必要があります。組織がオープンな通信を許可しない場合は、ポート要件を確認し、ルールを手動で設定してください。
EKS は、クラスターの作成時に指定したカスタムセキュリティグループを管理インターフェイス (X-) に適用しますENIs。ただし、ノードにすぐに関連付けられるわけではありません。ノードグループを作成するときは、カスタムセキュリティグループを手動で関連付け
すべてのノード間通信トラフィックを許可するセキュリティグループを作成することを強くお勧めします。ブートストラッププロセス中、ノードはクラスターエンドポイントにアクセスするためにアウトバウンドインターネット接続を必要とします。オンプレミス接続やコンテナレジストリアクセスなどの外部アクセス要件を評価し、ルールを適切に設定します。本番環境に変更を加える前に、開発環境で接続を慎重に確認することを強くお勧めします。
各アベイラビリティーゾーンにNATゲートウェイをデプロイする
プライベートサブネット (IPv4 および IPv6) にノードをデプロイする場合は、ゾーンに依存しないアーキテクチャを確保し、クロス AZ 支出を削減するために、各アベイラビリティーゾーン (AZ) にNATゲートウェイを作成することを検討してください。AZ の各NATゲートウェイは冗長性を持って実装されます。
Cloud9 を使用してプライベートクラスターにアクセスする
AWS Cloud9 は、AWSSystems Manager を使用して、イングレスアクセスなしでプライベートサブネットで安全にIDE実行できるウェブベースです。Cloud9 インスタンスでエグレスを無効にすることもできます。Cloud9 を使用してプライベートクラスターとサブネットにアクセスする方法について説明します。