Amazon EKS VPC およびサブネットの要件と考慮事項 - Amazon EKS

Amazon EKS VPC およびサブネットの要件と考慮事項

クラスターを作成する際には、VPC と、異なるアベイラビリティーゾーンに存在する 2 つ以上のサブネットを指定します。このトピックでは、クラスターで使用する VPC およびサブネットに関する Amazon EKS 固有の要件と考慮事項の概要について説明します。Amazon EKS で使用する VPC がない場合は、Amazon EKS で提供された AWS CloudFormation テンプレートを使用して作成できます。AWS Outposts でローカルクラスターまたは拡張クラスターを作成する場合は、このトピックの代わりに「Amazon EKS ローカルクラスター VPC およびサブネットの要件と考慮事項」を参照してください。

VPC の要件と考慮事項

クラスターを作成する際には、指定する VPC が次の要件と考慮事項を満たす必要があります。

  • VPC には、作成するクラスター、ノード、およびその他の Kubernetes リソースで利用できる十分な数の IP アドレスが必要です。使用する VPC に十分な数の IP アドレスがない場合は、使用可能な IP アドレスの数を増やしてみてください。

    これを行うには、クラスター設定を更新して、クラスターが使用するサブネットとセキュリティグループを変更します。AWS Management Console、AWS CLI の最新バージョン、AWS CloudFormation、および eksctl のバージョン v0.164.0-rc.0 以降から更新できます。クラスターバージョンを正常にアップグレードするには、これを実行して、サブネットに利用可能な IP アドレスを増やす必要がある場合があります。

    重要

    追加するサブネットはすべて、クラスターの作成時に最初に提供したのと同じ一連の AZ 内にある必要があります。新しいサブネットは、その他のすべての要件 (例えば、十分な IP アドレスを持っている必要がある) を満たす必要があります。

    例えば、1 つのクラスターを作成し、4 つのサブネットを指定したとします。指定した順序では、1 番目のサブネットは us-west-2a アベイラビリティーゾーンにあり、2 番目と 3 番目のサブネットは us-west-2b アベイラビリティーゾーンにあり、4 番目のサブネットは us-west-2c アベイラビリティーゾーンにあります。サブネットを変更する場合は、3 つのアベイラビリティーゾーンのそれぞれに少なくとも 1 つのサブネットを指定する必要があります。また、サブネットは元のサブネットと同じ VPC 内にある必要があります。

    VPC 内の CIDR ブロックよりも多くの IP アドレスが必要な場合は、VPC に追加の Classless Inter-Domain Routing (CIDR) ブロックを関連付けることで CIDR ブロックを追加できます。クラスターの作成前または作成後に、プライベート (RFC 1918) CIDR ブロックとパブリック (非 RFC 1918) CIDR ブロックを VPC に関連付けることができます。クラスターで VPC に関連付けた CIDR ブロックが認識されるまでに、最大 5 時間かかることがあります。

    共有サービス VPC でトランジットゲートウェイを使用することで、IP アドレスの利用率を節約できます。詳細については、「共有サービスによる分離された VPC」および「Amazon EKS VPC routable IP address conservation patterns in a hybrid network (ハイブリッドネットワークにおける Amazon EKS VPC ルーティング可能な IP アドレス保全パターン)」を参照してください。

  • Kubernetes で IPv6 アドレスを Pods およびサービスに割り当てる場合は、IPv6 CIDR ブロックを VPC に関連付けます。詳細については、「Amazon VPC ユーザーガイド」の「IPv6 CIDR ブロックと VPC の関連付け」を参照してください。

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

  • VPC では、AWS PrivateLink を使用する VPC エンドポイントが必要になる場合があります。詳細については、「サブネットの要件と考慮事項」を参照してください。

Kubernetes 1.14 以前でクラスターを作成した場合、Amazon EKS は次のタグを VPC に追加しています。

キー Value
kubernetes.io/cluster/my-cluster owned

このタグは Amazon EKS でのみ使用されています。サービスに影響を与えずに、このタグを削除できます。このタグは、バージョン 1.15 以降のクラスターでは使用されません。

サブネットの要件と考慮事項

クラスターを作成すると、Amazon EKS は、指定したサブネットに 2~4 つの Elastic Network Interface を作成します。これらのネットワークインターフェイスは、クラスターと VPC 間の通信を可能にします。これらのネットワークインターフェイスでは、kubectl execkubectl logs などの Kubernetes の機能も有効化されます。Amazon EKS が作成した各ネットワークインターフェイスの説明には、テキスト Amazon EKS cluster-name が書き込まれます。

Amazon EKS は、クラスターの作成時に指定した任意のサブネットにネットワークインターフェイスを作成することができます。クラスターの作成後に、Amazon EKS がネットワークインターフェイスを作成するサブネットを変更できます。クラスターの Kubernetes バージョンを更新すると、Amazon EKS は作成した元のネットワークインターフェイスを削除し、新しいネットワークインターフェイスを作成します。これらのネットワークインターフェイスは、元のネットワークインターフェイスと同じサブネット内に作成することも、元のネットワークインターフェイスとは異なるサブネット内に作成することもできます。ネットワークインターフェイスを作成するサブネットを制御する場合は、クラスターを作成するとき、またはクラスターの作成後にサブネットを更新するときに、指定するサブネットの数を 2 つだけに制限します。

クラスターのサブネットの要件

クラスターの作成または更新時に指定するサブネットは、次の要件を満たす必要があります。

  • サブネットには、Amazon EKS での使用のために、それぞれ 6 個以上の IP アドレスが必要です。ただし、IP アドレスは 16 個以上を推奨します。

  • サブネットは AWS Outposts、AWS Wavelength、または AWS ローカルゾーンに存在することはできません。ただし、VPC 内にサブネットが存在する場合は、セルフマネージド型ノード および Kubernetes のリソースをこれらのタイプのサブネットにデプロイできます。

  • サブネットは、パブリックでもプライベートでもかまいません。ただし、可能であれば、プライベートサブネットを指定することをお勧めします。パブリックサブネットは、インターネットゲートウェイへのルートが含まれているルートテーブルを含むサブネットです。一方、プライベートサブネットは、インターネットゲートウェイへのルートが含まれていないルートテーブルを含むサブネットです。

  • サブネットは以下のアベイラビリティーゾーンには配置できません。

    AWS リージョン リージョン名 拒否されたアベイラビリティーゾーン ID
    us-east-1 米国東部(バージニア北部) use1-az3
    us-west-1 米国西部 (北カリフォルニア) usw1-az2
    ca-central-1 カナダ (中部) cac1-az3

各コンポーネントの IP アドレスファミリー使用状況

以下の表に、Amazon EKS の各コンポーネントで使用される IP アドレスファミリーを示します。ネットワークアドレス変換 (NAT) またはその他の互換システムを使用すると、表の値が "No" のファミリーに属する送信元 IP アドレスから、これらのコンポーネントに接続できます。

機能は、クラスターの IP family (ipFamily) 設定によって異なる場合があります。この設定は、Services が Kubernetes に割り当てる CIDR ブロックに使用される IP アドレスのタイプを変更します。設定値が IPv4 のクラスターは IPv4 cluster、設定値が IPv6 のクラスターは IPv6 cluster と呼ばれます。

コンポーネント IPv4 アドレスのみ IPv6 アドレスのみ デュアルスタックアドレス
EKS API パブリックエンドポイント はい いいえ いいえ
EKS API VPC エンドポイント はい いいえ いいえ
EKS Auth API パブリックエンドポイント はい 1 はい 1 はい 1
EKS Auth API VPC エンドポイント はい 1 はい 1 はい 1
EKS クラスターパブリックエンドポイント はい いいえ いいえ
EKS クラスタープライベートエンドポイント はい 2 はい 2 いいえ
EKS クラスターサブネット はい 2 いいえ はい 2
ノードのプライマリ IP アドレス はい 2 いいえ はい 2
Service IP アドレス用のクラスター CIDR 範囲 はい 2 はい 2 いいえ
VPC CNI による Pod IP アドレス はい 2 はい 2 いいえ
注記

1 エンドポイントは、IPv4 アドレスと IPv6 アドレスの両方を持つデュアルスタックです。AWS 外部のアプリケーション、クラスターのノード、およびクラスター内のポッドは、IPv4 または IPv6 のいずれかによってこのエンドポイントに到達できます。

2 クラスターの作成時に、クラスターの IP family (ipFamily) 設定で IPv4 クラスターとIPv6 クラスターのどちらかを選択します。これは後から変更できません。代わりに、他のクラスターを作成してワークロードを移行する際は、別の設定を選択する必要があります。

ノードのサブネットの要件

クラスターの作成時に指定するのと同じサブネットに、ノードと Kubernetes リソースをデプロイできます。ただし、これは必須ではありません。これは、クラスターの作成時に指定しなかったサブネットにも、ノードと Kubernetes リソースをデプロイできるためです。ノードを異なるサブネットにデプロイする場合、Amazon EKS は、それらのサブネットにクラスターネットワークインターフェイスを作成しません。ノードと Kubernetes リソースをデプロイするサブネットはすべて、次の要件を満たす必要があります。

  • サブネットには、すべてのノードと Kubernetes リソースをデプロイするのに十分な数の使用可能な IP アドレスが必要です。

  • Kubernetes が IPv6 アドレスを Pods とサービスに割り当てるようにする場合は、サブネットに関連付けられた 1 つの IPv6 CIDR ブロックと 1 つの IPv4 CIDR ブロックが必要です。詳細については、「Amazon VPC ユーザーガイド」の「IPv6 CIDR ブロックをサブネットに関連付ける」を参照してください。サブネットに関連付けられているルートテーブルには、IPv4 および IPv6 のアドレスへのルートを含める必要があります。詳細については、「Amazon VPC ユーザーガイド」の「Routes」(ルート) を参照してください。ポッドに割り当てられるのは IPv6 アドレスのみです。ただし、Amazon EKS がクラスターとノード用に作成するネットワークインターフェイスには、IPv4 および IPv6 のアドレスが割り当てられます。

  • インターネットから Pods へのインバウンドアクセスが必要な場合は、ロードバランサーと ingress をデプロイするのに十分な数の利用可能な IP アドレスがあるパブリックサブネットが少なくとも 1 つあることを必ず確認してください。パブリックサブネットにロードバランサーをデプロイできます。ロードバランサーは、プライベートサブネットまたはパブリックサブネットの Pods に負荷分散を行います。可能であれば、プライベートサブネットにノードをデプロイすることをお勧めします。

  • ノードをパブリック サブネットにデプロイする場合は、サブネットが IPv4 パブリックアドレスまたは IPv6 アドレスを自動割り当てする必要があります。ノードを IPv6 CIDR ブロックが関連付けられているプライベートサブネットにデプロイする場合、プライベートサブネットも IPv6 アドレスを自動割り当てする必要があります。2020 年 3 月 26 日以降に Amazon EKS AWS CloudFormation テンプレート を使用して VPC をデプロイした場合、この設定は有効になっています。テンプレートを使用してこの日付より前に VPC をデプロイした場合、または独自の VPC を使用した場合は、この設定を手動で有効にする必要があります。詳細については、「Amazon VPC ユーザーガイド」の「サブネットのパブリック IPv4 アドレス指定属性を変更する」および「サブネットの IPv6 アドレス指定属性を変更する」を参照してください。

  • ノードをデプロイするサブネットがプライベートサブネットであり、そのルートテーブルにネットワークアドレス変換 (NAT) デバイス (IPv4) または Egress-Only ゲートウェイ (IPv6) へのルートが含まれていない場合は、AWS PrivateLink を使用して VPC エンドポイントを VPC に追加します。VPC エンドポイントは、ノードと Pods が通信を行う必要があるすべての AWS のサービス で必要になります。例としては、Amazon ECR、Elastic Load Balancing、Amazon CloudWatch、AWS Security Token Service、Amazon Simple Storage Service (Amazon S3) などがあります。エンドポイントには、ノードが存在するサブネットを含める必要があります。すべての AWS のサービス で VPC エンドポイントがサポートされているわけではありません。詳細については、「AWS PrivateLink とは」および「AWS PrivateLink と統合する AWS サービス」を参照してください。Amazon EKS のその他の要件のリストについては、「プライベートクラスターの要件」を参照してください。

  • ロードバランサーをサブネットにデプロイする場合は、サブネットに次のタグが必要です。

    • プライベートサブネット

      キー Value
      kubernetes.io/role/internal-elb 1
    • パブリックサブネット

      キー Value
      kubernetes.io/role/elb 1

バージョン 1.18 以前の Kubernetes クラスターが作成された場合、Amazon EKS は、指定したすべてのサブネットに次のタグを追加します。

キー Value
kubernetes.io/cluster/my-cluster shared

ここで新しい Kubernetes クラスターを作成した場合、Amazon EKS はサブネットにタグを追加しません。1.19 より前のバージョンのクラスターが使用していたサブネットにタグがあった場合、クラスターが新しいバージョンに更新されても、タグはサブネットから自動的に削除されませんでした。AWS Load Balancer Controller のバージョン 2.1.1 以前では、このタグが必要です。新しいバージョンの Load Balancer Controller を使用している場合は、サービスを中断することなくタグを削除できます。

eksctl または Amazon EKS AWS CloudFormation VPC テンプレートのいずれかを使用して VPC をデプロイした場合、次が適用されます。

  • 2020 年 3 月 26 日以降 - パブリック IPv4 アドレスは、パブリックサブネットにより、パブリックサブネットにデプロイした新しいノードに自動的に割り当てられます。

  • 2020 年 3 月 26 日より前 - パブリック IPv4 アドレスは、パブリックサブネットにより、パブリックサブネットにデプロイした新しいノードに自動的に割り当てられません。

この変更は、パブリックサブネットにデプロイされた新しいノードグループに、次のような影響を与えます。

共有サブネットの要件と考慮事項

VPC 共有を使用して、同じ AWS Organizations 内でサブネットを他の AWS アカウントと共有できます。共有サブネットに Amazon EKS クラスターを作成できますが、以下の考慮事項に注意してください。

  • VPC サブネットの所有者は、参加者アカウントで Amazon EKS クラスターを作成する前に、そのアカウントとサブネットを共有する必要があります。

  • VPC のデフォルトセキュリティグループは所有者に属しているため、デフォルトのセキュリティグループを使用してリソースを起動することはできません。また、参加者は、他の参加者または所有者が所有するセキュリティグループを使用してリソースを起動することはできません。

  • 共有サブネットでは、参加者と所有者がそれぞれのアカウント内のセキュリティグループを個別に管理します。サブネットの所有者は、参加者が作成したセキュリティグループを表示できますが、これらのグループに対してアクションを実行することはできません。サブネットの所有者がこれらのセキュリティグループの削除または変更を希望する場合は、セキュリティグループを作成した参加者がそのアクションを実行する必要があります。

  • 参加者がクラスターを作成する場合、以下の考慮事項が適用されます。

  • 共有 VPC の所有者は、参加者が共有サブネット内に作成したクラスターを表示、更新、削除することはできません。これは、アカウントごとに異なるアクセス権を持つ VPC リソースに加えて適用されます。詳細については、「Amazon VPC ユーザーガイド」の「所有者および参加者の責任と権限」を参照してください。

  • Amazon VPC CNI plugin for Kubernetes のカスタムネットワーク機能を使用する場合、所有者アカウントに記載されているアベイラビリティーゾーン ID マッピングを使用して、それぞれの ENIConfig を作成する必要があります。詳細については、「ポッド用のカスタムネットワーク」を参照してください。

VPC サブネット共有の詳細については、「Amazon VPC ユーザーガイド」の「VPC を他のアカウントと共有する」を参照してください。