

 **このページの改善にご協力ください** 

このユーザーガイドに貢献するには、すべてのページの右側のペインにある「**GitHub でこのページを編集する**」リンクを選択してください。

# 複数のネットワークインターフェイスをポッドにアタッチする
<a name="pod-multiple-network-interfaces"></a>

デフォルトでは、Amazon VPC CNI プラグインは各ポッドに 1 つの IP アドレスを割り当てます。この IP アドレスは、ポッドのすべての送受信トラフィックを処理する *Elastic Network Interface* にアタッチされます。帯域幅とパケット/秒レートのパフォーマンスを向上させるには、VPC CNI の*マルチ NIC 機能*を使用してマルチホームポッドを設定できます。マルチホームポッドは、複数のネットワークインターフェイス (および複数の IP アドレス) を使用する単一の Kubernetes ポッドです。マルチホームポッドを実行すると、同時接続を使用してアプリケーショントラフィックを複数のネットワークインターフェイスに分散できます。これは、人工知能 (AI)、機械学習 (ML)、ハイパフォーマンスコンピューティング (HPC) のユースケースに特に役立ちます。

次の図は、複数のネットワークインターフェイスカード (NIC) が使用されているワーカーノードで実行されているマルチホームポッドを示しています。

![\[2 つのネットワークインターフェイスが接続されたマルチホームポッドで、一方のネットワークインターフェイスには ENA、もう一方のネットワークインターフェイスには ENA と EFA を備えているもの\]](http://docs.aws.amazon.com/ja_jp/eks/latest/userguide/images/multi-homed-pod.png)


## 背景
<a name="pod-multi-nic-background"></a>

Amazon EC2 では、*Elastic Network Interface* は仮想ネットワークカードを表す VPC 内の論理ネットワーキングコンポーネントです。多くの EC2 インスタンスタイプでは、ネットワークインターフェイスはハードウェア内で単一のネットワークインターフェイスカード (NIC) を共有します。この単一の NIC には、最大帯域幅とパケット毎秒レートがあります。

マルチ NIC 機能が有効になっている場合、VPC CNI は、デフォルトでは行われる IP アドレスの一括割り当てを行いません。代わりに、VPC CNI は、新しいポッドの起動時に、各ネットワークカードのネットワークインターフェイスに 1 つの IP アドレスをオンデマンドで割り当てます。この動作により、マルチホームポッドを使用することで増加する IP アドレスの枯渇率が低下します。VPC CNI はオンデマンドで IP アドレスを割り当てるため、マルチ NIC 機能が有効になっているインスタンスではポッドが起動するまでに時間がかかる場合があります。

## 考慮事項
<a name="pod-multi-nic-considerations"></a>
+ Kubernetes クラスターで VPC CNI バージョン `1.20.0` 以降が実行されていることを確認します。マルチ NIC 機能は、VPC CNI のバージョン `1.20.0` 以降でのみ使用できます。
+ VPC CNI プラグインで `ENABLE_MULTI_NIC` 環境変数を有効にします。次のコマンドを実行して変数を設定し、DaemonSet のデプロイを開始できます。
  +  `kubectl set env daemonset aws-node -n kube-system ENABLE_MULTI_NIC=true` 
+ 複数のネットワークインターフェイスカード (NIC) を持つワーカーノードを作成してください。複数のネットワークインターフェイスカードを持つ EC2 インスタンスのリストについては、「**Amazon EC2 ユーザーガイド**」の「[ネットワークカード](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html#network-cards)」を参照してください。
+ マルチ NIC 機能が有効になっている場合、VPC CNI は、デフォルトでは行われる IP アドレスの一括割り当てを行いません。VPC CNI はオンデマンドで IP アドレスを割り当てるため、マルチ NIC 機能が有効になっているインスタンスではポッドが起動するまでに時間がかかる場合があります。詳細については、前の「[背景](#pod-multi-nic-background)」セクションを参照してください。
+ マルチ NIC 機能を有効にしても、デフォルトではポッドは複数のネットワークインターフェイスを持ちません。マルチ NIC を使用するように各ワークロードを設定する必要があります。複数のネットワークインターフェイスを持つ必要があるワークロードに `k8s.amazonaws.com/nicConfig: multi-nic-attachment` 注釈を追加します。

### `IPv6` に関する考慮事項
<a name="pod-multi-nic-considerations-ipv6"></a>
+  **カスタム IAM ポリシー** - `IPv6` クラスターの場合は、VPC CNI に次のカスタム IAM ポリシーを作成して使用します。このポリシーはマルチ NIC に固有です。`IPv6` クラスターでの VPC CNI の使用に関する一般的な情報については、「[クラスター、Pod、サービスに対する IPv6 アドレスの説明](cni-ipv6.md)」を参照してください。

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "AmazonEKSCNIPolicyIPv6MultiNIC",
              "Effect": "Allow",
              "Action": [
                  "ec2:CreateNetworkInterface",
                  "ec2:DescribeInstances",
                  "ec2:AssignIpv6Addresses",
                  "ec2:DetachNetworkInterface",
                  "ec2:DescribeNetworkInterfaces",
                  "ec2:DescribeTags",
                  "ec2:ModifyNetworkInterfaceAttribute",
                  "ec2:DeleteNetworkInterface",
                  "ec2:DescribeInstanceTypes",
                  "ec2:UnassignIpv6Addresses",
                  "ec2:AttachNetworkInterface",
                  "ec2:DescribeSubnets"
              ],
              "Resource": "*"
          },
          {
              "Sid": "AmazonEKSCNIPolicyENITagIPv6MultiNIC",
              "Effect": "Allow",
              "Action": "ec2:CreateTags",
              "Resource": "arn:aws:ec2:*:*:network-interface/*"
          }
      ]
  }
  ```
+  `IPv6` **移行メカニズムは使用できません** - マルチ NIC 機能を使用する場合、VPC CNI は`IPv6` クラスター上のポッドに `IPv4` アドレスを割り当てません。それ以外の場合、VPC CNI はホストローカル `IPv4` アドレスを各ポッドに割り当て、ポッドが別の Amazon VPC またはインターネットの外部 `IPv4` リソースと通信できるようにします。

## 使用方法
<a name="pod-multi-NIC-usage"></a>

VPC CNI でマルチ NIC 機能を有効にし、`aws-node` ポッドを再起動すると、各ワークロードをマルチホームに設定できます。次の YAML 設定の例では、必要な注釈が付けられています。

```
apiVersion: apps/v1
kind: Deployment
metadata:
  name: orders-deployment
  namespace: ecommerce
  labels:
    app: orders
spec:
  replicas: 3
  selector:
    matchLabels:
      app: orders
  template:
    metadata:
      annotations:
         k8s.amazonaws.com/nicConfig: multi-nic-attachment
      labels:
        app: orders
    spec:
...
```

## よくある質問
<a name="pod-muti-nic-faqs"></a>

### **1. ネットワークインターフェイスカード (NIC) とは**
<a name="pod-muti-nic-faqs-nic"></a>

ネットワークインターフェイスカード (NIC) は、単にネットワークカードとも呼ばれ、基盤となるクラウドコンピューティングハードウェアのネットワーク接続を可能にする物理デバイスです。最新の EC2 サーバーでは、これは Nitro ネットワークカードを指します。Elastic Network Interface (ENI) は、この基盤となるネットワークカードの仮想表現です。

一部の EC2 インスタンスタイプには、帯域幅とパケットレートのパフォーマンスを向上させるために複数の NIC があります。このようなインスタンスでは、追加のネットワークカードにセカンダリ ENI を割り当てることができます。例えば、ENI \$11 はネットワークカードインデックス 0 にアタッチされた NIC のインターフェイスとして機能しますが、ENI \$12 は別のネットワークカードインデックスにアタッチされた NIC のインターフェイスとして機能します。

### **2. マルチホームポッドとは**
<a name="pod-muti-nic-faqs-pod"></a>

マルチホームポッドは、複数のネットワークインターフェイス (および複数の IP アドレスを暗示) を持つ単一の Kubernetes ポッドです。各ポッドネットワークインターフェイスは [Elastic Network Interface (ENI)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html) に関連付けられており、これらの ENI は基盤となるワーカーノード上の個別の NIC の論理表現です。複数のネットワークインターフェイスを使用すると、マルチホームポッドのデータ転送容量が増え、データ転送速度も上がります。

**重要**  
VPC CNI は、複数の NIC を持つインスタンスタイプでのみマルチホームポッドを設定できます。

### **3. この機能を使用する理由は何ですか?**
<a name="pod-muti-nic-faqs-why"></a>

Kubernetes ベースのワークロードでネットワークパフォーマンスをスケールする必要がある場合は、マルチ NIC 機能を使用して、ENA デバイスがアタッチされているすべての基盤となる NIC とインターフェイスで通信するマルチホームポッドを実行できます。追加のネットワークカードを使用すると、複数の同時接続にアプリケーショントラフィックを分散することで、アプリケーションの帯域幅容量とパケットレートのパフォーマンスが向上します。これは、人工知能 (AI)、機械学習 (ML)、ハイパフォーマンスコンピューティング (HPC) のユースケースに特に役立ちます。

### **4. この機能の使用方法を教えてください。**
<a name="pod-muti-nic-faqs-how-to-enable"></a>

1. まず、Kubernetes クラスターが VPC CNI バージョン 1.20 以降を使用していることを確認する必要があります。VPC CNI を EKS アドオンとして更新する手順については、「[Amazon VPC CNI を更新する (Amazon EKS アドオン)](vpc-add-on-update.md)」を参照してください。

1. 次に、`ENABLE_MULTI_NIC` 環境変数を使用して、VPC CNI でマルチ NIC サポートを有効にする必要があります。

1. 次に、複数のネットワークカードを持つノードを作成して結合する必要があります。複数のネットワークカードを持つ EC2 インスタンスタイプのリストについては、「*Amazon EC2 ユーザーガイド*」の「[ネットワークカード](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html#network-cards)」を参照してください。

1. 最後に、複数のネットワークインターフェイス (マルチホームポッド) を使用するか、単一のネットワークインターフェイスを使用するかのいずれかに各ワークロードを設定します。

### **5. サポートされているワーカーノードで複数の NIC を使用するようにワークロードを設定するにはどうすればよいですか?**
<a name="pod-muti-nic-faqs-how-to-workloads"></a>

マルチホームポッドを使用するには、注釈 `k8s.amazonaws.com/nicConfig: multi-nic-attachment` を追加する必要があります。これにより、基盤となるインスタンス内のすべての NIC からポッドに ENI がアタッチされます (ポッドと NIC 間の 1 対多マッピング)。

この注釈がない場合、VPC CNI はポッドに必要なネットワークインターフェイスが 1 つだけであると見なし、使用可能な任意の NIC の ENI から IP を 1 つ割り当てます。

### **6. この機能ではどのネットワークインターフェイスアダプターがサポートされていますか?**
<a name="pod-muti-nic-faqs-adapters"></a>

IP トラフィックの基盤となるネットワークカードに少なくとも 1 つの ENA がアタッチされている場合は、任意のネットワークインターフェイスアダプターを使用できます。ENA に関する詳細については、「*Amazon EC2 ユーザーガイド*」の「[Elastic Network Adapter (ENA)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/enhanced-networking-ena.html)」を参照してください。

サポートされているネットワークデバイス設定:
+  **ENA** インターフェイスはVPC の IP ネットワークをサポートするために必要なすべての従来の IP ネットワークとルーティング機能を提供します。詳細については、「[EC2 インスタンスで ENA による拡張ネットワーキングを有効にする](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/enhanced-networking-ena.html)」を参照してください。
+  **EFA** **(EFA** と **ENA の組み合わせ)** インターフェイスは、IP ネットワーク用の ENA デバイスと、低レイテンシーで高スループット通信用の EFA デバイスの両方を提供します。

**重要**  
ネットワークカードに **EFA 専用**アダプターのみがアタッチされている場合、VPC CNI はマルチホームポッドのネットワーク接続をプロビジョニングするときにそのネットワークカードをスキップします。ただし、**EFA 専用**アダプターをネットワークカード上の **ENA** アダプターと組み合わせると、VPC CNI はこのデバイス上の ENI も管理します。EKS クラスターで EFA 専用インターフェイスを使用するには、「[Elastic Fabric Adapter を使用して Amazon EKS で機械学習トレーニングを実行する](node-efa.md)」を参照してください。

### **7. クラスター内のノードが ENA をサポートしているかどうかを確認できますか?**
<a name="pod-muti-nic-faqs-node-ena"></a>

はい。AWS CLI または EC2 API を使用して、クラスター内の EC2 インスタンスに関するネットワーク情報を取得できます。これにより、インスタンスに ENA サポートがあるかどうかの詳細が表示されます。次の例で、`<your-instance-id>` をノードの EC2 インスタンス ID に置き換えます。

 AWS CLI の例:

```
aws ec2 describe-instances --instance-ids <your-instance-id> --query "Reservations[].Instances[].EnaSupport"
```

出力例:

```
[ true ]
```

### **8. ポッドに関連付けられているさまざまな IP アドレスを確認できますか?**
<a name="pod-muti-nic-faqs-list-ips"></a>

いいえ、簡単にはできません。ただし、ノードから `nsenter` を使用して、`ip route show` のような一般的なネットワークツールを実行すれば、追加の IP アドレスとインターフェイスを確認できます。

### **9. ポッドのネットワークインターフェイスの数を制御できますか?**
<a name="pod-muti-nic-faqs-number-of-enis"></a>

いいえ。ワークロードがサポートされているインスタンスで複数の NIC を使用するように設定されている場合、単一のポッドにはインスタンス上のすべてのネットワークカードから IP アドレスが自動的に割り当てられます。または、シングルホームポッドには、インスタンス上の 1 つの NIC に 1 つのネットワークインターフェイスがアタッチされます。

**重要**  
**EFA 専用**デバイス*のみ*がアタッチされているネットワークカードは、VPC CNI によってスキップされます。

### **10. 特定の NIC を使用するようにポッドを設定できますか?**
<a name="pod-muti-nic-faqs-specify-nic"></a>

いいえ、それはサポートされません。ポッドに関連する注釈がある場合、VPC CNI はワーカーノード上の ENA アダプターですべての NIC を使用するように自動的に設定します。

### **11. この機能は、他の VPC CNI ネットワーク機能と連携しますか?**
<a name="pod-muti-nic-faqs-modes"></a>

はい。VPC CNI のマルチ NIC 機能は、*カスタムネットワーク*と*拡張サブネット検出*の両方と連携します。ただし、マルチホームポッドではカスタムサブネットやセキュリティグループを使用しません。代わりに、VPC CNI はノードと同じサブネットとセキュリティグループ設定を使用して、マルチホームポッドに IP アドレスとネットワークインターフェイスを割り当てます。カスタムネットワークの詳細については、「[カスタムネットワーキングを使用して代替サブネットに Pod をデプロイする](cni-custom-network.md)」を参照してください。

VPC CNI のマルチ NIC 機能は*ポッドのセキュリティグループ*と組み合わせて動作することはできません。

### **12. この機能でネットワークポリシーを使用できますか?**
<a name="pod-muti-nic-faqs-netpol"></a>

はい。マルチ NIC で Kubernetes ネットワークポリシーを使用できます。Kubernetes ネットワークポリシーにより、Pod 間で送受信されるネットワークトラフィックが制限されます。VPC CNI でネットワークポリシーを適用する詳細については、「[Kubernetes ネットワークポリシーにより Pod トラフィックを制限する](cni-network-policy.md)」を参照してください。

### **13. マルチ NIC サポートは EKS オートモードで有効になっていますか?**
<a name="pod-muti-nic-faqs-auto-mode"></a>

マルチ NIC は EKS オートモードクラスターではサポートされていません。