「Kubernetes」を使うなら、まず知っておきたい「Flannel」と「Calico」の通信コンテナネットワークの基礎知識【第9回】

コンテナ間の通信を実現するCNIプラグインを使うことで、KubernetesのPod間通信が可能になります。代表的なオープンソースのCNIプラグインを紹介します。

2021年12月13日 05時00分 公開
[奈良昌紀, 細谷典弘, 千葉 豪ネットワンシステムズ]

 コンテナオーケストレーター「Kubernetes」のクラスタ(Kubernetesクラスタ)におけるネットワークは、一般的にCNI(Container Networking Interface)プラグインを使用して構成します。CNIは業界団体CNCF(Cloud Native Computing Foundation)のプロジェクトとして定義された「Linux」コンテナ向けのネットワークの仕様であり、CNIプラグインはこの仕様に基づいたプラグインです。CNIの仕様に基づいたプラグインであれば、Kubernetesだけではなく「Cloud Foundry」や「Apache Mesos」などの主要なコンテナオーケストレーターでも利用することが可能です。

 オープンソースのCNIプラグインが豊富に存在する他、さまざまなベンダーが自社のネットワーク製品やサービスを活用するためのCNIプラグインを提供しています。CNIプラグインを選択する際の参考として、本稿はまずオープンソースの主要なCNIプラグインを紹介します。

オープンソースのCNIプラグイン

 オープンソースで開発されているCNIプラグインは概して、Kubernetesクラスタ内のソフトウェアだけで機能します。そのため、Kubernetesを使ったさまざまなコンテナで利用することが可能です。

Flannel

 「Flannel」は非常にシンプルなKubernetesのCNIプラグインとして豊富な実績を持ちます。にLinuxカーネルの機能を利用して、仮想ネットワーク用のプロトコル「VXLAN」(Virtual eXtensible Local Area Network)を使った「ノード」(コンテナの実行ホスト)間のオーバーレイネットワーク(論理的に制御可能なネットワーク)を構成し、コンテナ向けのネットワークを作成します。Flannelはノード内の「flannel.1」というネットワークインタフェースでノードをまたぐPod間通信(Podはコンテナの集合体)をVXLANによってカプセル化(プロトコル用のヘッダ情報の付与)し、トンネリング(通信経路の確立)をして他のノードに届けます。受信したノードがカプセル化を解き、Pod同士の通信が実現します(図1)。シンプルな実装となっており、Pod間通信を制御するKubernetesの機能「Network Policy」は利用できません。

画像 図1 FlannelによるKubernetesネットワーク(「eth0」はPodのネットワークインタフェース。「veth」は仮想ネットワークインタフェース。「cni0」「cni1」はブリッジのインタフェース)《クリックで拡大》

Calico

 「Calico」はノードをまたぐPod間通信をFlannelのようにカプセル化する方法と、カプセル化しない方法のどちらかを選択することが可能です。Calicoは各ノードに、Podが利用するCIDR(Classless Inter-Domain Routing、アドレス割り当ての仕組み)のネットワークアドレス(Pod CIDR)を割り当てます。各ノード内で起動する「BIRD」(経路制御プロトコル「BGP」を使ったプログラム)が、Pod CIDRを経路情報として交換し、ノード内のルートテーブルに反映します。ノードはPodが送信したパケットをルートテーブルに基づいて宛先Podが存在するノードに転送し、パケットは受信先のノード内のルートテーブルを参照して宛先Podに届きます(図2)。

画像 図2 CalicoによるKubernetesネットワーク(「cali100」「cali200」「cali300」「cali400」は仮想ネットワークインタフェース)《クリックで拡大》

 ノード同士が同じネットワークセグメント内であればこのようにシンプルに通信することが可能ですが、宛先のノードが異なるネットワークセグメントに存在する場合、中継するルーティング機能を備えたスイッチなどのL3(レイヤー3)デバイスにPod CIDRに対する経路情報が存在しないとパケットを届けることができません。そこでFlannelなどパケットをカプセル化する仕組みを使うか、カプセル化をしない場合はルートリフレクタ(経路情報を転送する仕組み)を利用して、中継するL3デバイスにPod CIDRを広報(経路情報を伝えること)することで、L3デバイスをまたいだ通信が可能になります。通信のカプセル化にはオーバーヘッド(ある処理に付随する負荷)が発生するので、Calicoでカプセル化しないPod間通信を選択することでデータ転送パフォーマンスが向上します。

 CalicoはNetwork Policyを利用してPod間の通信を制御することが可能です。データ転送を担うデータプレーンとしてFlannelを利用し、Network Policyを利用するためのポリシーエンジンとしてCalicoを利用することもできます。


 次回はクラウドサービスが提供するKubernetesのネットワークを紹介します。

執筆者紹介

奈良昌紀(なら・まさのり) ネットワンシステムズ ビジネス開発本部第1応用技術部

通信事業者のデータセンターにおいてネットワークやサーバの運用を経験後、ネットワンシステムズに入社。帯域制御やWAN高速化製品、仮想化関連製品を担当後、主にクラウドや仮想インフラの管理、自動化、ネットワーク仮想化の分野に注力している。

細谷典弘(ほそや・のりひろ) ネットワンシステムズ ビジネス開発本部第3応用技術部

データセンターネットワークの他、マルチクラウド向けのハードウェアやソフトウェアの最先端技術に関する調査・検証、技術支援などを担当。注目分野は「Kubernetes」。放送システムのIP化に向けた技術調査・検証も担当している。

千葉 豪(ちば・ごう) ネットワンシステムズ ビジネス開発本部第1応用技術部

IaaS(Infrastructure as a Service)をはじめとしたクラウド基盤技術および管理製品を担当。コンテナ技術を中心とした開発・解析基盤の構築から運用、コンテナに関連した自動化技術や監視製品の技術検証などに注力している。


ITmedia マーケティング新着記事

news058.jpg

アドビ、Adobe Firefly機能搭載の「Adobe Express」モバイル版アプリを一般提供
アドビは、生成AI「Adobe Firefly」の機能を利用できる「Adobe Express」モバイル版アプ...

news141.jpg

2度あることは3度あった GoogleのサードパーティーCookie廃止再延期にアドテク各社がコメント
Googleは2024年末までに完了する予定だったWebブラウザ「Chrome」でのサードパーティーCo...

news148.jpg

天候と位置情報を活用 ルグランとジオロジックが新たな広告サービスを共同開発
ルグランとジオロジックが新たな「天気連動型広告」を共同開発した。ルグランが気象デー...