Juniper Cloud-Native Routerのコンポーネント
概要 Juniper Cloud-Native Routerソリューションは、JCNRコントローラ、データプレーン開発キット(DPDK)または拡張バークレーパケットフィルタ(eBPF)、eXpress Data Path(XDP)、データパスベースのJCNR vRouter、JCNR-CNIなどの複数のコンポーネントで構成されています。このトピックでは、Juniper Cloud-Native Routerのコンポーネントの概要を簡単に説明します。
JCNRのコンポーネント
Juniper Cloud-Native Routerは、主にJCNRコントローラコントロールプレーン、JCNR vRouterフォワーディングプレーン、Kubernetes統合用のJCNR-CNIの3つのコンポーネントで構成されています。すべてのJCNRコンポーネントはコンテナとしてデプロイされます。
図1 は、DPDKベースのvRouterで実装した場合の、Kubernetesクラスタ内のJuniper Cloud-Native Routerのコンポーネントを示しています。

図2 は、eBPF XDPベースのvRouterで実装した場合の、Kubernetesクラスター内のJuniper Cloud-Native Routerのコンポーネントを示しています。

JCNRコントローラ
JCNRコントローラは、Junosコンテナ化ルーティングプロトコルデーモン(cRPD)を実行するクラウドネイティブルーターソリューションのコントロールプレーンです。ステートフルセットとして実装されます。コントローラは、Cloud-Native Routerの他の要素と通信します。展開時にコントローラで設定した設定、ポリシー、およびルールは、実装のためにJCNR vRouterおよびその他のコンポーネントに伝達されます。
たとえば、コントローラで設定されたファイアウォールフィルター(ACL)は、(vRouterエージェントを介して)JCNR vRouterに送信されます。
Juniper Cloud-Native Router Controllerの機能:
-
NETCONF プロトコルを使用して、外部の自動化およびオーケストレーション システムからアクセス可能な、Junos OS 互換の CLI 設定および操作コマンドを公開します。
-
高速フォワーディングプレーンとしてvRouterに対応しています。これにより、DPDK フレームワークを使用して構築されたアプリケーションは、カーネルを経由せずに、アプリケーションと vRouter と直接パケットを送受信できます。
-
DPDK 対応の vRouter によって管理される PF(物理機能)、VF(仮想機能)、virtio、アクセス、トランクインターフェイスでの VLAN タグ付きサブインターフェイスの設定をサポートします。
-
ブリッジ ドメイン、VLAN、仮想スイッチの設定をサポートします。
-
主にBGP、IS-IS、およびOSPFのルーティングプロトコルを使用して、DPDKアプリケーションの到達性をコアネットワークにアドバタイズします。
-
クラスタの内部および外部にポッドのL3ネットワーク到達可能性情報を配信します。
-
L2 ファイアウォールの設定を維持します。
-
vRouterエージェントを介して設定情報をvRouterに渡します。
-
ライセンス キー情報を格納します。
-
BGPスピーカーとして機能し、他のBGPスピーカーとピア関係を確立してルーティング情報を交換します。
-
コントロールプレーンのテレメトリデータをPrometheusとgNMIにエクスポートします。
構成オプション
コンフィグレットリソースを使用して、cRPDポッドを設定します。
JCNR vRouter
JCNR vRouterは、ハイパフォーマンスなデータパスコンポーネントです。これは、Linux ブリッジまたは Linux カーネルの Open vSwitch (OVS) モジュールの代替です。これは、ユーザー空間プロセスとして実行されます。vRouter 機能は、vrouter-agent と vrouter-telemetry-exporter 用と vrouter-agent-dpdk 用の 2 つのポッドに実装されています。この分割により、必要に応じて CPU リソースを異なる vRouter コンポーネントに合わせて柔軟に調整できます。
vRouter は、データプレーン開発キット(DPDK)と拡張バークレーパケットフィルタ(eBPF)eXpress データパス(XDP)データパスの両方をサポートします。
JCNR eBPF XDPデータパスは、 ジュニパーテクノロジープレビュー(技術プレビュー) の機能です。限定された機能がサポートされます。詳細は、 JCNR vRouter Datapath を参照してください。
JCNR vRouterの機能:
-
レイヤー 3 仮想プライベート ネットワークでルーティングを実行します。
-
L2転送を実行します。
-
高性能なDPDKベースの転送をサポートします。
-
高パフォーマンスのeBPF XDPデータパスベースの転送をサポートします。
-
データプレーンのテレメトリデータをPrometheusとgNMIにエクスポートします。
-
高性能なパケット処理。
-
フォワーディングプレーンは、カーネルベースのフォワーディングよりも高速なフォワーディング機能を提供します。
-
フォワーディングプレーンは、カーネルベースのフォワーディングよりも拡張性に優れています。
-
次のNICのサポート:
-
Intel E810(Columbiaville)ファミリー
- Intel XL710(Fortville)ファミリー
-
JCNR-CNI
JCNR-CNIは、ジュニパーが開発した新しいコンテナネットワークインターフェース(CNI)です。JCNR-CNIは、各ノードにインストールされるKubernetes CNIプラグインで、アプリケーションポッド用のネットワークインターフェースをプロビジョニングします。ポッド作成時に、Kubernetesはポッドインターフェイスの作成と設定をJCNR-CNIに委任します。JCNR-CNIは、JCNRコントローラおよびvRouterと対話してDPDKインターフェイスを設定します。ポッドが削除されると、JCNR-CNIが呼び出され、KubernetesおよびCloud-Native Routerコンポーネントのポッドインターフェイス、構成、および関連する状態のプロビジョニングが解除されます。JCNR-CNIは、マルチCNIとともにセカンダリCNIとして機能し、ポッドインターフェイスを追加および設定します。
JCNR-CNIの機能:
-
次のようなKubernetesポッドでネットワーキングタスクを管理します。
-
IP アドレスの割り当て
-
MACアドレスの割り当て。
-
Kubernetes クラスタ内のポッドと vRouter の間にタグなしインターフェイス、アクセスインターフェイス、およびその他のインターフェイスを設定する。
-
VLAN サブインターフェイスの作成
-
L3 インターフェイスの作成
-
-
追加や削除などのポッドイベントに作用します。
-
cRPD設定を生成します。
JCNR-CNIは、ポッドが使用するセカンダリ・インターフェースを管理します。YAML 形式のネットワーク添付ファイル定義 (NAD) ファイルの構成に基づいて、必要なインターフェイスを作成します。JCNR-CNIは、最終的な場所または接続ポイントに渡す前にいくつかのインターフェイスを設定し、次のような追加のインターフェイス設定オプション用のAPIを提供します。
-
さまざまな種類のポッドインターフェイスをインスタンス化します。
-
DPDK データプレーンを活用するポッド用の virtio ベースのハイパフォーマンスインターフェイスを作成します。
-
Linux カーネル ネットワーク スタックを使用して Pod が通信できるようにする veth ペア インターフェイスを作成する。
-
アクセス モードまたはトランクモードでのポッド インターフェイスの作成。
-
ポッド インターフェイスをブリッジ ドメインと仮想ルーターにアタッチする。
-
動的 IP アドレス割り当ての IPAM プラグインをサポートします。
-
virtio インターフェースに一意のソケットインターフェースを割り当てる。
-
IP アドレスの割り当てや、Kubernetes クラスター内のポッドと vRouter 間のインターフェイスの設定など、ポッドでのネットワーク タスクの管理。
-
ポッド間およびポッドからネットワークへのポッド インターフェイスの接続。
-
パケット処理の負荷を軽減するための vRouter との統合。
JCNR-CNIのメリット:
-
ポッド インターフェイス管理の改善
-
カスタマイズ可能な管理および監視機能
-
コントローラおよび vRouter コンポーネントとの緊密な統合によるパフォーマンスの向上
ポッド作成におけるJCNR-CNIの役割:
クラウドネイティブ・ルーターで使用するポッドを作成すると、 kubelet と呼ばれるKubernetesコンポーネントがMultus CNIを呼び出して、ポッドのネットワークとインターフェイスを設定します。Multus は pod.yaml ファイルの annotations セクションを読み取り、NAD を見つけます。NADがCNIプラグインとしてJCNR-CNIを指している場合、MultusはJCNR-CNIを呼び出してポッドインターフェイスを設定します。JCNR-CNIは、NADで指定されているとおりにインターフェイスを作成します。次に、JCNR-CNIは設定を生成し、コントローラにプッシュします。
syslog-NG
Juniper Cloud-Native Routerは、syslog-ngポッドを使用してcRPDおよびvRouterからイベントログを収集し、ログをJSONベースの通知に変換します。通知はファイルに記録されます。Syslog-ng はデーモンセットとして実行されます。