ルートターゲットを介した仮想ネットワーク間ルーティングの構成
概要 クラウドネイティブのContrail Networkingは、ルートターゲットを使用した仮想ネットワーク間ルーティングをサポートします。仮想ネットワーク間でトラフィックをルーティングするための共通のルート ターゲットを指定します。
仮想ネットワークとルーティング インスタンスの概要
ルーティング インスタンスは、ルーティング テーブル、インターフェイス、ルーティング プロトコル パラメーターの集合体です。ルーティング インスタンス内のインターフェイスのセットはルーティング テーブルに属し、ルーティング プロトコル パラメーターはルーティング テーブルの情報を制御します。1 つのルーティング インスタンスに複数のルーティング テーブルが存在する場合があります。例えば、ユニキャスト IPv4、ユニキャスト IPv6、マルチキャスト IPv4 ルーティング テーブルは、1 つのルーティング インスタンスに含めることができます。
仮想ネットワークでは、物理ネットワーキング デバイスを複数の仮想ルーターに分割し、それぞれが独自のインターフェイス、ルーティング インスタンス、関連付けられた仮想ネットワークを持つ場合があります。ルーティングインスタンスは、 VirtualNetwork
内のトラフィックを分離します。仮想ネットワーク間でトラフィックをルーティングする場合は、それらのネットワークに共通のルート ターゲットを定義できます。
ルートターゲットの概要
ルートターゲットにより、仮想ネットワーク(ネームスペース)は、MPLS(マルチプロトコルラベルスイッチング)構成でVRF(仮想ルーティングと転送)ルーティングテーブルを交換できます。ルートターゲットは、VPNメンバーシップを定義するBGP拡張コミュニティ属性です。つまり、拡張コミュニティ属性内で定義されたすべてのルートは、そのVPNの他のメンバーによって共有されます。VRF ポリシーで、以下の 2 つのルート ターゲットを定義します。
-
ルートターゲットインポートリスト:VRFがインポートする受け入れ可能なルートターゲットのリストを定義します。プロバイダーエッジ(PE)ルーターが別の PE ルーターからルートを受信すると、各ルートに接続されているルートターゲットを、その VRF ごとに定義されたルートターゲットインポートリストと比較します。インポート リストで定義されたルート ターゲットに一致する新しいルート ターゲットがない場合、VRF はルートを拒否します。
-
ルートターゲットエクスポートリスト:VPN内の他のPEルーターにアドバタイズされるすべてのルートに接続されたルートターゲットのリストを定義します。
ネットワーク構成によっては、インポート リストとエクスポート リストが同じになる場合があります。通常は、次の操作を行います。
-
VPN ごとに 1 つのルートターゲット拡張コミュニティ値を割り当てます。
-
インポート リストとエクスポート リストを設定して、VRF に関連付けられたサイトを構成する一連の VPN のセットという同じ情報を含めます。
ハブアンドスポーク方式VPNなどのより複雑な設定では、ルートターゲットインポートリストとルートターゲットエクスポートリストが同一でない場合があります。
NAD を使用したルート ターゲットを介した仮想ネットワーク間ルーティングの有効化
VirtualNetwork
リソースで一致するルートターゲットを定義することで、ルートターゲットコミュニティを確立します。これにより、仮想ネットワーク (名前空間) 間でトラフィックをルーティングできます。NAD
(ネットワーク添付ファイル定義) を使用して、VirtualNetwork
リソース オブジェクトにルート ターゲットを追加します。
ネットワーク添付ファイル定義 (NAD) は、Kubernetes ネットワーク プラミング ワーキング グループによって指定されたカスタム リソース定義 (CRD) です。NAD
、この CRD は、NAD
オブジェクトによって参照される論理 (仮想) ネットワークまたは物理ネットワークにポッドを接続する方法を定義します。つまり、NAD
オブジェクトには、ネットワークに関連するポッドのネットワーク情報 (名前空間、サブネット、ルーティング、インターフェイス) が含まれています。NAD
YAML のannotations
で、VirtualNetwork
リソースに対して次のオプションを定義できます。
-
ipamV4Subnet
(オプション):VirtualNetwork
のIPv4 CIDRサブネットを指定します。 -
ipamV6Subnet
(オプション):VirtualNetwork
のIPv6 CIDRサブネットを指定します。 -
routeTargetList
(オプション): インポートおよびエクスポート ルート ターゲットを一覧表示します。 -
importRouteTargetList
(オプション):インポートとして使用されるルート ターゲットを一覧表示します。 -
exportRouteTargetList
(オプション):エクスポートとして使用されるルート ターゲットを一覧表示します。 -
fabricSNAT
(オプション):ポート マッピングによってアンダーレイ ネットワークへの接続を切り替えます。既定の設定はfalse
です。
さらに、NAD-Controller
はNAD
オブジェクト作成イベントを監視し、それに応じてVirtualNetwork
を作成および更新します。NAD
の juniper.net/networks-status
注釈は、VirtualNetwork
作成中に成功イベントまたはエラー イベントを更新します。
juniper.net/networks
注釈を指定しない場合、クラウドネイティブの Contrail Networking はNAD
リソースをサードパーティーのリソースとして扱い、Contrail リソース(VirtualNetwork
や Subnet
など)を作成しません。
次の例は、いくつかのannotations
が定義されたサンプル NAD
YAML ファイルを示しています。
例 1:
apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: nasa-network namespace: nm1 annotations: juniper.net/networks: '{ "ipamV4Subnet": "172.16.10.0/24", "ipamV6Subnet": "2001:db8::/64", "routeTargetList": ["target:23:4561"], "importRouteTargetList": ["target:10.2.2.2:561"], "exportRouteTargetList": ["target:10.1.1.1:561"], "fabricSNAT": true }' juniper.net/networks-status: # should be updated by Kube-Manager to status of NAD object. spec: config: '{ "cniVersion": "0.3.1", "name": "nasa-network", "type": "contrail-k8s-cni" }'
NAD-Controller
は、NAD
YAML ファイルを適用すると、VirtualNetwork
リソースを自動的に更新します。
次の例は、複数のルートターゲットオプションが定義されている VirtualNetwork
リソースを示しています。
例 2:
apiVersion: core.contrail.juniper.net/v1alpha1 kind: VirtualNetwork metadata: namespace: project-sample name: virtualnetwork-sample spec: routeTargetList: - target:23:4561 - target:21L:7000 - target:871:6540 importRouteTargetList: - target:10.2.2.2:561 - target:97:651 exportRouteTargetList: - target:10.1.1.1:561 - target:97:651
目的のネットワークアノテーションを確立したら、共有ルートターゲットを持つネットワークに接続されたカスタムインターフェイスを持つポッドを作成できます。これらのネットワークは、 NAD
オブジェクトと VirtualNetwork
オブジェクトで定義された共有ルート ターゲットの結果として、相互にトラフィックをルーティングします。
次の例は、例 1 の注釈から派生したカスタム インターフェイスを含むポッド YAML ファイルを示しています。
例 3:
apiVersion: v1 kind: Pod metadata: name: nasa-pod-1 annotations: k8s.v1.cni.cncf.io/networks: |- [ { "name":"nasa-network1", "namespace":"nasa-ns", "cni-args":null, "ips":["172.16.20.42"], "mac":"de:ad:00:00:be:ef", "interface":"tap1" }, { "name":"nasa-network2", "namespace":"nasa-ns", "cni-args":null, "ips":["172.16.21.42"], "mac":"de:ad:00:00:be:ee", "interface":"tap2" } ]
前のコード例 (nasa-network1
と nasa-network2
) で示した 2 つのインターフェイスは、異なるネットワークに接続していることに注意してください。 NAD
機能により、これらのネットワーク間でトラフィックをルーティングできます。