BGP on Cilium

BGP(Border Gateway Protocol)とは自律システム(AS:autonomous system)間で、経路情報を交換するために設計されたルーティングプロトコルです。
(Wikipediaより https://ja.wikipedia.org/wiki/Border_Gateway_Protocol)

さらに引用ですが、

自律システム(AS)間のルーティングを行うExterior Gateway Protocol(EGP)の通信プロトコルである。
BGPはIPネットワークか自律システム(AS)間の到達性を示すプレフィックス(prefix)のルーティングテーブルを維持することでルーティングを行う。BGPはパスベクトル型ルーティングプロトコル(英語版)に分類され、技術的なメトリックは使用しないが、ネットワークの細かい規則や方針に従ってルーティングを行う。BGPはクラスレスドメイン間ルーティング(CIDR)をサポートし、経路集約を行うことでルーティングテーブルのサイズを削減することができる。

とあります。
コンテナ間が増えるとルーティングも複雑になりパフォーマンスも悪くなります。これをeBPFベースのカーネルモードを使ったCiliumで効率よく運用するために、BGPというのものが使われるようです。

Ciliumの事例をいろいろ調べていたところBGPというキーワードをみつけ掘り下げていくと、isovalent labsに動作テストができる環境があることがわかり、そこでCilium上のBGPを試してみました。
参考)
https://nicovibert.com/2022/07/21/bgp-with-cilium/
https://isovalent.com/resource-library/labs/
https://isovalent.com/labs/bgp-on-cilium/

手順は下記動画にあります。

おおまかな流れは以下です。
1)Kindを使ったclusterの作成
2) Containerlabを使った仮想ルータの構築
3) CiliumBGPPeeringPolicyの適用

https://isovalent.com/labs/bgp-on-cilium/より

2) のルータを構築した時点で、router0とRack0のToR、router0とRack1のToRとのBGPのルーティングがされ、2) のポリシーを適用した時点で、rack0,1内のToRとnode間のBGPルーティングが完了します。

clusterの作成

仮想ルータの構築

※FRR(Free Range Routing) オープンソースのルーティングソフトウェアで、OSPFやBGPなど様々なプロトコルをサポートしているLinuxなどで動作するソフトウェア (https://zenn.dev/bells17/scraps/238c522e2f7c9b#comment-6e9bc72cfe8c0c より引用)

Ciliumポリシーの適用

kubectl apply -f cilium-bgp-peering-policies.yaml

ポリシーの適用前後のルーティング情報の差異と導通テストです。

vtyshというのは、ネットワーク制御をするcliツールで、CISCOのルータのものと似ているそうです。(昔使っていました。)
RfxRcdで受信できていることが確認できます。
もっとわかりやすくpingでテストです。

このnetshootというのは、トラブルシューティングでよくつかわれるようで、コマンドが豊富です。(default name space)
その他コンテナの状態を表示しました。

これらを参考に、次は自前の環境でテストしてみたいと思います。
今回初物が多く、とくにContainerlabは驚きました。ルータについて他にもいろいろ調べましたが規制製品のソフトバージョンもあるようですね。結局ルータもLinuxなのでコンテナ環境で動かすのも納得がいきます。(ハードシンセサイザに対するソフトシンセみたいなイメージをもちました)
Ciliumにかかわる必要なノウハウは、eBPFというLinuxカーネルのコードを使った領域から、データセンターのインフラ構築の領域まで、幅が広いことを改めて実感しました。(ルーティングに関するテストをするには様々なネットワークを構築する必要があり)
最後に、yamlファイルを引用します。ここにある情報で完結したい部分は、Labを参考ください。

cluster.yaml

topo.yaml

cilium-bgp-peering-policies.yaml