クラスターー 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 アドレスがあることを確認します。IPv4 ファミリーを使用するクラスターをデプロイする場合には、Amazon EKS で作成するネットワークインターフェイス向けに小型 (/28) で専用のサブネットを作成し、クラスターの作成時にのみ、これらのサブネットを指定することをお勧めします。ノードやロードバランサーなどのその他のリソースは、クラスターの作成時に指定されたサブネットとは別のサブネットで起動する必要があります。

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

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

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

  • v1.14 以前を使用して作成されたクラスタでは、VPC に kubernetes.io/cluster/cluster-name タグが含まれます。このタグは Amazon EKS でのみ使用されるもので、安全に削除できます。

  • 既存のクラスターに CIDR ブロックを追加することによって更新が行われる範囲は、表示されるまでに 5 時間程度かかることがあります。

  • Kubernetes がポッドとサービスに IPv6 アドレスを割り当てるようにしたい場合は、VPC とサブネットに IPv4 および IPv6 CIDR ブロックを割り当てる必要があります。詳細については、「Amazon VPC ユーザーガイド」の「IPv6 CIDR ブロックと VPC の関連付け」を参照してください。ルートテーブルとセキュリティグループには IPv6 アドレスも含まれている必要があります。詳細については、「Amazon VPC ユーザーガイド」の「既存の VPC を IPv4 から IPv6 に移行する」を参照してください。

  • ノードは、コントロールプレーンおよび他の AWS のサービスと通信できる必要があります。ノードがプライベートサブネットにデプロイされていて、ポッドからインターネットへのアウトバウンドアクセスを可能にしたい場合、そのプライベートサブネットでは、以下の要件のいずれかを満たす必要があります。

    • IPv4 CIDR ブロックのみを使用するサブネットには、NAT ゲートウェイへのデフォルトルートが必要です。NAT ゲートウェイには、ノードからインターネットへのアクセスが可能になるように、パブリックな IPv4 アドレスを割り当てる必要があります。

      IPv6 CIDR ブロックを使用するサブネットには、送信専用インターネットゲートウェイへのデフォルトルートが必要です。

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

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

VPC IP アドレス指定

パブリックサブネット内のノードにデプロイされたポッドに、アウトバウンドのインターネットアクセス権を付与するには、パブリックな IPv4 アドレスまたは IPv6 アドレスが自動割り当てされるように、そのパブリックサブネットを設定する必要があります。次のコマンドを使用して、パブリックサブネットが IPv4 もしくは IPv6 のパブリックアドレスを自動割り当てするように設定されているかどうかを確認します。example values を自分の値に置き換えてください。

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

出力

IPv4
"MapPublicIpOnLaunch": true, "SubnetId": "subnet-ID1", "MapPublicIpOnLaunch": false, "SubnetId": "subnet-ID2", ...
IPv6
"SubnetId": "subnet-ID1", "AssignIpv6AddressOnCreation": true, "SubnetId": "subnet-ID2", "AssignIpv6AddressOnCreation": false, ...

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

IPv4
aws ec2 modify-subnet-attribute --subnet-id subnet-ID2 --map-public-ip-on-launch
IPv6
aws ec2 modify-subnet-attribute --subnet-id subnet-ID2 --assign-ipv6-address-on-creation
重要

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

Amazon EKS クラスターで使用される VPC 内では、プライベート (RFC 1918) とパブリック (非 RFC 1918) 両方の、CIDR (classless inter-domain routing) IPv4 範囲を定義できます。詳細については、Amazon VPC ユーザーガイドの「IPv4 CIDR ブロックの VPC への追加」を参照してください。VPC とサブネットの CIDR ブロックを選択する際には、デプロイするすべての Amazon EC2 ノードとポッドのために十分な IPv4 アドレスが、そのブロックに含まれていることを確認してください。ポッドごとに少なくとも 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 で利用可能な IPv4 アドレスを増やす

Amazon VPC で IPv4 アドレスが不足しそうな場合は、二次的な CIDR を既存の VPC に関連付けることができます。詳細については、Amazon VPC ユーザーガイドの「IPv4 CIDR ブロックの VPC への追加」を参照してください。新しく関連付けられた CIDR を使用すると、新しく関連付けられた CIDR のサブセットを使用してサブネットを作成できます。新しいサブネットを作成したら、新しく関連付けられた CIDR とサブネットを使用する追加のノードグループ(マネージド型またはセルフマネージド型)を作成できます。