ルートターゲットを介した仮想ネットワーク間ルーティングの構成
概要 クラウドネイティブの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 機能により、これらのネットワーク間でトラフィックをルーティングできます。