らくがきちょう

なんとなく ~所属組織/団体とは無関係であり、個人の見解です~

Cisco ACI における基本的な Route Leak 設定パターン

Cisco ACI において、異なる VRF 間で Route Leak する設定方法をメモしておきます。

基本的な Route Leak 設定のパターン

VRF を超えて Route Leak させる場合、(vzAny などを考慮するパターンもありますが) 基本的には以下の組み合わせが考えられます。

No. Provider Consumer
1 AppEpg AppEpg
2 AppEpg ExtEpg
3 ExtEpg AppEpg
4 ExtEpg ExtEpg

図にすると下記の通りです。

f:id:sig9:20200814214232p:plain

設定のポイント

Contract の Scope 設定

Route Leak 設定を行う場合、どのパターンであっても Contract を利用することになります。 Contract には Scope という概念があり、これは「Contract が作用する範囲」を意味しており、デフォルトでは VRF Scope になっていると思われます。

f:id:sig9:20200814214819p:plain

意図しない副作用を招かない為にも「Scope 設定は最小範囲にしておくべき」ですが、Route Leak したい範囲が「同一 Tenant なのか?」「異なる Tenant なのか?」によって Scope を適切に設定する必要があります。

No. ケース Contract の Scope 設定
1 同一 Tenant の場合 Tenant
2 異なる Tenant の場合 Global

Provider 側の設定

Provider 側が「AppEpg なのか?」「ExtEpg なのか?」によって設定のポイントが異なります。

Provider 側 設定のポイント
AppEpg BD だけでなく、AppEpg にも Subnet を設定する
ExtEpg Subnet を Shared Route Control Subnet で設定する

往復のルーティングを考慮する

このメモでは単純に「Route Leak する」ことだけに主眼を置いています。 しかし、大部分の通信は「往復のルーティングが成立して初めて成立する」ものが多いと思いますので、「Provider → Consumer への片方向だけ Route Leak させる」だけでなく、必要に応じて「往復の、全体的なルーティングに問題無いように設計する」ことが重要です。

パターン 1 : AppEpg ─ AppEpg

設定のポイントは以下です。

  • AppEpg にも Subnet を設定する
  • AppEpg Subnet には No Default SVI Gateway チェックを入れる
  • AppEpg Subnet には Shaed between VRFs チェックを入れる

Provider 側になる AppEpg にも Subnet を作成するのがポイントです。 但し、BD Subnet とアドレスが重複してしまうと「同じ IP アドレスを持った SVI を重複して作成する」ことになってしまう為、Route Leak 用に作成する AppEpg の Subnet には No Default SVI Gateway にチェックします。 また、AppEpg Subnet には「この経路が Route Leak 対象である」ことを示す為に Shared between VRFs にチェックを入れます。

f:id:sig9:20200814230809p:plain

尚、Consumer 側には特別な設定は不要です。

パターン 2 : AppEpg ─ ExtEpg

Consumer 側が ExtEpg に変わっても、Provider 側 AppEpg の設定は ほぼ 変わりません。 但し、「Consumer 側の ExtEpg (L3Out) から、Leak された経路を広報するであろう」ことを考慮して一点、経路広報に関する設定差があります。

  • AppEpg にも Subnet を設定する
  • AppEpg Subnet には No Default SVI Gateway チェックを入れる
  • AppEpg Subnet には Shared between VRFs チェックを入れる
  • AppEpg Subnet に Advertised Externally チェックを入れる

f:id:sig9:20200814230812p:plain

Advertised Externally が無くても Route Leak はするのですが、Leak された先の ExtEpg (L3Out) から経路を広報しません。 L3Out へ Leak した経路を「外部へ広報しない」というケースは、あまり考えられないと思いますので一般的には Advertised Externally も設定するケースが殆どでは無いかと思われます。 ( Consumer 側 ExtEpg では、特に何も設定することなく、Route Leak された経路が広報されます )

パターン 3 : ExtEpg ─ AppEpg

このパターンの設定は非常にシンプルです。

  • Provider 側 ExtEpg Subnet には Shared Route Control Subnet チェックを入れる

f:id:sig9:20200814233520p:plain

尚、Consumer 側には特別な設定は不要です。 但し、Consumer 側 BD Subnet の経路が外部へ広報されていないとルーティング的に通信が成立しませんので、「ExtEpt → AppEpg へ Route Leak する」だけでなく、逆向きの「ExtEpg ← AppEpg へのルーティングも考慮する」必要があります (※ 他のパターンでも「往復のルーティング」はしっかり設計する必要があります)。

パターン 4 : ExtEpg ─ ExtEpg

このパターンは「L3Out で学習した経路を → 異なる L3Out から広報する」と言い換えることが出来ると思います。 このパターンの設定は非常に簡単で、ExtEpg Subnet を各々以下のように設定するだけです。

  • Provider 側 ExtEpg Subnet には Shared Route Control Subnet チェックを入れる
  • Consumer 側 ExtEpg Subnet には Export Route Control Subnet チェックを入れる

f:id:sig9:20200814232252p:plain

Route Leak するだけであれば Consumer 側 ExtEpg Subnet の設定は不要です。 ですがパターン 2 同様、「Route Leak された先の L3Out から経路を広報しない」というのは考えづらい為、Consumer 側 ExtEpg Subnet には Export Route Control Subnet チェックを入れて外部へ経路を広報します。