ポッドネットワーキング (CNI) - Amazon EKS

ポッドネットワーキング (CNI)

Amazon EKS は、Kubernetes 用の Amazon VPC コンテナネットワークインターフェイス (CNI) プラグインを使用したネイティブ VPC をサポートしています。このプラグインは、VPC から各ポッドに IP アドレスを割り当てます。このプラグインは、GitHub で管理されているオープンソースのプロジェクトです。詳細については、GitHub の「amazon-vpc-cni-k8s」および「提案: Amazon VPC を使用した Kubernetes ネットワーク用 CNI プラグイン」を参照してください。Amazon VPC CNI プラグインは、AWS で Amazon EKS およびセルフマネージド型 Kubernetes クラスターでの使用が完全にサポートされています。

注記

Kubernetes で コンテナネットワークインターフェイス (CNI) を使用すると、ネットワークセットアップが設定可能になります。Amazon VPC CNI プラグインは、すべてのユースケースの要件を満たしていない場合があります。Amazon EKS には、商用サポートオプション付きの代替 CNI ソリューションを提供するパートナーネットワークがあります。詳細については、「互換性のある代替 CNI プラグイン」を参照してください。

Amazon EKS ノード作成時、ノードのネットワークインターフェイスは 1 つです。すべての Amazon EC2 インスタンスタイプは、複数のネットワークインターフェイスをサポートしています。インスタンスの作成時にインスタンスにアタッチされたネットワークインターフェイスは、プライマリネットワークインターフェイス と呼ばれます。インスタンスにアタッチされた追加のネットワークインターフェイスは、セカンダリネットワークインターフェイス と呼ばれます。各ネットワークインターフェイスには、複数のプライベート IP アドレスを割り当てることができます。プライベート IP アドレスの 1 つは、プライマリ IP アドレスですが、ネットワークインターフェイスに割り当てられた他のすべてのアドレスはセカンダリ IP アドレスです。ネットワークインターフェイスの詳細については、Linux インスタンス用の Amazon EC2 ユーザーガイドの「Elastic Network Interface」を参照してください。各ネットワークインターフェイスでサポートされるネットワークインターフェイスとプライベート IP アドレスの数については、Linux インスタンス用の Amazon EC2 ユーザーガイドの「各インスタンスタイプのネットワークインターフェイスあたりの IP アドレス数」を参照してください。例えば、m5.large インスタンスタイプは、3 つのネットワークインターフェイスと、ネットワークインターフェイスごとに 10 個のプライベート IP アドレスをサポートします。

Kubernetes 用の Amazon VPC コンテナネットワークインターフェイス (CNI) プラグインは、デーモンセット内の各 Amazon EC2 ノードに aws-node という名前でデプロイされます。このプラグインは 2 つの主なコンポーネントで構成されています。

  • L-IPAM デーモン – ネットワークインターフェイスの作成と Amazon EC2 インスタンスへのアタッチ、ネットワークインターフェイスへのセカンダリ IP アドレスの割り当て、スケジューリングされた際に Kubernetes ポッドに割り当てるための各ノードにおける IP アドレスのウォームプールのメンテナンスを行います。ノードで実行されているポッドの数が 1 つのネットワークインターフェイスに割り当てることができるアドレスの数を超えると、インスタンスのネットワークインターフェイスが最大数までアタッチされていない限り、プラグインは新しいネットワークインターフェイスの割り当てを開始します。プラグインが新しいネットワークインターフェイスを作成するときのデフォルト値を変更できる設定変数があります。詳細については、GitHub の 「WARM_ENI_TARGETWARM_IP_TARGET、および MINIMUM_IP_TARGET」を参照してください。

    デプロイする各ポッドには、インスタンスにアタッチされたネットワークインターフェイスの 1 つから 1 つのセカンダリプライベート IP アドレスが割り当てられます。「m5.large インスタンスは、3 つのネットワークインターフェイスと、ネットワークインターフェイスごとに 10 個のプライベート IP アドレスをサポートします」と先に述べました。しかし、m5.large インスタンスが 30 個のプライベート IP アドレスをサポートしている場合、そのノードに 30 個のポッドをデプロイすることはできません。ノードにデプロイできるポッドの数を確認するには、次の式を使用します。

    (Number of network interfaces for the instance type × (the number of IP addressess per network interface - 1)) + 2

    この式によれば、m5.large インスタンスタイプは、最大 29 個のポッドをサポートできます。各インスタンスタイプによりサポートされるポッドの最大数のリストについては、GitHub の「eni-max-pods.txt」を参照してください。システムポッドは最大ポッドにカウントされます。例えば、CNI プラグインポッドと kube-proxy ポッドはクラスター内のすべてのノードで実行されるため、追加で m5.large インスタンスにデプロイできるポッド数は 29 ではなく、27 です。さらに、CoreDNS がクラスター内のいくつかのノード上で実行されるので、実行されるノードの最大ポッド数がさらに 1 つ減少します。

    デフォルトでは、ノードにデプロイされたすべてのポッドには同じセキュリティグループが割り当てられ、インスタンスのネットワークインターフェイスの 1 つが接続されているサブネットに割り当てられた CIDR ブロックからプライベート IP アドレスが割り当てられます。プライマリネットワークインターフェイスが接続されているサブネットとは異なる CIDR ブロックから IP アドレスを割り当てるには、CNI カスタムネットワーク を設定します。CNI カスタムネットワークを使用して、ノード上のすべてのポッドに同じセキュリティグループを割り当てることもできます。すべてのポッドに割り当てられたセキュリティグループは、プライマリネットワークインターフェイスに割り当てられたセキュリティグループとは異なる場合があります。ポッドのセキュリティグループを使用して、多くの Amazon EC2 インスタンスタイプにデプロイされたポッドに一意のセキュリティグループを割り当てることができます。詳細については、「」を参照してくださいポッドのセキュリティグループ

  • CNI プラグイン – ホストネットワークの接続 (例: ネットワークインターフェイスと仮想イーサネットペアの設定) とポッド名前空間への正しいネットワークインターフェイスの追加を行います。

重要

CNI プラグインのバージョン 1.7.0 以降を使用していて、デーモンセットによってデプロイされた aws-node ポッドに使用した aws-node Kubernetes サービスアカウントにカスタムポッドセキュリティポリシーを割り当てる場合、ポリシーの allowedCapabilities セクションに NET_ADMIN が、ポリシーの spechostNetwork: trueprivileged: true があることが必要です。詳細については、「」を参照してくださいポッドのセキュリティポリシー