LinuCレベル4 システムアーキテクト ネットワークとストレージの選定 問17
ネットワークとストレージの選定/拠点内のネットワーキングKubernetesクラスタのコンテナネットワークを選定する。全ノードが同じL2セグメントに接続されている。上位のルーターとの経路交換は行えず、Pod間の通信制限(NetworkPolicy)は当面不要である。カプセル化によるオーバーヘッドを避け、構成する部品もできるだけ少なくしたい。最も適した構成はどれか。
当サイトのオリジナル問題(LinuCレベル4 システムアーキテクトの出題範囲「ネットワークとストレージの選定」に対応。実際の試験問題ではありません)
- AflannelをVXLANバックエンドで使い、ノード間のPod宛ての通信をUDPでカプセル化して転送する
- Bflannelをhost-gwバックエンドで使い、各ノードに他ノードのPodサブネット宛ての経路を設定させる
- CCalicoをIP-in-IPのモード(Always)で使い、ノード間のPod宛ての通信をIPヘッダで包んで送る
- DflannelとCalicoを組み合わせたCanalを導入し、ノード間はflannelのVXLANで接続して、CalicoでNetworkPolicyを適用する
正解:B
解説
flannelのhost-gwバックエンドは、各ノードのルーティングテーブルに「他ノードのPodサブネットは、そのノードのIPアドレスを次ホップとする」経路を設定し、Pod間の通信をカプセル化せずに転送します。次ホップが直接届く相手である必要があるため、ノード同士がL2で直接つながっていることが前提になりますが、今回の条件はそれを満たしています。flannelはNetworkPolicyを実装しないため、通信制限が必要になった段階では別の仕組み(Calicoの併用など)を検討します。ノードがL3で分かれている環境では、VXLANなどのカプセル化方式やBGPによる経路広告が選択肢になります。
選択肢ごとの解説
- A誤り。VXLANバックエンドは下位のネットワークがL3で分かれていても使える汎用的な方式ですが、カプセル化のヘッダ分のオーバーヘッドが生じ、要件に反します。
- B正しい。全ノードが同じL2にあるので、他ノードのPodサブネットへの経路を直接設定するだけでカプセル化なしに転送できます。部品もflannelだけで済みます。
- C誤り。IP-in-IPはPod宛てのパケットを外側のIPヘッダで包むカプセル化方式なので、オーバーヘッドを避ける要件に合いません。CalicoはNetworkPolicyが必要な場合に有力な選択肢です。
- D誤り。CanalはflannelのVXLANによるカプセル化にCalicoのNetworkPolicyを組み合わせる構成で、カプセル化のオーバーヘッドがあるうえ、当面不要なNetworkPolicyのために構成する部品が増えます。