Kubernetesのコンテナ間通信を定義するCNI(Container Network Interface)とは?




Kubernetesのコンテナ間の通信はCNI(Container Network Interface)で定義されているのですが、中身がどんなものか全く知らないので深掘りしたいと思います。

 

CNIの仕様

CNIの仕様はこちらのリポジトリにまとめられています。

 

CNIで必要なのは4つの処理

仕様書によるとCNIがサポートしなければならないのは下記の4つの処理だけです。これらを仕様通りに実装することでCNIプラグインとして使えるみたいです。

  1. ADD コンテナをネットワークに追加する
  2. DEL コンテナをネットワークから削除する
  3. CHECK コンテナのネットワークが期待通りか確認する
  4. VERSION バージョン情報を返す

 

CNIの基本動作原理に関しては下記のスライドがわかりやすいです。

 

CNIの実装例

このCNIを実装したのがFlannelとCalicoです。それぞれ実現方法は違いますがCNIプラグインとして実装されています。

 

Flannelはレイヤー3の上にLayer2のオーバーレイネットワークを実装することで実現しています。オーバーレイにはVXLANというプロトコルを実装しています。

 

Flannelとは異なり、Calicoはオーバーレイを行いません。CalicoはBGPを利用して、オーバーヘッドを減らしたシンプルでピュアLayer 3のネットワークを実現しています。

 

CNIの利用例

代表的なものとしてKubernetesがありますがその他にもたくさんあります。

  • rkt
  • OpenShift
  • APache Mesos
  • Amazon ECS
  • Singularity
  • OpenSVC

CNIの3rdパーティ実装

  • Project Calico
  • Flannel
  • knitter
  • Romana
  • VMWare NSX

 

The following two tabs change content below.

髙妻智一

2013年CyberAgent新卒入社 スマホゲームを作る子会社に所属し、サーバーサイドのエンジニアを担当。2年目の終わりから新規子会社の立ち上げに参加し、サーバーサイドのエンジニアリーダーとしてサービースのリリースから運用までを担当。 2018年仮想通貨のスマホウォレットを提供するGinco Incにブロックチェーンエンジニアとして入社。






よく読まれている関連記事はこちら




コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です