ポッドネットワーキング (CNI)
Amazon EKS は、Kubernetes 用の Amazon VPC コンテナネットワークインターフェイス (CNI) プラグインを使用したネイティブ VPC をサポートしています。このプラグインは、VPC から各ポッドに向けて、IPv4 もしくは IPv6 のプライベートアドレスを割り当てます。このプラグインは、GitHub で管理されているオープンソースのプロジェクトです。詳細については、GitHub の「amazon-vpc-cni-k8s
Kubernetes で コンテナネットワークインターフェイス (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_TARGET
、WARM_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 プラグイン – ホストネットワークの接続 (例: ネットワークインターフェイスと仮想イーサネットペアの設定) とポッド名前空間への正しいネットワークインターフェイスの追加を行います。
クラスターでカスタムポッドセキュリティポリシーを使用する場合は、ポッドのセキュリティポリシーのトピックで重要な情報を参照するようにしてください。