ネットワークプラグイン

Kubernetes 1.30は、クラスターネットワーキングのためにContainer Network Interface (CNI)プラグインをサポートしています。 クラスターと互換性があり、需要に合ったCNIプラグインを使用する必要があります。 様々なプラグイン(オープンソースあるいはクローズドソース)が幅広いKubernetesエコシステムで利用可能です。

Kubernetesネットワークモデルを実装するには、CNIプラグインが必要です。

v0.4.0以降のCNI仕様のリリースと互換性のあるCNIプラグインを使用する必要があります。 Kubernetesプロジェクトは、v1.0.0のCNI仕様と互換性のあるプラグインの使用を推奨しています(プラグインは複数の仕様のバージョンに対応できます)。

インストール

ネットワーキングの文脈におけるコンテナランタイムは、ノード上のデーモンであり、kubelet向けのCRIサービスを提供するように設定されています。 特に、コンテナランタイムは、Kubernetesネットワークモデルを実装するために必要なCNIプラグインを読み込むように設定する必要があります。

コンテナランタイムがCNIプラグインをどのように管理しているかについての具体的な情報については、そのコンテナランタイムのドキュメントを参照してください。 例えば:

CNIプラグインのインストールや管理方法についての具体的な情報については、そのプラグインまたはネットワーキングプロバイダーのドキュメントを参照してください。

ネットワークプラグインの要件

ループバックCNI

Kubernetesネットワークモデルを実装するためにノードにインストールされたCNIプラグインに加えて、Kubernetesはコンテナランタイムにループバックインターフェースloを提供することも要求します。 これは各サンドボックス(Podサンドボックス、VMサンドボックスなど)に使用されます。 ループバックインターフェースの実装は、CNIループバックプラグインを再利用するか、自分で実装することで達成できます(例: CRI-Oを用いた例)。

hostPortのサポート

CNIネットワーキングプラグインはhostPortをサポートしています。 CNIプラグインチームが提供する公式のportmapプラグインを使用するか、ポートマッピング(portMapping)機能を持つ独自のプラグインを使用できます。

hostPortサポートを有効にする場合、cni-conf-dirportMappings capabilityを指定する必要があります。 例:

{
  "name": "k8s-pod-network",
  "cniVersion": "0.4.0",
  "plugins": [
    {
      "type": "calico",
      "log_level": "info",
      "datastore_type": "kubernetes",
      "nodename": "127.0.0.1",
      "ipam": {
        "type": "host-local",
        "subnet": "usePodCidr"
      },
      "policy": {
        "type": "k8s"
      },
      "kubernetes": {
        "kubeconfig": "/etc/cni/net.d/calico-kubeconfig"
      }
    },
    {
      "type": "portmap",
      "capabilities": {"portMappings": true},
      "externalSetMarkChain": "KUBE-MARK-MASQ"
    }
  ]
}

トラフィックシェーピングのサポート

これは実験的な機能です

CNIネットワーキングプラグインは、Podの入出力トラフィックシェーピングにも対応しています。 CNIプラグインチームが提供する公式のbandwidthプラグインを使用するか、帯域制御機能を持つ独自のプラグインを使用できます。

トラフィックシェーピングのサポートを有効にする場合、bandwidthプラグインをCNIの設定ファイル(デフォルトは/etc/cni/net.d)に追加し、バイナリがCNIのbinディレクトリ(デフォルトは/opt/cni/bin)に含まれていることを確認する必要があります。

{
  "name": "k8s-pod-network",
  "cniVersion": "0.4.0",
  "plugins": [
    {
      "type": "calico",
      "log_level": "info",
      "datastore_type": "kubernetes",
      "nodename": "127.0.0.1",
      "ipam": {
        "type": "host-local",
        "subnet": "usePodCidr"
      },
      "policy": {
        "type": "k8s"
      },
      "kubernetes": {
        "kubeconfig": "/etc/cni/net.d/calico-kubeconfig"
      }
    },
    {
      "type": "bandwidth",
      "capabilities": {"bandwidth": true}
    }
  ]
}

これでPodにkubernetes.io/ingress-bandwidthkubernetes.io/egress-bandwidthのアノテーションを追加できます。 例:

apiVersion: v1
kind: Pod
metadata:
  annotations:
    kubernetes.io/ingress-bandwidth: 1M
    kubernetes.io/egress-bandwidth: 1M
...

次の項目