Cisco ACI + Nutanix AHV networking integration

# はじめに
この記事は Nutanix Advent Calendar 2023 の12月8日分として執筆しました。https://adventar.org/calendars/8538

私はCisco Systems, Inc で Data Center Switch関連のTechnical Marketing Engineerをやっています。非日本語話者の方にも目を通していただけるように日本語と英語で書こうと思います。
日本のエンジニアの方も英語で情報が得られると仕事がやりやすくなりチャンスも広がると思いますので是非並べて読んでみてください。(ただ、私は英語は英語で、日本語は日本語で書いてますので、日本語の文章をそのまま英訳したものではありません)

I wrote this article as part of Nutanix Advent Calendar 2023.
https://adventar.org/calendars/8538
I'm a TME in Cisco Systems, Inc, working on Data Center Switching products. I'm going to write this article in both English and Japanese, so that non-Japanese readers can also refer the article. If Japanese readers can try to read the English version along with Japanese one, that would be nice. I believe the ability to understand English is definitely helpful at their work. That being written, I'm going to write English and Japanese separately. My English writing is not something I translate Japanese version, thus it's not one-to-one mapping.

# Cisco ACI + Nutanix AHV networking integration
Cisco ACIはリリース当初から"VMM integration"(日本語だとVMM連携?)と呼ばれる、ACIの物理ネットワークだけでなく仮想基盤側のネットワークも合わせて自動的に設定するという機能を持っています。
ACIリリース6.0(3)から、VMware vCenter, Microsoft SCVMMとの連携に加え、Nutanixとの連携をサポートしたのでこの記事ではそれについて説明します。

Cisco ACI has been supporting a feature called ”VMM(Virtual Machine Manager) integration" since day 1, which is the capability to automate virtual network deployment along with the physical network deployment.
Starting from Cisco ACI Release 6.0(3), Nutanix AHV networking is supported in addition to VMware (Distributed Virtual Switch and port-group configuration through vCenter) and Microsoft (Logical switch and VM Network configuration through SCVMM)

実は英語ではすでに紹介ビデオがあるので、この記事の中ではこのビデオの内容を日本語で説明します。なのでここからは日本語です。スライドは英語のままなのは許してほしい。
As we already have a video that includes the overview and demo, I will let the video explain the solution for English readers and will explain it in Japanese in this article. Thus, my English explanation ends here :).
https://www.youtube.com/watch?v=CX2jdSa4b9g

# Overview
Cisco ACIはVMware, Microsoftといった複数のVMM integrationsをサポートしています。
仮想化基盤によって少し言葉が違いますが、仮想ネットワークスイッチとポート(VLAN)が主な設定かと思います。それを自動で設定してくれる機能です。
-VMware: vds/dvs (Distributed Virtual Switch)とport-group
-Microsoft: Logical switchとVM network
そしてNutanixの場合は "Virtual Switch"と"Subnet"の設定の自動化をしてくれます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526224/a1b62f25-6a60-2829-feae-1e824ff16ea7.png)
subnet...ネットワークエンジニアの方は"IP subnet"を指して"subnet"と言うことが多いので、正直まぎわらしくないですか！？私はNutanixのネットワーク周りの話をするときは最初に「このミーティングにおいて、"IP subnet"は"IP subnet"って言うから！」と宣言するようにしてます。

Nutanixな方々には釈迦に説法かもしれませんが、AHV networkingが前提です。VMwareのvSS/vDSに関してではないです(vDSの場合はVMware VMM integrationを使ってください)

# どんな機能なの？見え方は？
ACIではEPG(Endpoint Group)というSecurity Groupのようなものがあり、それを設定することでVLANを必要なところに自動的に設定してくれます。スイッチ間接続でどのインターフェースにどのVLANをtrunkすべきなのか、VXLAN VTEPの設定はどうだとか考えなくていいというメリットがあります。
もし仮想化基盤のVMがそのEPGに所属する可能性があれば、そのグループ用のVLAN(VMwareの場合port-group, Nutanixの場合subnet)を作るする必要があるので、必要なVMM domain(仮想化基盤)をEPGに関連付けます。
それだけで、Nutanixの場合は"subnet"が自動的に作られます。Nutanix管理者は、ACIから自動的に作られたsubnetをVMのNIC接続で選択すればいいだけです。VLAN IDがなんだとか、VTEPが何だとかは意識する必要がありません。便利！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526224/f893dfff-67b4-7acb-0e69-23c67556a5ef.png)

フローもかいつまんで説明しましたが、全体の設定のフローを知りたい方は以下の図をご覧ください。
最初だけ、APIC(ACIのコントローラー)にNutanix Prism Central, Prism ElementのIP, credentialを設定する必要があります。(APICがAPI経由でNutanix側にsubnetを作るので) 
あとは、各EPGに必要であれば該当するNutanix VMM domainを関連づけるだけです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526224/c7d4f5e3-3baa-2889-e169-1feaca208d4b.png)

フォワーディング的にはNutanix側では何ら特別なことはしていません、VXLANも使っていません。(ACI側ではVXLANを裏で使っているのでL2延伸もスイッチまたぎ、DCまたぎでも意識せずに楽々できます。VTEPのアドレスのことなどはネットワークエンジニア側ですら意識しなくていいです）
ですので、サーバー側の担当者からするとVLANで全て完結して非常にシンプルで分かりやすいのではないでしょうか。ネットワーク側だけではなく、サーバー側の方に楽してもらうのがこの連携のメリットです

# 複数cluster環境
1つのPrism Centralで複数のPrism Elements (Nutanix clusters)を管理することができますが、現在Nutanix virtual switch を Nutanixclusterまたぎにはできません。(RoadmapはNutanixさんに確認してください)
A virtual switch is per cluster (per Prism Element)とか a virtual switch cannot be distributed across clusters (across Prism Elements) とか書くといいでしょうか。
通常、そこまでたくさんのVMsを一つのセグメント(VLAN/ブロードキャストドメイン)に入れたいという要件はないかもしれませんが、例えばvirtual desktop環境やバックアップの関係でclusterは違うけれどVMを同じセグメントに入れたい場合、みなさんどうしてるのでしょうか。
おそらく、違うclusterでも同じVLANでsubnetを設定して...そのVLANを物理ネットワーク側でも設定してtrunkして...なんてやっている場合が多いのではないかと思います。(L2延伸なんかももちろんあるでしょうが)
それでも全く問題ないですが、このACI + Nutanix integrationを使うと、設定は一箇所、複数のVMM domainsを同じEPGに関連づけるだけですみます。物理スイッチが何台あろうが、物理スイッチがどこにあろうが、同じDCになくても、同じACI fabricだったら設定は一箇所です。便利！私はこの便利さが好きです。
参考までに3 clustersあった場合の設定例とイメージを図にしたものが以下です。
1 virtual switchごとに1 VMM domainになるので3つVMM domainsを作ってもらい、それらを同じEPGに関連づければ、clusterは異なってもsubnetは全部同じセグメントかつ同じSecurity groupに所属します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526224/d5e4990f-7a76-2f3d-15cb-aa7641d54c36.png)

もちろん、EPGをclusterごとに別々にして全く違うセグメントにすることももちろんできます。ユースケースごとに使い分けてください！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526224/210ef72e-f2da-506e-3e04-05a54ce06710.png)

この連携はNutanixのAPIを使っているだけなので、Community Editionでも試せます！(ACIが必要ですが...)
1月末も日本にいる予定なので、Nutanix meetupにも顔を出そうと思いますので何か質問あれば声かけてください！