28.8. MetalLB と FRR-K8s の統合の設定
FRRConfiguration
カスタムリソースは、テクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品サポートのサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではない場合があります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビューの機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行いフィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
FRRouting (FRR) は、Linux および UNIX プラットフォーム用の無料のオープンソースインターネットルーティングプロトコルスイートです。FRR-K8s
は、Kubernetes に準拠した方法で FRR
API のサブセットを公開する Kubernetes ベースの DaemonSet です。クラスター管理者は、FRRConfiguration
カスタムリソース (CR) を使用して、MetalLB
がバックエンドとして FRR-K8s
を使用するように設定できます。これを使用して、受信ルートなどの FRR サービスを利用できます。FRR-K8s
をバックエンドとして MetalLB
を実行すると、MetalLB
は適用された MetalLB 設定に対応する FRR-K8s
設定を生成します。
28.8.1. MetalLB と FRR-K8s の統合の有効化
次の手順では、MetalLB
のバックエンドとして FRR-K8s
をアクティブ化する方法を示します。
前提条件
- ベアメタルハードウェアにクラスターがインストールされている。
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてログインしている。
手順
次の例のように、
MetalLB
CR のbgpBackend
フィールドをfrr-k8s
に設定します。apiVersion: metallb.io/v1beta1 kind: MetalLB metadata: name: metallb namespace: metallb-system spec: bgpBackend: frr-k8s
28.8.2. FRR の設定
MetalLB
で FRR
サービスを使用するために、複数の FRRConfiguration
CR を作成できます。MetalLB
は FRRConfiguration
オブジェクトを生成し、FRR-K8s
はそのオブジェクトをすべてのユーザーが作成した他のすべての設定とマージします。
たとえば、特定の近隣によりアドバタイズされた接頭辞すべてを受信するように FRR-K8s
を設定できます。次の例では、ホスト 172.18.0.5
の BGPPeer
によってアドバタイズされるすべての接頭辞を受信するように FRR-K8
を設定します。
FRRConfiguration CR の例
apiVersion: frrk8s.metallb.io/v1beta1 kind: FRRConfiguration metadata: name: test namespace: metallb-system spec: bgp: routers: - asn: 64512 neighbors: - address: 172.18.0.5 asn: 64512 toReceive: allowed: mode: all
また、FRR-K8s を設定して、適用される設定に関係なく、常に接頭辞のセットをブロックすることもできます。これは、クラスターが誤動作する可能性のある Pod または ClusterIPs
CIDR へのルートを回避するのに役立ちます。次の例では、接頭辞セット 192.168.1.0/24
をブロックします。
MetalLB CR の例
apiVersion: metallb.io/v1beta1 kind: MetalLB metadata: name: metallb namespace: metallb-system spec: bgpBackend: frr-k8s frrk8sConfig: alwaysBlock: - 192.168.1.0/24
FRR-K8s
を設定すると、クラスターネットワーク
CIDR と サービスネットワーク
CIDR をブロックできます。次のコマンドを実行すると、これらの CIDR アドレス仕様の値を表示できます。
$ oc describe network.config/cluster
28.8.3. FRRConfiguration CRD の設定
次のセクションでは、FRRConfiguration
カスタムリソース (CR) を使用する参照例を示します。
28.8.3.1. routers フィールド
routers
フィールドを使用して、仮想ルーティングおよび転送 (VRF) リソースごとに 1 つずつ、複数のルーターを設定できます。ルーターごとに、AS 番号 (ASN: Autonomous System Number) を定義する必要があります。
次の例のように、接続する Border Gateway Protocol (BGP) の近隣のリストを定義することもできます。
FRRConfiguration CR の例
apiVersion: frrk8s.metallb.io/v1beta1 kind: FRRConfiguration metadata: name: test namespace: frr-k8s-system spec: bgp: routers: - asn: 64512 neighbors: - address: 172.30.0.3 asn: 4200000000 ebgpMultiHop: true port: 180 - address: 172.18.0.6 asn: 4200000000 port: 179
28.8.3.2. toAdvertise フィールド
デフォルトでは、FRR-K8s
はルーター設定の一部として設定された接頭辞をアドバタイズしません。これらをアドバタイズするには、toAdvertise
フィールドを使用します。
次の例のように、接頭辞のサブセットをアドバタイズできます。
FRRConfiguration CR の例
apiVersion: frrk8s.metallb.io/v1beta1
kind: FRRConfiguration
metadata:
name: test
namespace: frr-k8s-system
spec:
bgp:
routers:
- asn: 64512
neighbors:
- address: 172.30.0.3
asn: 4200000000
ebgpMultiHop: true
port: 180
toAdvertise:
allowed:
prefixes: 1
- 192.168.2.0/24
prefixes:
- 192.168.2.0/24
- 192.169.2.0/24
- 1
- 接頭辞のサブセットをアドバタイズします。
次の例は、すべての接頭辞をアドバタイズする方法を示しています。
FRRConfiguration CR の例
apiVersion: frrk8s.metallb.io/v1beta1
kind: FRRConfiguration
metadata:
name: test
namespace: frr-k8s-system
spec:
bgp:
routers:
- asn: 64512
neighbors:
- address: 172.30.0.3
asn: 4200000000
ebgpMultiHop: true
port: 180
toAdvertise:
allowed:
mode: all 1
prefixes:
- 192.168.2.0/24
- 192.169.2.0/24
- 1
- すべての接頭辞をアドバタイズします。
28.8.3.3. toReceive フィールド
デフォルトでは、FRR-K8s
は近隣によってアドバタイズされた接頭辞を処理しません。toReceive
フィールドを使用して、このようなアドレスを処理できます。
次の例のように、接頭辞のサブセットを設定できます。
FRRConfiguration CR の例
apiVersion: frrk8s.metallb.io/v1beta1 kind: FRRConfiguration metadata: name: test namespace: frr-k8s-system spec: bgp: routers: - asn: 64512 neighbors: - address: 172.18.0.5 asn: 64512 port: 179 toReceive: allowed: prefixes: - prefix: 192.168.1.0/24 - prefix: 192.169.2.0/24 ge: 25 1 le: 28 2
次の例では、アナウンスされたすべての接頭辞を処理するように FRR を設定します。
FRRConfiguration CR の例
apiVersion: frrk8s.metallb.io/v1beta1 kind: FRRConfiguration metadata: name: test namespace: frr-k8s-system spec: bgp: routers: - asn: 64512 neighbors: - address: 172.18.0.5 asn: 64512 port: 179 toReceive: allowed: mode: all
28.8.3.4. bgp フィールド
bgp
フィールドを使用して、さまざまな BFD
プロファイルを定義し、それらを近隣に関連付けることができます。次の例では、BFD
は、BGP
セッションをバックアップし、FRR
はリンク障害を検出できます。
FRRConfiguration CR の例
apiVersion: frrk8s.metallb.io/v1beta1 kind: FRRConfiguration metadata: name: test namespace: frr-k8s-system spec: bgp: routers: - asn: 64512 neighbors: - address: 172.30.0.3 asn: 64512 port: 180 bfdProfile: defaultprofile bfdProfiles: - name: defaultprofile
28.8.3.5. nodeSelector フィールド
デフォルトでは、FRR-K8s
は、デーモンが実行されているすべてのノードに設定を適用します。nodeSelector
フィールドを使用して、設定を適用するノードを指定できます。以下に例を示します。
FRRConfiguration CR の例
apiVersion: frrk8s.metallb.io/v1beta1 kind: FRRConfiguration metadata: name: test namespace: frr-k8s-system spec: bgp: routers: - asn: 64512 nodeSelector: labelSelector: foo: "bar"
FRRConfiguration
カスタムリソースのフィールドは、次の表で説明されています。
フィールド | 型 | 説明 |
---|---|---|
|
| FRR が設定するルーターを指定します (VRF ごとに 1 つ)。 |
|
| セッションのローカル側で使用する自律システム番号。 |
|
|
|
|
| このルーターからセッションを確立するために使用されるホスト VRF を指定します。 |
|
| BGP セッションを確立する近隣を指定します。 |
|
| セッションのローカル側で使用する自律システム番号を指定します。 |
|
| セッションを確立する 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 の監視状態を定義します。 |
28.8.4. FRR-K8s が複数の設定を統合する方法
複数のユーザーが同じノードを選択する設定を追加した場合、FRR-K8s
は設定をマージします。各設定は他の設定のみを拡張できます。つまり、ルーターに新しい近隣を追加したり、ネイバーに追加の接頭辞をアドバタイズできますが、別の設定によって追加されたコンポーネントを削除できません。
28.8.4.1. 設定の競合
特定の設定では競合が発生し、エラーが発生する可能性があります。次に例を示します。
- ルーターが同じで ASN が異なる (同じ VRF 内)
- 近隣が同じで ASN が異なる(同じ IP/ポートを持つ)
- 名前が同じで値が異なる複数の BFD プロファイル
デーモンは、ノードに対して無効な設定を検出すると、その設定を無効として報告し、以前の有効な FRR
設定に戻します。
28.8.4.2. マージ
マージする場合、次のアクションを実行できます。
- 近隣にアドバタイズする IP セットを拡張します。
- IP セットを持つ別の近隣を追加します。
- コミュニティーを関連付ける IP のセットを拡張します。
- 近隣への着信ルートを許可します。
各設定は自己完結型である必要があります。つまり、たとえば、別の設定からの接頭辞を活用して、ルーターセクションで定義されていない接頭辞を許可することはできません。
適用する設定に互換性がある場合、マージは次のように機能します。
-
FRR-K8s
は、すべてのルーターを組み合わせます。 -
FRR-K8s
は、ルーターごとにすべての接頭辞と近隣をマージします。 -
FRR-K8s
は、近隣ごとに、すべてのフィルターをマージします。
制限の少ないフィルターは、制限が厳密なフィルターよりも優先されます。たとえば、一部の接頭辞を受け入れるフィルターは、接頭辞をまったく受け入れないフィルターよりも優先され、すべての接頭辞を受け入れるフィルターは、一部の接頭辞を受け入れるフィルターよりも優先されます。