Kubernetesのネットワークモデルについて




先日書いた「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などについて深掘りしていけば理解できそうなので今後も学習を進めていきたいと思います。

The following two tabs change content below.

髙妻智一

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






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



コメントを残す

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