Kubernetesのコンテナ間の通信はCNI(Container Network Interface)で定義されているのですが、中身がどんなものか全く知らないので深掘りしたいと思います。
CNIの仕様
CNIの仕様はこちらのリポジトリにまとめられています。
CNIで必要なのは4つの処理
仕様書によるとCNIがサポートしなければならないのは下記の4つの処理だけです。これらを仕様通りに実装することでCNIプラグインとして使えるみたいです。
- ADD コンテナをネットワークに追加する
- DEL コンテナをネットワークから削除する
- CHECK コンテナのネットワークが期待通りか確認する
- 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にブロックチェーンエンジニアとして入社。
最新記事 by 髙妻智一 (全て見る)
- Polkadot(Substrate)のアドレスとトランザクションについて - 2023-03-09
- 【無料公開】「Goで始めるBitcoin」3章 Bitcoinノードとの通信 技術書典8 - 2020-03-08
- エンジニアがゼロから技術ブログを書くための方法をまとめました - 2019-05-25
コメントを残す