サービスとしての BGP を有効にする
クラウドネイティブのContrail® Networking™は、BGP as a Service(BGPaaS)をサポートしています。このドキュメントは、リリース 22.1 以降を使用する環境で BGPaaS を有効にするために使用する必要があります。
クラウドネイティブContrail NetworkingのBGPaaS機能は、クラウドネイティブContrail Networkingを使用して、クラウドネットワーク環境の仮想ネットワーク内で動作するBGPのネットワークサポートを提供します。
クラウドネイティブContrailにおけるBGP as a Serviceのメリット
クラウドネイティブのContrail Networkingを使用したKubernetes環境のBGPaaSでは、以下の機能を利用できます。
-
仮想ネットワークで実行される BGP プロトコル サービス。このBGPサービスは、仮想ネットワーク内のポッド、仮想マシン、およびその他のワークロードに対するBGPネイバーセッションを作成します。
-
IPv4 ネイバー、IPv4 および IPv6 ユニキャスト アドレス ファミリー、IPv6-over-IPv4 ネクストホップ マッピングをサポートするルーティング プロトコル。
-
最もよく知られた BGP 設定パラメータを使用してユーザーが設定可能な BGP プロトコル サービス。
ルーティング プロトコルによって提供される機能を必要とする任意のクラウド ネットワーク環境で BGPaaS を使用できます。BGPaaS は、以下のシナリオで特に役立つ場合があります。
-
複数のワークロードを実行する大規模なクラウド ネットワーク環境を管理する場合は、BGPaaS を使用してネットワーク サービスを拡張できます。
-
ルーティング プロトコルのネットワーク到達可能性情報を必要とするトンネリング プロトコルを使用してトンネルを作成および維持する場合、BGPaaS が役立ちます。
前提 条件
サービスとしての BGP を有効にする前に、以下のことを想定しています。
-
Kubernetesオーケストレーションを使用して稼働しているクラウドネットワーク環境で運用しており、クラウドネイティブのContrail Networkingが運用されています。
-
あなたはBGPに関する実務知識を持っています。
クラウドネイティブContrail NetworkingにおけるサービスとしてのBGPの概要
クラウドネイティブのContrail Networkingは、BGPaaSのネットワークサポートを提供します。
クラウドネットワーク環境でBGPを実行するBGPサービスを見つける必要があります。このドキュメントでは、BIRDインターネットルーティングデーモン(BIRD)が提供するBGPサービスを使用して、クラウドネイティブContrail NetworkingでBGPaaSのネットワークサポートを有効にする方法を説明します。このデーモンは、UNIXの多くのバージョンに組み込み開発ツールとして利用できます。別の画像を使用して環境にダウンロードすることもできます。
この後の例では、BGPaaSが有効になっているときに、BIRDのBGPデーモンがポッドで実行されていることがわかります。そのデーモンは、Cloud-Native Contrail Networkingが提供するネットワーク機能を使用して、ネットワーク上でBGPメッセージを送信します。BIRD の詳細については、 BIRD インターネット ルーティング デーモン ホームページを参照してください。
BGPaaSが動作している場合、BGPデーモンはポッドで実行され、BGPaaSを管理します。BGP デーモンは Contrail vRouter に直接接続されています。
Contrail vRouter は、少なくとも 1 つの制御プレーン ノードに接続し、BIRD デーモンを制御プレーンに接続します。少なくとも 1 つの制御ノードと BIRD デーモン間の BGP ピアリング セッションは、Contrail vRouter とのこの接続を通じて確立されます。
制御ノードとBGPデーモンの間にピアリング・セッションが作成されると、BGPデーモンはBGPPaaSを管理し、制御プレーンを介してBGPクライアントにルートを送信することができます。BGPaaS管理タスクには、ワークロード、ポッド、VM、またはその他のオブジェクトにIPアドレスを割り当てることが含まれます。
ポッドで BGPaaS を有効にする
BGPaaSを有効にするには、BGPサービスをホストするポッドを作成する必要があります。その後、BGPサービスをホストするポッドを、BGPaaSが実行される仮想ネットワークに関連付ける必要があります。
BGPサービスをホストするポッドを仮想ネットワークに関連付ける2つの方法のいずれかを使用できます。
-
仮想マシンインターフェイスセレクター—BGPサービスを実行するポッドは、仮想ネットワークに直接関連付けられます。BGPサービスをホストするポッドは、仮想ネットワークアソシエーションが定義された後に自動的に発見されます。
-
仮想マシンインターフェイス参照—BGPサービスを実行するポッドは、BGPサービスをホストするポッドの名前空間と仮想マシンインターフェイスの名前を明示的に提供することで、仮想ネットワークに直接関連付けられます。
以下のセクションでは、各アソシエーションメソッドの手順を示します。
仮想マシンインターフェイスセレクターを使用してポッドでBGPaaSを有効にする
BGPサービスをホストするポッドを作成する必要があります。その後、仮想マシンインターフェイスセレクターでBGPaaSを有効にすることができます。
ポッドには以下が必要です。
-
少なくとも1つのIPv4インターフェイスを含めます。
-
アノテーションを使用して
core.juniper.net/bgpaas-networks
、関連する仮想ネットワーク名を指定します。この注釈の値には、少なくとも 1 つの仮想ネットワーク名を含める必要があります。BIRDデーモンをホストするポッドを複数の仮想ネットワークに関連付ける場合は、仮想ネットワーク名をコンマ区切りリストとして入力します。
この YAML ファイルの例では、BGP サービスをホストするポッドが作成されています。ポッドは2つの仮想ネットワークに関連付けされており、BGPaaSは両方の仮想ネットワークで実行できます。 イメージ: コンテナ内の変数 : 階層は、この例で BGP サービスを提供する BIRD イメージ ファイルを指しています。
apiVersion: v1 kind: Pod metadata: name: bird-pod-shared-1 namespace: bgpaas-ns annotations: k8s.v1.cni.cncf.io/networks: | [{ "name": "bgpaas-vn-1", "namespace": "bgpaas-ns", "cni-args": null "interface": "eth1" },{ "name": "bgpaas-vn-2", "namespace": "bgpaas-ns", "cni-args": null "interface": "eth2" }] core.juniper.net/bgpaas-networks: bgpaas-vn-1,bgapss-vn-2 spec: containers: - name: bird-pod-c image: somewhere.juniper.net/cn2/bazel-build/dev/bird-sut:1.0 command: ["bash","-c","while true; do sleep 60s; done"] securityContext: privileged: true
kubectl get vmi -n virtual-network-name を入力して、ポッドとそれに関連する仮想マシン インターフェイスが作成済みであることを確認します。また、kubectl describe コマンドを入力して、仮想マシンインターフェイスが存在することを確認することもできます。
kubectl describe コマンドのラベルセクションにある bgpaasVN= 出力を確認することで、仮想ネットワークが作成されたことを確認できます。
kubectl get vmi -n bgpaas-ns CLUSTERNAME NAME NETWORK PODNAME IFCNAME STATE AGE contrail-k8s-kubemanager-kubernetes bird-pod-1-abb881a8 bgpaas-vn-1 bird-pod-1 eth1 Success 13s contrail-k8s-kubemanager-kubernetes bird-pod-1-e3f93f05 default-podnetwork bird-pod-1 eth0 Success 13s kubectl describe vmi bird-pod-1-abb881a8 -n bgpaas-ns Name: bird-pod-1-abb881a8 Namespace: bgpaas-ns Labels: core.juniper.net/bgpaasVN=bgpaas-vn-1 namespace=bgpaas-ns
その後、BGPaaS を設定するには、BGPaaS オブジェクトを作成する必要があります。BGPaaS オブジェクトは、 virtualMachineInterfacesSelector: セクション内の仮想ネットワークを 参照します。
apiVersion: core.contrail.juniper.net/v1alpha1 kind: BGPAsAService metadata: namespace: bgpaas-ns name: bgpaas-test spec: shared: false autonomousSystem: 10 bgpAsAServiceSessionAttributes: loopCount: 2 routeOriginOverride: origin: EGP addressFamilies: family: - inet - inet6 virtualMachineInterfacesSelector: - matchLabels: core.juniper.net/bgpaasVN: bgpaas-vn-1 - matchLabels: core.juniper.net/bgpaasVN: bgpaas-vn-2
仮想マシンインターフェイスリファレンスを使用してポッドでBGPaaSを有効にする
まず BIRD デーモンをホストするポッドを作成して、仮想マシン・インターフェース参照を使用して BGPaaS を有効にする必要があります。ポッドには、少なくとも1つのIPv4インターフェイスを含める必要があります。
次の例では、 bgpaas-ns 名前空間にポッドが作成されています。アノテーションは、ポッドを bgpaas-vn-1 仮想ネットワークに関連付けます。 イメージ: コンテナ内の変数 : 階層は、この例で BGP サービスを提供する BIRD イメージ ファイルを指しています。
apiVersion: v1 kind: Pod metadata: name: bird-pod-1 namespace: bgpaas-ns annotations: k8s.v1.cni.cncf.io/networks: bgpaas-vn-1 spec: containers: - name: bird-pod-c image: somewhere.juniper.net/cn2/bazel-build/dev/bird-sut:1.0 command: ["bash","-c","while true; do sleep 60s; done"] securityContext: privileged: true
kubectl get vmi -n bgpaas-ns コマンドを入力して、ポッドオブジェクト設定ファイルをコミットした後にポッドが作成されたことを確認します。
このコマンド出力のポッドの仮想マシンインターフェイスの名前に注意してください。BGPaaS オブジェクトを設定する場合は、この手順の後半で仮想マシン インターフェイス名を指定する必要があります。
kubectl get vmi -n bgpaas-ns CLUSTERNAME NAME NETWORK PODNAME IFCNAME STATE AGE contrail-k8s-kubemanager-kubernetes bird-pod-1-abb881a8 bgpaas-vn-1 bird-pod-1 eth1 Success 13s contrail-k8s-kubemanager-kubernetes bird-pod-1-e3f93f05 default-podnetwork bird-pod-1 eth0 Success 13s
仮想マシン インターフェイス参照は、 仮想マシンインターフェイスリファレンス: 階層を使用して BGPaaS オブジェクトを作成する間に定義されます。 名前空間: はポッドの名前空間であり、 名前: は kubectl get vmi -n bgpaas-ns コマンドを使用して取得した仮想マシンインターフェイス名です。
apiVersion: core.contrail.juniper.net/v1alpha1 kind: BGPAsAService metadata: namespace: bgpaas-ns name: bgpaas-sample spec: shared: false autonomousSystem: 100 bgpAsAServiceSessionAttributes: localAutonomousSystem: 10 loopCount: 2 routeOriginOverride: origin: EGP addressFamilies: family: - inet - inet6 virtualMachineInterfaceReferences: - apiVersion: core.contrail.juniper.net/v1alpha1 kind: VirtualMachineInterface namespace: bgpaas-ns name: bird-pod-1-abb881a8
BGPasaSのIPアドレス割り当て方法を設定する
BGPaaService は、次のいずれかの IP アドレス割り当て方法で構成できます。
-
自動IPアドレス割り当て—BGPサービスはIPアドレスを割り当てます。
-
ユーザー指定のIPアドレス割り当て—IPアドレスを割り当てます。
オブジェクトで IP アドレス割り当て方法を設定します Subnet
。
自動 IP アドレス割り当ては、デフォルトで有効になっています。自動 IP アドレス割り当てを手動で無効にせずに BGPaaS を有効にすると、BGPaaS は自動 IP アドレス割り当てを使用します。
自動 IP アドレス割り当てを無効にするには、 disableBGPaaSIPAutoAllocation: オブジェクト内の変数を Subnet
true に設定します。サブネット オブジェクト ファイルに disableBGPaaSIPAutoAllocation: 変数が存在しない場合、自動 IP アドレス割り当てが有効になります。
以下の構成例では、サブネット・オブジェクト構成ファイルに disableBGPaaSIPAutoAllocation: 変数が存在しないため、自動 IP アドレス割り当てが有効になっています。
apiVersion: core.contrail.juniper.net/v1alpha1 kind: Subnet metadata: namespace: bgpaas-ns name: bgpaas-subnet-1 spec: cidr: "172.20.10.0/24"
この構成サンプルでは、 disableBGPaaSIPAutoAllocation: 変数が false に設定されているため、自動 IP アドレス割り当てが有効 になっています。
apiVersion: core.contrail.juniper.net/v1alpha1 kind: Subnet metadata: namespace: bgpaas-ns name: bgpaas-subnet-2 spec: cidr: "172.20.20.0/24" disableBGPaaSIPAutoAllocation: false
ユーザーが指定した IP アドレス割り当てを有効にするには、 disableBGPaaSIPAutoAllocation: 変数 を に設定します true
。ユーザー指定のIPアドレス割り当てが有効になっている場合、BGPaaSがサブネット内のエンドポイントに割り当てることができるBGPアドレスも設定する必要があります。 bgpaasPrimaryIP: 変数を使用して、プライマリ IP アドレスを設定する必要があります。また、オプションのセカンダリIPアドレスを設定することもできます。これは、この例では bgpaasSecondaryIP: 変数で確認できます。
apiVersion: core.contrail.juniper.net/v1alpha1 kind: Subnet metadata: namespace: bgpaas-ns name: bgpaas-subnet-2 spec: cidr: "172.20.20.0/24" disableBGPaaSIPAutoAllocation: true bgpaasPrimaryIP: 172.20.20.3 bgpaasSecondaryIP: 172.20.20.4
BGPasaServiceオブジェクトを設定する
オブジェクトを作成して、クラスターで BGPaaS を BGPAsAService 有効にします。
フィールドでBGPAsAService使用BGPAsAService
する YAML ファイルを作成してオブジェクトを作成します。
apiVersion: core.contrail.juniper.net/v1alpha1 kind: BGPAsAService metadata: namespace: bgpaas-ns name: bgpaas-test spec: shared: false autonomousSystem: 10 bgpAsAServiceSessionAttributes: loopCount: 2 routeOriginOverride: origin: EGP addressFamilies: family: - inet - inet6 virtualMachineInterfacesSelector: - matchLabels: core.juniper.net/bgpaasVN: bgpaas-vn-1 - matchLabels: core.juniper.net/bgpaasVN: bgpaas-vn-2
フィールド変数の | 説明 |
---|---|
共有: |
共通の BGP ルーター オブジェクトを、同じ仮想ネットワーク内の複数の仮想マシン インターフェイスと共有できるかどうかを指定します。 このフィールドが true に設定されている場合、1 つの BGP クライアント ルーターを同じ仮想ネットワーク内の複数の仮想マシン インターフェイスと共有できます。この設定は、VMI の仮想ネットワークで作成する必要がある BGP クライアント ルーターの総数を制限します。 このフィールドを false に設定すると、各仮想マシン インターフェイスに対して 1 つの BGP クライアント ルーターが作成されます。 |
自律システム: |
BGP インスタンスのグローバル自律システム番号を指定します。自律システム番号は、1~4294967295の任意の総数です。 |
bgpAsAServiceSessionAttributes: |
BGPaaS の BGP セッション属性を定義します。
表 2 を参照してください。
|
仮想マシンインターフェイスリファレンス: |
仮想マシン インターフェイス 参照を使用する場合に BGPaaS に関連付ける仮想マシン インターフェイス パラメーターを定義します。
表 3 を参照してください。
|
virtualMachineインターフェイス選択者: |
仮想マシン インターフェイス セレクターを使用する際に BGPaaS が実行される仮想ネットワークを定義します。
表 4 を参照してください。
|
フィールド | の説明 |
---|---|
localAutonomousSystem: |
BGPのローカル自律システム番号を指定します。 |
ループカウント: |
ルートを破棄する前に、ルート更新で同じ ASN を確認できる回数を指定します。 LoopCount: は、最大 16 までの任意の総数を指定できます。 |
routeOriginOverride: |
元の設定を上書きし、ルート転送時に起点属性を 不完全 に設定します。 このフィールドを false に設定した場合、ルートは起点設定に基づいて BGP にアドバタイズされます。送信元は IGP または EGP のいずれかであり、このファイルの 起点: フィールドを使用して設定されます。 このフィールドを true に設定すると、アドバタイズされたルートの起点は 不完全 に設定されます。 BGPネットワークがBGPサービスから受信したルートの優先順位付け方法を変更する場合は、このフィールドを使用します。デフォルトでは、BGPネットワークは送信元に基づいてルートを優先し、 不完全 な起点を持つルートは、IGPまたはEGPから受信したルートよりも低い優先度を受信します。 |
起源: |
BGPが内部ゲートウェイプロトコル(igp)または外部ゲートウェイプロトコル(egp)として動作するかどうかを指定します。デフォルトのルート起点は igp です。 |
アドレスファミリー: |
アドレスファミリーを指定します。ファミリーは、IPv4の場合は inet 、 IPv6ではinet6 に指定できます。両方のアドレスファミリーを同時に指定できます。 |
フィールド | の説明 |
---|---|
apiVersion: |
仮想マシン インターフェイス リファレンスの API バージョンを指定します。 |
種類: |
このフィールドは必ず VirtualMachineInterface に設定します。 |
名前 空間: |
仮想マシン インターフェイスリファレンスに関連付けられた名前空間を指定します。 ポッド オブジェクトの作成中に、この名前空間を定義します。 仮想マシンインターフェイスリファレンスを使用してポッドでBGPaaSを有効にするを参照してください。 |
名前: |
仮想マシン・インターフェース・リファレンスに関連付けられたポッドの名前を指定します。 kubectl get vmi -n bgpaas-ns コマンドを入力すると、ポッド名を取得できます。 仮想マシンインターフェイスリファレンスを使用してポッドでBGPaaSを有効にするを参照してください。 |
フィールド | の説明 |
---|---|
matchラベル: |
仮想マシンインターフェイスセレクターの一致ラベルを定義します。 このコンテキストの一致ラベルは、仮想マシンインターフェイスセレクターが実行されている仮想ネットワークを参照するために常に使用されます。 このセクションには、必ず core.juniper.net/bgpaasVN :virtual-network-name として一致ラベル値を入力します。 仮想マシンインターフェイスセレクターを使用してポッドでBGPaaSを有効にするを参照してください。 |
サービス構成としての BGP の検証
BGPAsAService オブジェクト ファイルをコミットした後、BGPaaS オブジェクトが正常に実行されていることを確認する必要があります。
オブジェクトの状態を確認するために BGPAsAService オブジェクトを作成した後、 kubectl get BGPAsAService コマンドを入力します。[ 状態] フィールドが [成功] を示す場合、オブジェクトは正常に作成されます。
kubectl get BGPAsAService -n bgpaas-ns NAME AS IPADDRESS SHARED STATE AGE bgpaas-sample 100 false Success 33s
また、BGPaaS サーバーと BGPaaS クライアントが作成され、が 成功 状態であることを確認する必要があります。
kubectl get BGPRouter コマンドを入力して、BGPaaS サーバーとクライアントの存在と運用状態を確認します。
kubectl get BGPRouter -n bgpaas-ns NAME TYPE IDENTIFIER STATE AGE bgpaas-ns-bgpaas-vn-1-bgpaas-server bgpaas-server Success 2m57s bgpaas-ns-bgpaas-vn-1-bird-pod-1-abb881a8 bgpaas-client 172.20.10.2 Success 2m57s
ポッドでBGPを設定する
また、ポッドで実行されているBGPサービスのネットワークパラメーターも設定する必要があります。各 BGP サービスの設定は一意です。必要なネットワーク設定パラメータの文書化は、このドキュメントの範囲外です。ご利用のBGPサービスに関連するドキュメントを確認してください。
この例では、BIRD を使用して BGP ネットワーク設定を設定する方法を示します。
この例では、BIRD CLIを使用してBGPを設定します。Cloud-Native Contrail Networking で定義された BGPaaS オブジェクトと一致させる必要がある BGP 設定のパラメーターに留意してください。この例では示していませんが、ほとんどの導入で BIRD 設定ファイルにアクセスするデフォルトの場所は/etc/bird.conf または /etc/bird/bird.conf であることを知る必要があります。
# Change the router id to your BIRD router ID. It's a world-wide unique identification # of your router, usually one of router's IPv4 addresses. router id 172.20.10.2; protocol direct { interface "eth1*"; -> interface on which BGPAsAService needs to be configured } protocol bgp bgp1_1 { import all; export all; local as 10; -> AS configured in BGPAsAService neighbor 172.20.10.3 as 64512; -> neighbor for primary BGP session, use BGPaaSPrimaryIP from subnet neighbor 172.20.10.3 as 64512; -> neighbor for secondary BGP session, use BGPaaSSecondaryIP from subnet
BGP サービスから、BGP プロトコルが実行されていることを確認します。
BIRD からのこの例では、 show protocol コマンドを入力して、BGP プロトコルが BIRD で確立されていることを確認します。
birdc show protocol bgp1_1 BIRD 1.6.8 ready. name proto table state since info bgp1_1 BGP master up 10:31:27 Established