KubernetesにおけるCNI, flannelとcalico

CKADのテスト勉強をしている。事前に試験対象のクラスタの概要が提示されているのだけど、そのクラスタが4つあって、CNIが「flannel」と「calico」のどちらかだった。そもそもCNIというものを詳しく知らないし、flannelとcalicoの差は全くわからなかったのでメモ。

CNIとは

github.com

上記がCNIの仕様書

CNI=the Container Networking Interface

Kubernetes ネットワーキング | 技術文書 | 技術情報 | VA Linux Systems Japan株式会社 こちらによると、CNIプラグインとは、何らかの単一のバイナリの実行ファイルのことを指す

CNI_COMMAND 等の環境変数を指定した上で標準入力に json を与えると結果が標準出力に json 形式で返ってくるという仕様になっています。

CNI Pluginが満たすべき振る舞い

  • コンテナをネットワークに追加する
  • コンテナをネットワークから削除する
  • コンテナのネットワークが期待通りかをチェックする
  • バージョンを返す

これができればいいらしい。

techblog.yahoo.co.jp

こちらによると、flannelが広く使われている。CoreOSはflannelを使う calicoはBGPを使ってピュアなL3ネットワークを作る。

このスライドにも書いてあるが、実装自体もどんどん変わっていっていて、過去の記述が現在ではすでにあてはまらないケースがありそう。

  • flannelはネットワーク機能のみを提供
  • calicoはそれに加えてポリシー管理も提供
  • calicoのほうがパフォーマンスがいい?
  • 現時点では、flannelもcalicoもそこまで本質的に差異はないぽい? くらいの理解で大丈夫そう。