Juniper Cloud-Native Router - 概要
概要
Juniper® Cloud-Native Router(クラウドネイティブルーター)は、Kubernetesによってオーケストレーションされたコンテナベースのソフトウェアソリューションです。クラウドネイティブルーターは、コンテナ化されたルーティングプロトコルプロセス(cRPD)とデータプレーン開発キット(DPDK)対応のContrail® Networking™ vRouter(vRouter)を組み合わせたものです。クラウドネイティブルーターを使用すると、DPDK対応vRouterの強化された転送機能で、Junosベースのフルコントロールプレーンを有効にすることができます。
Juniper Cloud-Native Routerのメリット
-
クラウドネイティブルーターは、L2(スイッチ)モードまたはL3(ルーティング)モードで導入できます
-
DPDK対応のvRouterによるパケット転送パフォーマンスの向上
-
汎用コンピューティングデバイスへの容易な導入
-
ソフトウェアでのフルルーティングおよびフォワーディングスタック
-
すぐに使用できるソフトウェアベースのオープン無線アクセスネットワーク(O-RAN)のサポート
-
IPv4およびIPv6ルーティングとフォワーディング
-
Kubernetesでのコンテナ化された導入による迅速なスピンアップ
-
拡張性の高いソリューション
Kubernetes
ジュニパーネットワークスは、ドキュメントではプライマリノードとバックアップノードを参照しています。Kubernetes とは、マスターノードとワーカーノードを指します。このガイドのプライマリとバックアップに関する参照は、Kubernetes の世界のマスターとワーカーに関連付けられています。
このセクションでは、Kubernetesについて少し説明しましょう。Kubernetesは、クラスター化されたコンピューティング環境でコンテナ化されたアプリケーションを実行するためのオーケストレーションプラットフォームです。Kubernetesは、コンテナ化されたアプリケーションの自動導入、スケーリング、ネットワーキング、管理を提供します。Juniper Cloud-Native Routerはコンテナベースのソリューションであるため、オーケストレーションプラットフォームとしてKubernetesを選択しました。インストール、クラスターの作成、管理、メンテナンスなど、Kubernetes の詳細については、「 https://kubernetes.io/」を参照してください。
Kubernetes クラスターの主なコンポーネントは次のとおりです。
- ノード
Kubernetes は、プライマリ (制御) ノードとコンピューティング (ワーカー) ノードの 2 種類のノードを使用します。Kubernetesクラスターは通常、1つ以上のマスターノード(アクティブ/スタンバイモード)と1つ以上のワーカーノードで構成されます。物理コンピューターまたは仮想マシン (VM) 上にノードを作成します。
メモ:Juniper Cloud-Native Routerリリース22.Xでは、動作するシングルノードのKubernetesクラスターを用意する必要があります。Cloud-native ルーターは、プライマリ ノードとセカンダリ ノードが別々の VM またはベアメタル サーバー(BMS)上にあるマルチノード クラスタをサポートしていません。
- ポッド
ポッドはノードに存在し、コンテナ化されたアプリケーションを実行するためのスペースを提供します。Kubernetes ポッドは 1 つ以上のコンテナーで構成され、各ポッドはアプリケーションのインスタンスを表します。ポッドは、Kubernetes が管理できる最小の単位です。ポッド内のすべてのコンテナーは、同じネットワーク名前空間を共有します。
-
名前 空間
Kubernetes では、ポッドは名前空間内で動作し、クラスター内のリソースのグループを分離します。すべての Kubernetes クラスターには、Kubernetes システムによって作成されたオブジェクト用の kube-system 名前空間があります。Kubernetes には、独自の名前空間を提供しないすべてのオブジェクトを保持する既定の名前空間もあります。最後の 2 つの事前構成済み Kubernetes 名前空間は、kube-public と kube-node-lease です。kube-public 名前空間は、認証されていないユーザーがクラスターの一部の側面を読み取ることができるようにするために使用されます。ノードリースにより、kubeletはハートビートを送信できるため、コントロールプレーンはノードの障害を検出できます。
Juniper Cloud-Native Routerリリース22.Xでは、ポッドの一部は kube-system名前空間で実行され、他のポッドは独自の名前空間を提供します。
-
キュベレット
kubeletは、各ノードで実行されるプライマリノードエージェントです。Juniper Cloud-Native Routerの場合、マルチノード導入をサポートしていないため、クラスター上で実行されるkubeletは1つだけです。
- コンテナー
コンテナーは、アプリケーションとそのアプリケーションを含むランタイム環境全体で構成される単一のパッケージです。
-
設定ファイル
-
依存 関係
-
ライブラリ
-
その他のバイナリ
コンテナーで実行されるソフトウェアは、ほとんどの場合、コンテナー環境とコンテナーをホストする環境の間に存在する可能性のあるバイナリ、ライブラリ、および構成の違いを無視できます。一般的なコンテナーの種類は、docker、containerd、および Open Container Initiative 互換ランタイム (CRI-O) を使用したコンテナー ランタイム インターフェイスです。
Juniper Cloud-Native Routerリリース22.Xでは、サポートされているコンテナタイプ(コンテナランタイム)はdockerのみです。
-
Juniper Cloud-Native Routerのコンポーネント
Juniper Cloud-Native Routerソリューションは、複数のコンポーネントで構成されています。このセクションでは、Juniper Cloud-Native Routerのコンポーネントの概要を説明します。
図1 は、Kubernetesクラスタ内のJuniper Cloud-Native Routerのコンポーネントを示しています。緑色のコンポーネントはJuniper Cloud-Native Router固有のもので、その他のコンポーネントは必須のサードパーティ製コンポーネントです。
- Juniper Cloud-Native Router Controller(JCNRコントローラまたはcRPD)
cRPDは、クラウドネイティブルーターのコントロールプレーンとして機能します。管理機能を実行し、vRouter 転送プレーンの設定情報を維持します。cRPDはJunos OSコントロールプレーンをベースにしています。JNCRコントローラは、以下を使用して設定できます。
-
YAML 形式の Helm チャート
-
NETCONFプロトコルを使用するサードパーティ管理プラットフォーム
-
cRPD MGDへのAPI呼び出し
-
cRPD ポッドへの直接 CLI アクセス
トンネルを介した到達可能性を提供するために、NETCONFまたはCLIを使用して必要なプロトコル(IGPおよびBGP)をJCNRコントローラに設定することができます。JCNRコントローラーは、さまざまなプロトコルの隣接関係を確立し、gRPCサービスを介してJCNR-vRouterエージェントへのルーティングプロトコルを使用して、転送情報ベース(FIB、転送テーブルとも呼ばれます)を学習およびプログラムします。JCNR-vRouterは、JCNRコントローラとの通信用に双方向のgRPCチャネルを提供します。
アンダーレイ ネットワークの一般的なルーティング更新は、以下に示すプロセスに従います。
- JCNR コントローラが vhost0 インターフェイスで新しいアンダーレイネットワークルートを学習
- JCNR コントローラは、gRPC インターフェイスを使用して、gRPC エンコードされたルートメッセージ(IPv4 または IPv6)を vRouter エージェントに送信します
- vRouter エージェントは、ネクストホップの ARP または NDP 検索を実行します
- vRouter エージェントは、ネクストホップを vRouter にカプセル化し、返される ACK メッセージを待ちます
- vRouter エージェントは、アンダーレイ ルートを vRouter にプログラムし、返ってきた ACK メッセージを待ちます
学習したアンダーレイルートが有効でなくなると、JCNRコントローラはルート削除メッセージをvRouterエージェントに送信し、必要に応じてルートとネクストホップを削除するようvRouterに通知します。
オーバーレイ(ポッドツーポッド)ネットワークの一般的なルーティング更新は、以下に示すプロセスに従います。
- 新しいリモートポッドルート(ポッド間)は、BGPを介してJCNRコントローラによって学習されます。
- JCNR コントローラは、ラベル スタックに ISIS が設定されている SR-MPLS トンネル上のネクストホップを解決します。これにより、MPLSトンネルに関連付けられたサービスラベルとトランスポートラベルを含むポッドのIPのネクストホップ情報が作成されます。
- 次に、JCNR コントローラは、pod_ip、vrf 名、ネクストホップ IP、サービス ラベル、および 0〜4 個のトランスポート ラベルを含む gRPC エンコード ルート メッセージを vRouter エージェントに送信します。
- vRouter エージェントは、アドレスがそれぞれ IPv6 か IPv4 かに応じて、NDP または ARP を使用してネクストホップ IP を解決します。
- vRouter エージェントは、MPLS トンネルのネクストホップ(まだ存在しない場合)を作成し、それを vRouter にプログラムします。
- vRouter は MPLS トンネルのネクストホップを作成してネクストホップ テーブルに追加し、応答として vRouter エージェントに ACK メッセージを送信します。
- vRouterエージェントは、前のステップで作成したネクストホップとともに、ポッドVRFのポッドルートをプログラムします。
- vRouter は、ポッドのルート エントリをネクストホップへのポインターとともにポッド VRF に追加します。その後、vRouter は応答として vRouter エージェントに ACK メッセージを送信します。
オーバーレイルートが取り消されると、JCNRコントローラはルート削除メッセージをvRouterエージェントに送信し、転送テーブルからルートとネクストホップ情報を削除するようvRouterに通知します。
アクセスコントロールリスト(ACL)は、アプリケーションポッドのネットワークポリシーを設定するために、JCNRコントローラーでサポートされています。JCNR-vRouter-agent との統合により、これらのネットワーク ポリシーは自動的に JCNR-vRouter と共有されます。
-
- Juniper Cloud-Native Router -vRouter(JCNR-vRouterまたはvRouter)
JCNR-vRouterは、Juniper Cloud-Native Routerの転送プレーンまたはデータプレーンとして機能します。vRouterエージェントを介してJCNRコントローラと対話し、さまざまなインターフェイスを介してパケットを受信および転送します。
JCNR-vRouter を使用すると、DPDK フレームワークを使用して構築されたアプリケーションが、カーネルを介さずにアプリケーションと vRouter の間で直接パケットを送受信できます。
vRouterは、gRPCプロトコルを使用して、JCNR vRouterエージェントを介して、JCNRコントローラから設定および管理情報を受信します。
- ジュニパークラウドネイティブルーターコンテナネットワークインターフェイス(JCNR-CNI)
JCNR-CNIはKubernetes CNIであり、アプリケーションポッドのネットワークインターフェイスのプロビジョニングを担当します。vRouterは、これらのアプリケーションポッドインターフェイスのデータプレーンとして機能します。JCNR-CNIは、Kubernetes、JCNRコントローラ、JCNR-vRouterと対話します。JCNR-CNIは、vRouterインターフェイスのライフサイクルとcRPD設定を管理します。アプリケーションポッドを削除すると、JCNR-CNIは対応するインターフェイス設定をcRPDから削除し、状態情報をvRouter-DPDK転送プレーンから削除します。
Cloud-Native Routerで使用されるポート
Juniper Cloud-Native Routerは、特定のTCPおよびUDPポートでリッスンします。 表 1 に、ポート、プロトコル、およびそれぞれの説明を示します。
プロトコル | ポート | の説明 |
---|---|---|
Tcp | 8085 | vRouter イントロスペクト - vRouter に関する内部統計情報を取得するために使用されます。 |
Tcp | 8070 | テレメトリ情報 - クラウドネイティブルーターからのテレメトリデータを表示するために使用されます。 |
Tcp | 9091 | vRouterヘルスチェック - クラウドネイティブルーターをチェックして、 contrail-vrouter-dpdk プロセスが実行されていることなどを確認します。 |
Tcp | 50052 | gRPC ポート - JCNR は IPv4 と IPv6 の両方でリッスンします |
Tcp | 24 | cRPD SSH |
Tcp | 830 | cRPD NETCONF |
Tcp | 666 | rpd |
Tcp | 1883 | 蚊 mqtt–パブリッシュ/サブスクライブメッセージングユーティリティ |
Tcp | 9500 | cRPDでエージェント化 |
Tcp | 21883 | NA-MQTTD |
Tcp | 50051 | jsd on cRPD |
Tcp | 51051 | jsd on cRPD |
Udp | 50055 | Syslog-NG |