すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:カスタム CNI チェーンの設定

最終更新日:Nov 09, 2025

Container Network Interface (CNI) は、Kubernetes のネットワークインターフェースを設定するための仕様です。CNI チェーンは、複数の CNI プラグインを使用して、より柔軟な方法でネットワークを設定できるモードです。Container Service for Kubernetes (ACK) クラスターでは、CNI チェーンで複数の CNI プラグインをリンクできます。各 CNI プラグインは、IP アドレスの割り当てやルーティングなどのネットワークタスクを処理します。ACK がコンテナーを作成すると、CNI チェーンは最初のプラグインを呼び出し、チェーン内のすべてのプラグインがタスクを完了するまで、出力を次のプラグインに送信します。

警告

ACK は、CNI プラグインが相互に連携できることを保証しません。カスタム CNI チェーンの設定はハイリスクな操作です。CNI チェーンの仕組みを理解し、CNI チェーンを設定する際は注意してください。設定エラーはビジネスの中断につながる可能性があります。

前提条件

ACK マネージドクラスターが作成され、クラスターが Terway を使用していること。詳細については、「ACK マネージドクラスターの作成」をご参照ください。

制限事項

Terway プラグインのバージョンが 1.5.6 以降であること。コンポーネントの更新方法の詳細については、「コンポーネントの管理」をご参照ください。

カスタム CNI チェーンの設定

CNI チェーンを使用するには、使用する CNI プラグインを Terway の設定ファイルに追加する必要があります。

  1. 次のコマンドを実行して、eni-config 設定ファイルを編集します。

    kubectl edit cm -nkube-system eni-config

    パラメーター

    説明

    10-terway.conf

    Terway CNI の設定。この設定は変更しないでください。

    重要

    元の設定ファイルは変更しないでください。

    10-terway.conflist

    カスタム CNI チェーンの設定。

    plugins の最初の CNI 設定は、10-terway.conf 内の設定である必要があります。

    重要

    このトピックの設定は一例です。設定エラーにつながる可能性があるため、この設定を直接使用しないでください。

    設定ブロックの内容が JSON フォーマットであることを確認してください。

    設定ファイル

    kind: ConfigMap
    apiVersion: v1
    metadata:
      name: eni-config
      namespace: kube-system
    data:
      10-terway.conflist: |
          {
            "plugins": [
              {
                "cniVersion": "0.4.0",
                "name": "terway",
                "type": "terway",
                "capabilities": {"bandwidth": true}
              },
              {
                "type": "portmap",
                "capabilities": {"portMappings": true},
                "externalSetMarkChain":"KUBE-MARK-MASQ"
              }
            ]
          }
      10-terway.conf: |
        {
          "cniVersion": "0.4.0",
          "name": "terway",
          "type": "terway",
          "capabilities": {"bandwidth": true}
        }
  2. kubectl rollout restart -n kube-system daemonset.apps/terway-eniip を実行して、Terway Pod を再作成します。

    設定が正しい場合、ノード上の etc/cni/net.d/10-terway.conflist ファイルでカスタムプラグインの設定を確認できます。

ユースケース

警告

ACK は、CNI プラグインが相互に連携できることを保証しません。カスタム CNI チェーンの設定はハイリスクな操作です。CNI チェーンの仕組みを理解し、CNI チェーンを設定する際は注意してください。設定エラーはビジネスの中断につながる可能性があります。

以下のユースケースは参考用です。

portmap の設定

portmap プラグインは、Pod の内部ポートをホストのポートにマッピングするために使用されます。これにより、Pod は特定のサービスを外部アクセスに公開できます。

説明

インターネットアクセスが必要な場合は、セキュリティグループで対応するポートがインバウンドトラフィックに対して開いていることを確認してください。

設定例

  • ノードのプライベート IP アドレスとポートを使用したアクセス:

    kind: ConfigMap
    apiVersion: v1
    metadata:
      name: eni-config
      namespace: kube-system
    data:
      10-terway.conflist: |
          {
            "plugins": [
              {
                "cniVersion": "0.4.0",
                "name": "terway",
                "type": "terway",
                "capabilities": {"bandwidth": true} 
              },
              {
                "type": "portmap",
                "capabilities": {"portMappings": true},
                "externalSetMarkChain":"KUBE-MARK-MASQ"
              }
            ]
          }
    
      10-terway.conf: |
        {
          "cniVersion": "0.4.0",
          "name": "terway",
          "type": "terway",
          "capabilities": {"bandwidth": true}
        }
  • パブリック IP アドレスとポートを使用したアクセス:

    インターネットアクセスのシナリオでは、次の設定が必要です。

    設定項目

    非 Datapath V2

    Datapath V2

    masqAll

    不要

    必要

    symmetric_routing

    必要

    必要

    • masqAll: portmap プラグインのパラメーター。portmap v1.7.1 以降が必要です。

    • symmetric_routing: Terway プラグインのパラメーター。Terway v1.15.0 以降が必要です。

    kind: ConfigMap
    apiVersion: v1
    metadata:
      name: eni-config
      namespace: kube-system
    data:
      10-terway.conflist: |
          {
            "plugins": [
              {
                "cniVersion": "0.4.0",
                "name": "terway",
                "type": "terway",
                "symmetric_routing": true,
                "capabilities": {"bandwidth": true} 
              },
              {
                "type": "portmap",
                "capabilities": {"portMappings": true},
                "masqAll": false
              }
            ]
          }
    
      10-terway.conf: |
        {
          "cniVersion": "0.4.0",
          "name": "terway",
          "type": "terway",
          "capabilities": {"bandwidth": true}
        }

コンテナーの IPv6 リンクローカルアドレスの無効化

クラスターで IPv6 デュアルスタック機能が有効になっていない場合でも、コンテナーのネットワークインターフェースには、作成時に fe80::/64 範囲の IPv6 リンクローカルアドレスが自動的に割り当てられます。これは、オペレーティングシステムのカーネルのデフォルトの動作です。この動作は通常無害であり、通常のビジネス運用には影響しません。

ただし、アプリケーションがネットワークアドレスの処理中にエラーを検出した場合、アプリケーションは IPv6 リンクローカルアドレスを Pod の IP アドレスとして認識できない可能性があります。その結果、アプリケーションは通信に IPv6 リンクローカルアドレスを使用しようとします。リンクローカルアドレスは、同じリンク上のデバイス間の通信にのみ使用され、ネットワーク間の通信には使用できません。そうしないと、アプリケーションで例外が発生する可能性があります。前述のシナリオでアプリケーションコードに欠陥がある場合は、まずアプリケーションベンダーに報告し、ソリューションを求めてください。

それでもコンテナー内の IPv6 リンクローカルアドレスを無効にする必要がある場合は、tuning プラグインを設定することで無効にできます。

設定例

kind: ConfigMap
apiVersion: v1
metadata:
  name: eni-config
  namespace: kube-system
data:
  10-terway.conflist: |
      {
        "plugins": [
          {
            "cniVersion": "0.4.0",
            "name": "terway",
            "type": "terway",
            "capabilities": {"bandwidth": true}
          },
          {
            "type": "tuning",
            "sysctl": {
              "net.ipv6.conf.all.disable_ipv6": "1",
              "net.ipv6.conf.default.disable_ipv6": "1",
              "net.ipv6.conf.lo.disable_ipv6": "1"
            }
          }
        ]
      }
  10-terway.conf: |
    {
      "cniVersion": "0.4.0",
      "name": "terway",
      "type": "terway",
      "capabilities": {"bandwidth": true}
    }