クラスター VPC に関する考慮事項 - Amazon EKS

クラスター VPC に関する考慮事項

Amazon EKS では、パブリックサブネットとプライベートサブネットを持つ VPC でクラスターを実行することをお勧めします。これにより、Kubernetes がパブリックサブネットにパブリックロードバランサーを作成し、プライベートサブネットにあるノードで実行されているポッドへのトラフィックを負荷分散します。ただし、この設定は必須ではありません。ネットワークとセキュリティの要件に応じて、クラスターを実行する場所を、プライベートサブネットのみの VPC にも、パブリックサブネットのみの VPC にもできます。プライベートサブネットのみを持つ VPC にデプロイされたクラスターの詳細については、「プライベートクラスター」を参照してください。

Amazon EKS クラスターを作成するときは、Amazon EKS が Elastic Network Interface を配置できる VPC サブネットを指定します。Amazon EKS は、少なくとも 2 つのアベイラビリティーゾーンにサブネットを必要とし、ノードへのコントロールプレーン通信を容易にするため、これらのサブネット全体で最大 4 つのネットワークインターフェイスを作成します。この通信チャネルは、Kubernetes 機能 (kubectl exec および kubectl logs) をサポートしています。Amazon EKS が作成したクラスターセキュリティグループとクラスターの作成時に指定した追加のセキュリティグループは、これらのネットワークインターフェイスに適用されます。Amazon EKS が作成した各ネットワークインターフェイスの説明には Amazon EKS <cluster name> が書き込まれています。

クラスターの作成時に指定したサブネットに、Amazon EKS によって作成されたネットワークインターフェイスに十分な IP アドレスがあることを確認します。Amazon EKS で作成するネットワークインターフェイスで小さな (/28) 専用のサブネットを作成し、クラスターの作成の一部としてこれらのサブネットのみを指定することをお勧めします。ノードやロードバランサーなどのその他のリソースは、クラスターの作成時に指定されたサブネットとは別のサブネットで起動する必要があります。

重要
  • ノードとロードバランサーは、クラスターの VPC 内の任意のサブネットで起動できます。これには、クラスターの作成時に Amazon EKS に登録されていないサブネットも含まれます。サブネットは、ノードのタグを必要としません。Kubernetes の負荷分散自動検出が機能するには、サブネットが「サブネットのタグ付け」に記述されているようにタグ付けされている必要があります。

  • クラスターに関連付けられたサブネットは、クラスターの作成後に変更できません。どのサブネットに Amazon EKS で作成したネットワークインターフェイスを配置するかを正確に制御する必要がある場合は、クラスターの作成時に 2 つのサブネットのみを指定し、それぞれ異なるアベイラビリティーゾーンに配置します。

  • Amazon EKS は、クラスターが最初に作成された後に VPC に追加された追加の CIDR ブロックからサブネットで起動されたノードと通信できないという既知の問題があります。この問題が発生した場合は、サポートチケットを提出してください。それによって、Amazon EKS がクラスターを手動で更新して VPC に追加された追加の CIDR ブロックを認識するようにできます。

  • クラスターの作成時に、AWS Outposts、AWS Wavelength、または AWS ローカルゾーンのサブネットを選択しないでください。

VPC では、DNS ホスト名と DNS 解決がサポートされている必要があります。そうでないと、ノードがクラスターに登録できません。詳細については、Amazon VPC ユーザーガイドの「VPC での DNS の使用」を参照してください。

VPC IP アドレス指定

ノードは、コントロールプレーンおよび他の AWS のサービスと通信できる必要があります。ノードがプライベートサブネットにデプロイされている場合、そのサブネットは次の要件のいずれかを満たす必要があります。

  • NAT ゲートウェイへのデフォルトルートを持つ。NAT ゲートウェイには、ノードがインターネットにアクセスできるようにパブリック IP アドレスを割り当てる必要があります。

  • プライベートクラスター で必要な設定と要件で構成されている。

セルフマネージド型ノードをパブリックサブネットにデプロイしている場合は、パブリック IP アドレスを自動割り当てするようにサブネットを設定する必要があります。それ以外の場合は、ノードインスタンスの起動時に、パブリック IP アドレスを割り当てる必要があります。詳細については、Amazon VPC ユーザーガイドの「インスタンス起動時のパブリック IPv4 アドレスの割り当て」を参照してください。マネージド型ノードをパブリックサブネットにデプロイしている場合は、パブリック IP アドレスを自動割り当てするようにサブネットを設定する必要があります。サブネットがパブリック IP アドレスを自動割り当てするように設定されていない場合、ノードにはパブリック IP アドレスが割り当てられません。次のコマンドを使用して、パブリックサブネットがパブリック IP アドレスを自動割り当てするように設定されているかどうかを確認します。<example values> を (<> を含めて) 自分の値に置き換えます。

aws ec2 describe-subnets \ --filters "Name=vpc-id,Values=<VPC-ID>" | grep 'SubnetId\|MapPublicIpOnLaunch'

出力

"MapPublicIpOnLaunch": <false>,"SubnetId": "<subnet-aaaaaaaaaaaaaaaaa>","MapPublicIpOnLaunch": <false>,"SubnetId": "<subnet-bbbbbbbbbbbbbbbbb>",

MapPublicIpOnLaunchfalse に設定されているサブネットの場合は、設定を true に変更します。

aws ec2 modify-subnet-attribute --map-public-ip-on-launch --subnet-id <subnet-aaaaaaaaaaaaaaaaa>
重要

2020 年 3 月 26 日より前に Amazon EKS AWS CloudFormation テンプレートを使用して VPC をデプロイしている場合は、パブリックサブネットの設定を変更する必要があります。

VPC 内で Amazon EKS クラスターに使用されるプライベート (RFC 1918) とパブリック (非 RFC 1918) の両方の classless inter-domain routing (CIDR) 範囲を定義できます。詳細については、Amazon VPC ユーザーガイドの「IPv4 CIDR ブロックの VPC への追加」を参照してください。VPC とサブネットの CIDR ブロックを選択するときは、デプロイするすべての Amazon EC2 ノードとポッドに十分な IP アドレスがブロックに含まれていることを確認してください。ポッドごとに少なくとも 1 つの IP アドレスが必要です。共有サービス VPC で中継ゲートウェイを実装することで、IP アドレスの使用を節約できます。詳細については、「共有サービスによる分離された VPC」および「Amazon EKS VPC routable IP address conservation patterns in a hybrid network (ハイブリッドネットワークにおける Amazon EKS VPC ルーティング可能な IP アドレス保全パターン)」を参照してください。

サブネットのタグ付け

1.18 以前のクラスターの場合、Amazon EKS はクラスターの作成時に渡されたすべてのサブネットに次のタグを追加します。Amazon EKS は、1.19 クラスターの作成時に渡されたサブネットにタグを追加しません。タグが 1.19 より前のバージョンで作成されたクラスターによって使用されるサブネットに存在し、クラスターを 1.19 に更新した場合、そのタグはサブネットから削除されません。

  • キーkubernetes.io/cluster/<cluster-name>

  • shared

自動的にプロビジョニングされた Elastic Load Balancer を使用するために必要なサブネットタグに加えて、必要に応じてこのタグを使用して、Elastic Load Balancer がプロビジョニングされる場所を制御できます。ロードバランサーのサブネットのタグ付けの詳細については、「Amazon EKS でのアプリケーション負荷分散」および「Amazon EKS でのネットワーク負荷分散」を参照してください。

VPC のタグ付け要件

1.14 以前の Amazon EKS クラスターを作成していた場合、Amazon EKS は、指定したサブネットを含む VPC に次のようにタグ付けしています。

キー
kubernetes.io/cluster/<cluster-name> shared

1.15 以降のクラスターでは、このタグは必須ではないか、Amazon EKS によって作成されません。すでにこのタグを持つ VPC に 1.15 以降のクラスターを作成しても、タグは削除されません。このタグは、バージョン 1.15 以降を実行している Amazon EKS クラスターで使用されている VPC から削除しても問題ありません。