CNI (Container Network Interface)

Linuxコンテナのネットワーク設定を行うための、ベンダー中立な標準インターフェース仕様と基本プラグイン群。CoreOSがコンテナランタイムrktのプラグイン機構として提唱したものが原型で、2017年5月にCNCFの10番目のホストプロジェクトになった。Kubernetesのほか、Mesos・Cloud Foundryなどでも採用されている。 #networking #kubernetes

Kubernetesとの関係

Kubernetesは「全Podが一意なIPを持ち、NATなしで相互に通信できる」というネットワークモデルを定義するだけで、その実装は持たない。実装はCNIプラグインに委ねられていて、kubeletがPodを作るときにプラグインを呼び出し、以下を任せる。

  • IPAM — PodへのIPアドレスの割り当て
  • インターフェース作成とルーティング — Podのネットワークインターフェースを作り、ノードをまたぐPod間でパケットが届くようにする

kubeadmでクラスタを組んだ直後にCNIプラグインのインストールが必要なのは、この「モデルと実装の分離」のため。

主なプラグイン

  • Flannel — CoreOS発のシンプルなオーバーレイネットワーク。NetworkPolicyなどの高度な機能はないが軽量で、k3sのデフォルト
  • Calico — L3ルーティングベースでオーバーレイなしでも動く。NetworkPolicyによるセキュリティ制御が充実
  • Cilium — eBPFでカーネルレベルにネットワーキングを実装し、iptablesを迂回する。L7(HTTP/gRPC/Kafka)レベルのポリシーまで扱える

DockerのCNMとの対比

同時期にDockerはlibnetworkによる「CNM(Container Network Model)」という別のプラグインモデルを提唱していたが、KubernetesはCNIを採用した。コンテナネットワークの標準を巡る2陣営の競争があった。

出典

作成日時: 2026-08-14 08:39 / 更新日時: 2026-08-15 14:40