先日書いた「Kubernetesは何を解決するのか?」という記事を書いてKubernetesのネットワークについてわからないことが増えたので深掘りして理解を深めたいと思います。
Kubernetesのネットワークモデル
Kubernetesのネットワークについては下記ドキュメントに概要が記載されています。
>>Kubernetesドキュメント:クラスタネットワーキング
今回深掘りしていくのがコンテナ間通信についてです。Kubernetesのネットワークモデルは下記のように定義されています。
- ノード上のポッドは、NATなしですべてのノード上のすべてのポッドと通信できます。
- ノード上のエージェント(システムデーモン、kubeletなど)はそのノード上のすべてのポッドと通信できます。
注:ホストネットワーク(Linuxなど)でのPodsの実行をサポートしているプラットフォームの場合:
- ノードのホストネットワーク内のポッドは、NATなしですべてのノード上のすべてのポッドと通信できます。
Kubernetesは複数のサーバを使ってクラスタを構成するので別サーバのコンテナ間通信にNATを使うと非常に複雑なシステムになってしまいます。グローバルIPもコンテナで起動するプロセスの分だけ必要になってしまうので非効率です。
なので、KubernetesではNATを使わずとも別サーバのコンテナ間で自由に通信できる仕組みを実現しています。実際にこのネットワークを実現しているのはFlannelやCalicoというCNI(Container Network Interface)プラグインです。
これらはOSSで開発されており、FlannelはKubernetesのために開発されていたりもします。現在Flannelも開発は進んでいますが、Calicoの方が活発に開発が行われているようです。
同じサーバのコンテナ間通信
同じサーバ上でのコンテナ間通信はDockeブリッジを使うことで通信しています。
同じサーバのためIPがかぶることもなくシステムはシンプルさを保つことができます。
サーバをまたぐコンテナの通信
サーバをまたぐとコンテナ間の通信はNATを使うため極端に複雑になります。また必要なグローバルIPが増えるためNAPTが使われたりもしますが、通信はより複雑になります。
Kubernetesではこの複雑なシステムにならないようにそもそもNATを使わないことを前提としています。この通信経路の管理を代わりに行うのがFlannelやCalicoとなります、
Flannel
Flannelについては下記リンクの記事にまとまっています。GitHubへのリンクはこちら。
Flannelは分散KVSのetcdを使うことを前提としています。FlannelはバックエンドにVXLANを指定すると、物理ネットワークの上にVXLANによるOverlay方式で内部ネットワークが構成されます。
詳しい解説は別記事で書きたいと思います。
- etcd経由で他ホストと協調して、自ホストのdocker0に割り当てるべきネットワークアドレス帯を決めてくれる。
- 各ホストがどのネットワークアドレス帯をdocker0に割り当てているかを把握しルーティングする。
Flannelについては下記の一つ目の記事が技術的n一番詳しく説明しているので読んでみることをお勧めします。
>>参考
Calico
下記リンクの記事がわかりやすくまとまっています。
コンテナや仮想マシンなどに対してシンプルでスケーラブルなネットワークとセキュリティポリシーの機能を提供するオープンソースプロジェクトです。Calicoはオーケストレータとともに使用することが前提となっており、OpenStackやKubernetes、Mesos、Docker、rktといったプロジェクトとインテグレーションされています。
>>参考
CalicoはFlannelと違う点としてネットワークポリシーというファイアウォール機能を持っています。ネットワークポシリーを使用することで、インターフェースに対して柔軟なアクセス制限をかけられるようになっています。
ちなみにCalicoの導入事例としてGKEがあります。
Kubernetesのネットワークモデルについて見てきましたが、はっきり言って難しすぎて全然理解できていないです。もう少しCNIなどについて深掘りしていけば理解できそうなので今後も学習を進めていきたいと思います。
髙妻智一
最新記事 by 髙妻智一 (全て見る)
- Polkadot(Substrate)のアドレスとトランザクションについて - 2023-03-09
- 【無料公開】「Goで始めるBitcoin」3章 Bitcoinノードとの通信 技術書典8 - 2020-03-08
- エンジニアがゼロから技術ブログを書くための方法をまとめました - 2019-05-25
コメントを残す