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

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

最終更新日:Oct 31, 2024

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. 次のコマンドを実行して、Terwayの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ポッドを再作成します。

    設定が有効な場合は、ノードのetc/cni/net.d/10-terway.conflis設定ファイルでカスタムプラグイン設定を表示できます。

ユースケース

警告

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

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

ポートマップの設定

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

設定例

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}
    }

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

コンテナのIPv4/IPv6デュアルスタック機能が無効になっている場合でも、CNIには、CNIの作成後にfe80::/64 CIDRブロックからIPv6リンクローカルアドレスが割り当てられます。 これは、オペレーティングシステムカーネルによって実行されるデフォルトの操作です。 この操作はビジネスの中断を引き起こしません。

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

それでもコンテナーのIPv6リンクローカルアドレスを無効にする場合は、チューニングプラグインを使用します。

設定例

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}
    }