パート9: オーバーレイとネイティブルーティングの詳細クイズ
Cilium 1.20.2 · 2026-10-15
トンネルの仕組み
Ciliumはカプセル化パケットの24ビットVNIに何を設定しますか?
- A) 宛先ノードID
- B) 送信元エンドポイントのセキュリティID
- C) CiliumのクラスターID
- D) 受信側が
cilium_tunnel_mapで対応付けるノードごとのランダム値
回答を表示
回答: B) 送信元エンドポイントのセキュリティID
VNIには送信元IDが含まれます(
world-ipv4/world-ipv6はworldとして送信され、hostはremote-nodeに書き換えられます)。受信側はipcacheも持つため、VNIは最適化であり唯一の情報源ではありません。cilium_tunnel_mapは1.18でデータパスから削除されました(agentは残存するマップのpinを解除するだけです)。Goパッケージは1.19で削除され、トンネルエンドポイントはipcacheの値に含まれます。Ciliumでは、IDの伝送に関してGeneveとVXLANでどのような違いがありますか?
- A) GeneveはTLVオプションでIDを運び、VXLANはVNIでIDを運ぶ
- B) GeneveはIDを運ばず、ポリシーは送信側だけで評価される
- C) Geneveは外側UDPの送信元ポートでIDを運ぶ
- D) 違いはない。どちらもVNIでIDを運び、GeneveオプションはDSRのサービスアドレスとポートにだけ使われる
回答を表示
回答: D) 違いはない。どちらもVNIでIDを運び、GeneveオプションはDSRのサービスアドレスとポートにだけ使われる
Ciliumが挿入するGeneveオプション(クラス
0x014B、タイプ0x81)はDSR用だけです。外側の送信元ポート範囲(tunnelSourcePortRange)はエントロピーにだけ影響し、IDとは無関係です。トンネルモードでは、外側のUDP/IPヘッダーをどのコンポーネントが作成しますか?
- A) パケットにヘッダーを書き込む
bpf_lxcプログラム - B) ユーザー空間のcilium-agent
- C) BPFがトンネルキーを設定してリダイレクトした後に、フローベースの
cilium_vxlan/cilium_geneveデバイスの背後にあるカーネルのvxlan/geneveドライバーが作成する - D) NICファームウェア
回答を表示
回答: C) BPFがトンネルキーを設定してリダイレクトした後に、フローベースの
cilium_vxlan/cilium_geneveデバイスの背後にあるカーネルのvxlan/geneveドライバーが作成するBPFは
bpf_skb_set_tunnel_keyを呼び出し、トンネルデバイスのifindexへリダイレクトします。カプセル化はカーネルドライバーが行います。受信側ではカーネルがカプセル化を解除し、cil_from_overlayがトンネルキーを読み取ります。- A) パケットにヘッダーを書き込む
Cilium 1.20.2で
routingMode: tunnelとautoDirectNodeRoutes: trueを同時に設定すると、どうなりますか?- A) パケットをトンネルデバイス経由にする必要があるため、agentが致命的エラーで終了する
- B) サブネット内では直接ルートを使い、サブネット間ではトンネルを使う
- C) 警告を出してフラグを無視する
- D) ネイティブルーティングにフォールバックする
回答を表示
回答: A) パケットをトンネルデバイス経由にする必要があるため、agentが致命的エラーで終了する
daemon_main.goではTunnelingEnabled() && EnableAutoDirectRoutingを検査します。サブネット単位のフォールバックはありません。v1.21.0-pre.3のメッセージは「requires native routing mode」と表現されていますが、やはり致命的エラーになります。
MTU、マスカレード、ホストルーティング
IPv4のアンダーレイが1500バイトで、VXLANとWireGuardを両方有効にした場合、Podから見えるルートMTUはいくつですか?
- A) 1450
- B) 1405
- C) 1373
- D) 1355
回答を表示
回答: D) 1355
ルートMTUはベースMTUから(WireGuard 95 + トンネル 50)を差し引いた値です。1450はVXLANのみ、1405はWireGuardを使うネイティブルーティング、1373はIPsecを使うVXLAN(50 + 77)の値です。
routingMode: tunnelでDSRを使うために必要な設定はどれですか?- A)
dsrDispatch: optを使うVXLAN - B)
tunnelProtocol: geneveとloadBalancer.dsrDispatch: geneve - C)
loadBalancer.mode: hybridを使うVXLAN - D)
dsrDispatch: ipipを使い、他には何も変更せずに任意のトンネルプロトコルを使う
回答を表示
回答: B)
tunnelProtocol: geneveとloadBalancer.dsrDispatch: geneveagentはVXLANトンネルでの
dsr/hybridを拒否します。トンネルモードのDSRではGeneve dispatchが必要で、Geneve dispatchを使うにはGeneveトンネルプロトコルが必要です。- A)
netkitに対応していないカーネルのノードで
bpf.datapathMode: autoを設定するとどうなりますか?- A) agentが起動に失敗する
- B) agentが
netkit-l2に切り替える - C) agentがvethにフォールバックし、警告を記録する。明示的に
netkitを指定した場合は致命的エラーになる - D) agentはnetkitを再試行し続け、Podの作成が止まる
回答を表示
回答: C) agentがvethにフォールバックし、警告を記録する。明示的に
netkitを指定した場合は致命的エラーになる1.20で追加された
autoは機能をプローブして、ログに「datapath autodiscovery failed, reverting from netkit to veth」と記録しながら降格します。netkitにはBPFマスカレードとKPRが必要で、従来のホストルーティングは使えません。BPFホストルーティングがデフォルトですが、kube-proxy replacementを有効にしたままiptablesマスカレードを使っています。agentはどう動作しますか?
- A) BPFホストルーティングにはBPFマスカレードが必要だと記録し、従来のホストルーティングにフォールバックする
- B) 起動を拒否する
- C) BPFマスカレードを自動的に有効にする
- D) kube-proxy replacementを無効にする
回答を表示
回答: A) BPFホストルーティングにはBPFマスカレードが必要だと記録し、従来のホストルーティングにフォールバックする
ホストルーティングはベストエフォートです。netkit、Pod向けBBR、BIG TCPなど、明示的に有効化され、ホストルーティングを必要とする機能は致命的エラーになります。
cilium-dbg statusのRouting:行にあるHost:フィールド(Host: Legacy)で確認してください。バンド幅マネージャーを有効にした状態で、
kubernetes.io/egress-bandwidth: "10M"を設定すると、Podの何を制限しますか?- A) 10 MB/秒
- B) ReplicaSetごとに10 Mbit/秒
- C) BBRも有効にしない限り何も制限しない
- D) 10 Mbit/秒
回答を表示
回答: D) 10 Mbit/秒
この値はビット単位のKubernetes Quantityです。PodごとのegressはEDTとFQで制御され、BBRは任意です。IPsecを使うと、マネージャーは警告なく無効になります。
BPFマスカレードをデフォルト設定で使った場合、Podからリモートノードへのトラフィックはどのように扱われますか?
- A) 常にマスカレードされる
- B) マスカレードされない
- C) ネイティブルーティングではマスカレードされず、トンネルモードでは(ipcacheエントリに
skip_tunnelがない限り)マスカレードされる - D) 宛先がRFC1918範囲外の場合だけマスカレードされる
回答を表示
回答: C) ネイティブルーティングではマスカレードされず、トンネルモードでは(ipcacheエントリに
skip_tunnelがない限り)マスカレードされるこれは
bpf/lib/nat.hにある判定順序のステップ5です。enable-remote-node-masquerade=true(1.19以降、extraConfigで設定)にすると、どちらのモードでもマスカレードされます。