ルート ターゲットを使用した仮想間ネットワーク ルーティングの構成
概要 クラウドネイティブのContrail® Networking™(CN2)は、ルートターゲットを使用した仮想ネットワーク間ルーティングをサポートします。仮想ネットワーク間でトラフィックをルーティングするために、共通のルート ターゲットを指定します。
仮想ネットワークとルーティングインスタンスの概要
ルーティング インスタンスは、ルーティング テーブル、インターフェイス、およびルーティング プロトコル パラメータの集合です。ルーティング インスタンス内のインターフェイスのセットはルーティング テーブルに属し、ルーティング プロトコル パラメータはルーティング テーブル内の情報を制御します。ルーティング インスタンス例えば、ユニキャスト IPv4、ユニキャスト IPv6、マルチキャスト IPv4 ルーティング テーブルは 1 つのルーティング インスタンスに存在できます。
仮想ネットワークでは、物理ネットワーク デバイスを複数の仮想ルーターに分割し、それぞれに独自のインターフェイス、ルーティング インスタンス、関連する仮想ネットワークを持たせることができます。ルーティングインスタンスは、 VirtualNetwork
内のトラフィックを分離します。仮想ネットワーク間でトラフィックをルーティングする場合は、それらのネットワークに共通のルート ターゲットを定義できます。
ルートターゲットの概要
ルート ターゲットを使用すると、仮想ネットワーク (名前空間) は、MPLS (MPLS) 構成で仮想ルーティングおよび転送 (VRF) ルーティング テーブルを交換できます。ルートターゲットは、VPNメンバーシップを定義するBGP拡張コミュニティ属性です。つまり、そのVPNのメンバーは、拡張コミュニティ属性内で定義されたすべてのルートを共有します。VRF ポリシーで、以下の 2 つのルート ターゲットを定義します。
-
ルート ターゲット インポート リスト:VRF がインポートできるルート ターゲットのリストを定義します。プロバイダエッジ(PE)ルーターは、他のPEルーターからルートを受信すると、ルートターゲットをルートターゲットインポートリストと比較します。具体的には、PE ルーターは、各ルートにアタッチされたルート ターゲットを、各 VRF に定義されたルート ターゲット インポート リストと比較します。インポート リストで定義されたルート ターゲットに一致する新しいルート ターゲットがない場合、VRF はルートを拒否します。
-
ルートターゲット エクスポート リスト:VPN 内の他の PE ルーターにアドバタイズされるすべてのルートにアタッチされたルート ターゲットのリストを定義します。
ネットワーク設定によっては、インポートリストとエクスポートリストが同じになる場合があります。通常は、次の操作を行います。
-
VPN ごとに 1 つのルート ターゲット拡張コミュニティ値を割り当てます。
-
インポートリストとエクスポートリストを設定し、同じ情報(VRF に関連するサイトを構成する VPN のセット)を含めます。
ハブアンドスポークVPNのようなより複雑な設定では、ルートターゲットインポートリストとルートターゲットエクスポートリストが同一でない可能性があります。
NADを使用したルートターゲットを介した仮想ネットワーク間ルーティングの有効化
VirtualNetwork
リソースで一致するルートターゲットを定義することにより、ルートターゲットコミュニティを確立します。これにより、仮想ネットワーク (名前空間) 間でトラフィックをルーティングできます。ネットワーク接続定義(NAD
)を使用して、VirtualNetwork
リソースオブジェクトにルートターゲットを追加します。
Network Attachment Definition(NAD)は、Kubernetes Network Plumbing Working Groupによって指定されたカスタムリソース定義(CRD)です。NAD
、この CRD は、NAD
オブジェクトが参照する論理 (仮想) または物理ネットワークに Pod をアタッチする方法を定義します。つまり、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
アノテーションを指定しない場合、Cloud-Native Contrail NetworkingはNAD
リソースをサードパーティ・リソースとして扱います。クラウドネイティブ Contrail Networking では、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" } ]
前のコード例に示した 2 つのインターフェイス (nasa-network1
と nasa-network2
) は、異なるネットワークに接続されることに注意してください。 NAD
機能の結果として、これらのネットワーク間でトラフィックをルーティングできます。