らくがきちょう

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

ACI ベストプラクティスに従った設定

Unofficial ACI Guide は参考になる情報がたくさん掲載されています。 こちらに ACI Best Practice Configurations という記事がありますが、著者ご本人に翻訳の許可を頂いたので日本語に意訳してみました (Thank you, Jody!)。


ACI を初めて利用する全ての顧客の一番の疑問は最初から有効にすべき設定は何なのか、ということでしょう。 それを念頭に置いて、この記事は "ベストプラクティス" として有効にすべきと考えられる設定に関するドキュメントとして利用したいと思います。 私達は新しいバージョンが登場する度にこのドキュメントをアップデートしますので、このページをブックマークすることを忘れないでください。 可能な限り、シスコのドキュメントを含むリンクを提示するか、少なくても理由を詳細に説明します。

グローバル設定のベストプラクティス

1. MCP (VLAN ごと) を有効にすべき

MisCabling Protocol(MCP) は外部ソースからのループ (例えば誤動作するサーバ、STP を実行している外部ネットワークなど) を検出し、ACI が自身から送信されたパケットを受信すると err-disable にします。

  1. これは Fabric > Access Policies > Global Policies > MCP Interface Policy default で有効にすることが出来ます。
  2. Enable MCP PDU per VLAN オプションを有効にするとこで (2.0(2) 以降で有効です)、EPG ごとに MCP パケットを送信出来るようになり、そうしないとこれらのパケットはタグ設定の無い EPG からしか送信されません (これはループ検出の観点から基本的に役に立ちません).
  3. MCP についてもっと読みたい方はこちらの記事をチェックしてください!

2. リモート EP 学習を無効化する

これはボーダリーフスイッチのリモート IP 学習を無効にします。

  1. 3.0 以前のバージョンでは Fabric > Access Policies > Global Policies > Fabric Wide Setting Policy で有効にすることが出来ます。
  2. 3.0 以降では System > System Settings > Fabric-Wide Settings で有効にすることが出来ます。
  3. これは 2.2(2e) で導入され、以降の全てのコードで利用可能です。
  4. CSCvi11291 (3.2(1l)以降で修正) に注意してください。このバグにより,スイッチが TCP.179 を送信元または宛先に持つパケットを受信したときにリモート EP 学習が無効に設定されていても、ボーダリーフスイッチでリモート EP 学習が学習されてしまいます。

3. サブネットチェックを強制する (EX または FX ベースのリーフで動作)

  1. 3.0 以前のバージョンでは Fabric > Access Policies > Global Policies > Fabric Wide Setting Policy で有効にすることが出来ます。
  2. 3.0 以降のバージョンでは System > System Settings > Fabric-Wide Settings で有効にすることが出来ます。
  3. これは 2.2(2q) で導入され、全ての 2.2(x) コードで利用可能です。
    1. 2.3(x) では利用することが出来ません。
    2. 3.0 系では 3.0(2k) で最初に導入されました。
  4. Enforce Subnet CheckLimit IP Learning to subnet と似ていますが、ステロイドのようなものです。 IP の学習をサブネットに制限する Limit IP Learning to subnet は BD に設定されたサブネットでは無い IP エンドポイントの学習を行いません。 Limit IP Learning to subnetパケットを廃棄するのでは無く BD 上での学習を停止するだけです。 パケットは BD が設定されていないリーフ (例えばボーダリーフ) でも学習されてしまいます。 これは問題になる可能性がある為、Enforce Subnet 設定が必要になります。 有効にすると VRF レベルで IP を学習しなくなります。
  5. CSCvh17285 に注意してください (3.2(1l) 以降で修正されました)。 Enforce Subnet が有効な場合、レイヤー 2 としてだけ、またはレイヤー 2 としても設定されている BD で L2 Unknown unicastproxy に設定されている場合、ARP/GARP パケットから MAC アドレスが学習されません。この問題を回避するには、L2 BD の L2 Unknown UnicastFlood に設定されている必要があります。

4. エンドポイントループ検出

  1. EP ループ検出には「ループを検出し、それを停止する」という意図がありますが、「本物のループを検出する」と同じくらいに vMotion などによる誤検知があることが分かりました。 その為、この機能を有効にしたままにしておくものの、両方のアクション (BD での学習無効化、ポート無効化) が無効化されていることを確認します。 両方のアクションが無効になっていても、EP ループは未だに Fault を生成し、設定されていれば Syslog/SNMP トラップを送信します。
  2. 3.0 以前のバージョンでは Fabric > Access Policies > Global Policies > EP Loop Detection Policy で有効 (または無効) に設定することが出来ます。
  3. 3.0 以降では System > System Settings > Endpoint Controls > EP Loop Detection で有効にすることが出来ます。

5. IP エージングを有効化する

  1. IP エージングが有効になっていない場合 (デフォルト)、1 つの MAC で複数の IP を学習すると、その MAC がアクティブである限り、全ての IP がファブリック上で学習されたままになります。

  2. 3.0 以前のバージョンでは Fabric > Access Policies > Global Policies > IP Aging Policy で有効にすることが出来ます。

  3. 3.0 以降のバージョンでは System > System Settings > Endpoint Controls > Ip Aging で有効にすることが出来ます (右側のタブを見てください)。
  4. これは 2.1(1h) で導入され、以降全てのコードで利用可能です。

6. 不正エンドポイント検出を有効化する

  1. 3.2 以降、不正エンドポイント検出により エンドポイントのバタつきによる影響が軽減されます。
  2. 不正エンドポイント検出を有効にすると、不正な動作をしているエンドポイント (MAC/IP) が隔離され、識別し易いように Fault が生成されます。
  3. 3.2 以降では System > System Settings > Endpoint Controls > Rogue EP Control で有効にすることが出来ます。
  4. 推奨値は以下の通りです。
    1. Rouge EP Detection Interval = 30
    2. Rogue EP Detection Multiplication Factor = 6
  5. 注:ファブリックをアップグレード、またはダウングレードする前に、不正エンドポイント検出を無効にする必要があります。 アップグレード/ダウングレードが完了すると再度、有効にすることが出来ます。 これについては APIC 基本構成ガイド (CCO) に記載されています。

7. 厳密な COOP グループポリシーを有効にする

  1. APICMD5 パスワードに使用する属性を含むマネージドオブジェクト (fabric:SecurityToken) を提供します。 このマネージドオブジェクト内の属性は「token」と呼ばれる文字列であり、1 時間ごとに変化します。 COOP は DME から ZMQ 認証のパスワードを更新する為の通知を取得します。 属性トークンの値いは表示されません。 認証方式には Compatible Type と Strict Type のふたつの選択肢があります。 Compatible Type は MD5 認証済みの ZMQ 接続と非認証 ZMQ 接続の両方を受け付けますが、Strict Type は MD5 認証済みの ZMQ 接続のみを受け付けます。
  2. これは System > System Settings > COOP Group で有効にすることが出来ます。

※ 訳注:ZMQ = Zero Message Queue

8. ファブリックと接続しているインターフェイスで BFD を有効化する

  1. ファブリックからファブリックへ接続しているインターフェイス (リーフからスパイン) の BFD は、障害発生時の収束を高速化します。
  2. これは Fabric > Fabric Policies > Policies > Interface L3 Interface > default > BFD ISIS Policy Configuration で有効にすることが出来ます。
    • 注:APIC 3.1(1) からリーフスイッチとスパインスイッチ間の BFD は IS-IS 用のファブリックインターフェイスでサポートされています。 更に、スパインスイッチの BFD 機能は OSPF とスタティックルートでサポートされています。
    • BFD は EX 及び FX ラインカード (またはより新しいバージョン) を搭載したモジュラ型スパインスイッチでサポートと Nexus 9364C 非モジュラ型スパインスイッチ (またはより新しいバージョン) でサポートされます。

オプション 2 と 3 はファブリック上で発生する可能性のある IP エンドポイントの誤った学習を防ぐことが出来ます。 エンドポイントの誤った学習はリモート IP エンドポイントが (例えば) ボーダリーフでスタックする可能性がある為、パケットにとってのブラックホールに成り得ます。 このようなイベントを解決していく仮定は、胸焼けする原因になります。 各々のエンドポイント設定の詳細な使用例については ACI エンドポイント学習ホワイトペーパー (下記) をご覧ください。 これらの変更はメンテナンス時間内に行うことを常に推奨しますが、これらのオプションを有効うにする影響は基本的に存在しません (例えば VRF 内でリモート IP エンドポイントのフラッシュは発生します)。

ACI エンドポイント学習ホワイトペーパー

シェルスクリプトでグローバル設定を行うベストプラクティスをお探しですか? curl を使った ACI ベストプラクティスをご覧ください!

BD 設定のベストプラクティス

BD には様々なっユースケースが存在し、様々な設定で有効なユースケースがたくさんあります。 ですから、人によって様々なベストプラクティスが存在します。 しかしながら、ここでは注意点も含め、幾つかの包括的な推奨事項を提示したいと思います。

  1. ACI が L3 ゲートウェイでない場合、ユニキャストルーティングを有効にしないでください。 ACI が L3 ゲートウェイでは無い場合、ユニキャストルーティングを有効にする必要がありますか? ユニキャストルーティングを有効にしないと ACI はエンドポイントの IP アドレスを学習しません。 接続されているデバイスMAC アドレスだけでなく、IP エンドポイントも学習したい為、ユニキャストルーティングを有効にする場合もあります。 この場合の問題点は非対称ルーティングにつながる可能性があり、パケットの廃棄や誤ったルーティングの可能性に繋がります。
  2. BD にはひとつのサブネットだけ、設定します。 ACI は各 BD のプライマリサブネット上でのみ、DHCP リクエストを転送します。 同じ BD に 2 つ目のサブネットを設定している場合、2 番目以降の BD では DHCP は動作しません。
  3. ネットワークセントリックモード (例えば VLAN = EPG = BD) では、1 つの BD に複数の EPG を設定しないでください。 ACI で VLAN を EPG と BD にマッピングすると外部の STP と HSRP マルチキャストが同じ BD にフラッディングされます。 例えば同じ BD に Vlan11 (EPG11) と Vlan12 (EPG12) をアタッチしている場合、両方の Vlan の HSRP Hello が BD 内部で混在し、外部 (非 ACI) 環境で問題を引き起こします。
  4. Enable Limit IP Learning to Subnet - これは 99.999% の確率で有効にする必要があります。 これはそれぞれの BD で構成されたサブネットに基づいてエンドポイントの IP 学習を制限します。 注:EX または FX ベースのリーフで Enforce Subnet Check をグローバルに設定している場合、有効している/していないに関わらず、この設定はオンになります。
  5. ARP FloodingGARP based detection を構成する - これは 50% の確率で推奨します。どちらでも良いのですが、私の管理するデータセンターであれば、おそらくこのオプションは有効にします。 GARP 検出の長所は、特定の状況での IP 学習の問題を防ぐことが出来る、という点です。 欠点は GARP ベースの検出を有効にする前に BD で ARP Flooding を有効にしておく必要がある点です。 Cisco ACI ファブリック エンドポイント学習ホワイトペーパー から引用 - 「Cisco ACI はリーフスイッチポート、リーフスイッチ、BD、EPG 間の MAC アドレスと IP アドレスの移動を検出することが出来ますが、新しい MAC アドレスが古い MAC アドレスと同じインターフェイスと同じ EPG からのものである場合、新しい MAC アドレスへの IP アドレスの移動は検出しません。 GARP ベースの検出オプションが有効になっている場合、Cisco ACI は移動が同じインターフェイスと同じ EPG から来た場合、ユニキャストルーティング、ARP Flodding、及び GARP ベースの検出の全てが有効になっている場合にのみ、エンドポイント学習がトリガされます。 多く見られるケースではありませんが、場合によっては IP を MAC バインディングに変更し、GARP ベースの検出を有効にする必要があります。

ファブリックプロビジョニングのベストプラクティス

ACI ファブリックのセットアップを実行することは、ACI の利点のひとつです。 但し、ファブリックセットアップ値を適切に計画することは非常に重要です。 ACI ファブリックの値を検討する際には最初のプロビジョニングセットアッププロセス後にインフラストラクチャ IP アドレス (TEP IP プール) 範囲、またはインフラ VLAN のいずれかを変更することは不可能です。

最初のファブリックセットアップを実行する際には「TEP アドレス範囲」を入力する必要があります。 この IP アドレス範囲は、主にファブリック内のリーフノードとスパインノードに TEP アドレスを提供する為に使用します。 デフォルト値は 10.0.0.0/16 ですが、幾つかの理由から TEP プールに一意のアドレスブロックを提供する方が良いとされています。

  1. 将来、TEP プールを AVE (ACI Virtual Edge) スイッチに拡張したい場合はネットワーク内の既存ルーティングと重複しないユニークなアドレスが必要です。
  2. APIC から外部デバイスと通信する場合 (VMM 統合の為の vCenter など)、vCenter デバイスから APIC に戻ってくるトラフィックの IP アドレス/ルーティングの競合を避ける為に、インフラ TEP プール上のアドレスを一意に設定する必要があります。
  3. 注:最初のプロビジョニング後にインフラストラクチャの IP アドレス範囲や VLAN を変更するにはファブリックを再構築する必要があります。

インフラサブネットはネットワーク内のサブネットと重複しないようにしてください。 このサブネットが他のサブネットと重複している場合あ、このサブネットを別の /16 サブネットに変更してください。

  • APIC 2.2 コード以降、3 台の APIC クラスタでサポートされる最小サブネットは /23 です。
  • APIC 2.2 コードまでの APIC 2.0(1) コードを使用している場合、最小値は /22 です。
  • インフラ TEP IP は未使用で固有のものを使用してください。 しかし、予備の RFC1918 アドレスが無い場合は、RFC6598 の範囲 (100.64/10 - CGN 用途) の使用を検討してください。 これにより、インターネット上で競合することが無いようになります。
  • 全てのファブリック / Pod インフラ TEP プールは固有の IP サブネット範囲から割り当ててください。

詳細は CCO 上にある Cisco APIC スタートガイド リリース 3.x を参照してください。

インフラ VLAN ID - インフラ VLAN ID を 3967 に設定します。

ファブリックのセットアップ中に、ACI はインフラストラクチャ VLAN として使用する VLAN を要求します。 この VLAN はファブリックを構成するデバイス (リーフ、スパイン、APIC など) 間の制御トラフィックに使用されます。

この VLAN はファブリックの外にも拡張出来る為 (OpenStack 統合、AVS/AVE)、環境内では独自の VLAN として持つことがベストプラクティスです。 更に多くの Ciscoバイスは変更が困難な VLAN 範囲を予約しています (つまり、変更を有効にするにはスイッチを再起動する必要があります)。 VLAN 3967 は、どの Cisco スイッチングプラットフォームにも予約されていない VLAN であり、ACI に最適です。

ノードの設定 - スパインは 101 ~ 199 の番号を割り当て、リーフは 200 以上の番号を割り当ててください。

詳細については Cisco ACI ファブリックプロビジョニングのベストプラクティス を参照してください。