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

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

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

VPC の要件と考慮事項

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

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

キー
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 のリソースをこれらのタイプのサブネットにデプロイできます。

  • サブネットでは IP アドレスベースの命名を使用する必要があります。Amazon EC2 のリソースベースの命名は、Amazon EKS でサポートされていません。

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

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

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

  • サブネットでは IP アドレスベースの命名を使用する必要があります。Amazon EC2 のリソースベースの命名は、Amazon EKS でサポートされていません。

  • 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 のその他の要件のリストについては、「プライベートクラスターの要件」を参照してください。

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

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

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

      キー
      kubernetes.io/role/elb 1

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

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

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

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

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

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

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