4.8. MetalLB と FRR-K8s の統合の設定
FRRouting (FRR) は、Linux および UNIX プラットフォーム用の無料のオープンソースインターネットルーティングプロトコルスイートです。FRR-K8s
は、Kubernetes に準拠した方法で FRR
API のサブセットを公開する Kubernetes ベースの DaemonSet です。クラスター管理者は、FRRConfiguration
カスタムリソース (CR) を使用して、受信ルートなど、MetalLB が提供しない一部の FRR サービスにアクセスできます。MetalLB
は、適用された MetalLB 設定に対応する FRR-K8s
設定を生成します。
仮想ルート転送 (VRF) を設定する場合、ユーザーは VRF を 1000 未満のテーブル ID に変更する必要があります。これは、1000 より大きい値が OpenShift Container Platform 用に予約されているためです。
4.8.1. FRR の設定 リンクのコピーリンクがクリップボードにコピーされました!
MetalLB
で FRR
サービスを使用するために、複数の FRRConfiguration
CR を作成できます。MetalLB
は FRRConfiguration
オブジェクトを生成し、FRR-K8s
はそのオブジェクトをすべてのユーザーが作成した他のすべての設定とマージします。
たとえば、特定の近隣によりアドバタイズされた接頭辞すべてを受信するように FRR-K8s
を設定できます。次の例では、ホスト 172.18.0.5
の BGPPeer
によってアドバタイズされるすべての接頭辞を受信するように FRR-K8
を設定します。
FRRConfiguration CR の例
また、FRR-K8s を設定して、適用される設定に関係なく、常に接頭辞のセットをブロックすることもできます。これは、クラスターが誤動作する可能性のある Pod または ClusterIPs
CIDR へのルートを回避するのに役立ちます。次の例では、接頭辞セット 192.168.1.0/24
をブロックします。
MetalLB CR の例
FRR-K8s
を設定すると、クラスターネットワーク
CIDR と サービスネットワーク
CIDR をブロックできます。次のコマンドを実行すると、これらの CIDR アドレス仕様の値を表示できます。
oc describe network.config/cluster
$ oc describe network.config/cluster
4.8.2. FRRConfiguration CRD の設定 リンクのコピーリンクがクリップボードにコピーされました!
次のセクションでは、FRRConfiguration
カスタムリソース (CR) を使用する参照例を示します。
4.8.2.1. routers フィールド リンクのコピーリンクがクリップボードにコピーされました!
routers
フィールドを使用して、Virtual Routing and Forwarding (VRF) リソースごとに 1 つずつ、複数のルーターを設定できます。各ルーターに AS 番号 (ASN) を定義する必要があります。
次の例のように、接続する Border Gateway Protocol (BGP) の近隣のリストを定義することもできます。
FRRConfiguration CR の例
4.8.2.2. toAdvertise フィールド リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、FRR-K8s
はルーター設定の一部として設定された接頭辞をアドバタイズしません。これらをアドバタイズするには、toAdvertise
フィールドを使用します。
次の例のように、接頭辞のサブセットをアドバタイズできます。
FRRConfiguration CR の例
- 1
- 接頭辞のサブセットをアドバタイズします。
次の例は、すべての接頭辞をアドバタイズする方法を示しています。
FRRConfiguration CR の例
- 1
- すべての接頭辞をアドバタイズします。
4.8.2.3. toReceive フィールド リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、FRR-K8s
は近隣によってアドバタイズされた接頭辞を処理しません。toReceive
フィールドを使用して、このようなアドレスを処理できます。
次の例のように、接頭辞のサブセットを設定できます。
FRRConfiguration CR の例
次の例では、アナウンスされたすべての接頭辞を処理するように FRR を設定します。
FRRConfiguration CR の例
4.8.2.4. bgp フィールド リンクのコピーリンクがクリップボードにコピーされました!
bgp
フィールドを使用して、さまざまな BFD
プロファイルを定義し、それらを近隣に関連付けることができます。次の例では、BFD
は、BGP
セッションをバックアップし、FRR
はリンク障害を検出できます。
FRRConfiguration CR の例
4.8.2.5. nodeSelector フィールド リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、FRR-K8s
は、デーモンが実行されているすべてのノードに設定を適用します。nodeSelector
フィールドを使用して、設定を適用するノードを指定できます。以下に例を示します。
FRRConfiguration CR の例
FRRConfiguration
カスタムリソースのフィールドは、次の表で説明されています。
フィールド | 型 | 説明 |
---|---|---|
|
| FRR が設定するルーターを指定します (VRF ごとに 1 つ)。 |
|
| セッションのローカル側で使用する AS 番号 (ASN)。 |
|
|
|
|
| このルーターからセッションを確立するために使用されるホスト VRF を指定します。 |
|
| BGP セッションを確立する近隣を指定します。 |
|
|
セッションのリモート終了に使用する ASN を指定します。このフィールドを使用する場合は、 |
|
|
明示的に設定せずに、セッションのリモートエンドに使用する ASN を検出します。同じ ASN を持つネイバーの場合は |
|
| セッションを確立する IP アドレスを指定します。 |
|
| セッションを確立するときにダイアリングするポートを指定します。デフォルトは 179 です。 |
|
|
BGP セッションの確立に使用するパスワードを指定します。 |
|
|
ネイバーの認証シークレットの名前を指定します。シークレットは "kubernetes.io/basic-auth" タイプであり、FRR-K8s デーモンと同じ namespace にある必要があります。キー "password" はパスワードをシークレットに保存します。 |
|
| RFC4271 に従って、要求された BGP ホールド時間を指定します。デフォルトは 180s です。 |
|
|
RFC4271 に従って、要求された BGP キープアライブ時間を指定します。デフォルトは |
|
| BGP が近隣に次に接続を試行するまで待機する時間を指定します。 |
|
| BGPPeer がマルチホップ分、離れているかどうかを示します。 |
|
| BGP セッションに関連付けられた BFD セッションに使用する BFD プロファイルの名前を指定します。設定されていない場合、BFD セッションは設定されません。 |
|
| 近隣にアドバタイズする接頭辞のリストと、関連するプロパティーを表します。 |
|
| 近隣にアドバタイズする接頭辞のリストを指定します。このリストは、ルーターで定義した接頭辞と一致する必要があります。 |
|
|
接頭辞を処理するときに使用するモードを指定します。接頭辞リスト内の接頭辞のみを許可するように |
|
| アドバタイズされたローカルプリファレンスに関連付けられた接頭辞を指定します。ローカル設定に関連付けられた接頭辞を、アドバタイズが許可される接頭辞に指定する必要があります。 |
|
| ローカル設定に関連付けられた接頭辞を指定します。 |
|
| 接頭辞に関連付けられたローカル設定を指定します。 |
|
| アドバタイズされた BGP コミュニティーに関連付けられた接頭辞を指定します。アドバタイズする接頭辞のリストに、ローカル設定に関連付けられた接頭辞を含める必要があります。 |
|
| コミュニティーに関連付けられた接頭辞を指定します。 |
|
| 接頭辞に関連付けられたコミュニティーを指定します。 |
|
| 近隣から受信する接頭辞を指定します。 |
|
| 近隣から受信する情報を指定します。 |
|
| 近隣から許可される接頭辞を指定します。 |
|
|
接頭辞を処理するときに使用するモードを指定します。 |
|
| MP BGP を無効にして、IPv4 と IPv6 のルート交換を別々の BGP セッションに分離しないようにします。 |
|
| このルーターインスタンスからアドバタイズするすべての接頭辞を指定します。 |
|
| 近隣を設定するときに使用する BFD プロファイルのリストを指定します。 |
|
| 設定の他の部分で参照される BFD プロファイルの名前。 |
|
|
このシステムが制御パケットを受信できる最小間隔をミリ秒単位で指定します。デフォルトは |
|
|
このシステムが BFD 制御パケットを送信するために使用する、ジッターを除いた最小送信間隔をミリ秒単位で指定します。デフォルトは |
|
| パケット損失を判定するための検出乗数を設定します。接続損失検出タイマーを決定するには、リモート送信間隔にこの値を乗算します。 |
|
|
このシステムが処理できる最小のエコー受信送信間隔をミリ秒単位で設定します。デフォルトは |
|
| エコー送信モードを有効または無効にします。このモードはデフォルトで無効になっており、マルチホップ設定ではサポートされていません。 |
|
| セッションを passive としてマークします。passive セッションでは接続を開始せず、応答を開始する前にピアからの制御パケットを待機します。 |
|
| マルチホップセッションのみ。着信 BFD 制御パケットの最小予想 TTL を設定します。 |
|
| この設定の適用を試みるノードを制限します。指定した場合、指定されたセレクターに一致するラベルが割り当てられたノードのみが設定の適用を試みます。指定されていない場合は、すべてのノードがこの設定を適用しようとします。 |
|
| FRRConfiguration の監視状態を定義します。 |
4.8.3. FRR-K8s が複数の設定を統合する方法 リンクのコピーリンクがクリップボードにコピーされました!
複数のユーザーが同じノードを選択する設定を追加した場合、FRR-K8s
は設定をマージします。各設定は他の設定のみを拡張できます。つまり、ルーターに新しい近隣を追加したり、ネイバーに追加の接頭辞をアドバタイズできますが、別の設定によって追加されたコンポーネントを削除できません。
4.8.3.1. 設定の競合 リンクのコピーリンクがクリップボードにコピーされました!
特定の設定では競合が発生し、エラーが発生する可能性があります。次に例を示します。
- 同じルーター (同じ VRF 内) に対して異なる ASN がある
- 同じネイバー (同じ IP/ポート) に対して異なる ASN がある
- 名前が同じで値が異なる BFD プロファイルが複数ある
デーモンは、ノードに対して無効な設定を検出すると、その設定を無効として報告し、以前の有効な FRR
設定に戻します。
4.8.3.2. マージ リンクのコピーリンクがクリップボードにコピーされました!
マージする場合、次のアクションを実行できます。
- 近隣にアドバタイズする IP セットを拡張します。
- IP セットを持つ別の近隣を追加します。
- コミュニティーを関連付ける IP のセットを拡張します。
- 近隣への着信ルートを許可します。
各設定は自己完結型である必要があります。つまり、たとえば、別の設定からの接頭辞を活用して、ルーターセクションで定義されていない接頭辞を許可することはできません。
適用する設定に互換性がある場合、マージは次のように機能します。
-
FRR-K8s
は、すべてのルーターを組み合わせます。 -
FRR-K8s
は、ルーターごとにすべての接頭辞と近隣をマージします。 -
FRR-K8s
は、近隣ごとに、すべてのフィルターをマージします。
制限の少ないフィルターは、制限が厳密なフィルターよりも優先されます。たとえば、一部の接頭辞を受け入れるフィルターは、接頭辞をまったく受け入れないフィルターよりも優先され、すべての接頭辞を受け入れるフィルターは、一部の接頭辞を受け入れるフィルターよりも優先されます。