ここでは、OpenStackとACIを連携させる構成における、外部接続構成について記載します。なお、公式な構成手順に関するガイドについては、以下よりダウンロード頂けますので、合わせてご参照ください。
ここでは、上記ガイドを参照しながら構成することを前提として、補足として参考となる情報を記載していきます。
1.外部接続の構成方法について
ACIとOpenStackを連携させる構成の場合、外部接続についてもACI側にオフロードすることができます。ただし、ACIファブリック自体はNAT機能を持たないため、いかのいずれかの方式で構成する必要があります。これらは両方の方式をサポートしていきます。なお、ACI連携の方式としてML2連携とGBP連携のいずれの構成をとっている場合でも、どちらの方式でも使用することが出来ます。
- OpFlex NAT方式:Open vSwitchにおいて、NAT (Source NATおよびFloating IP)の制御を行う
- Edge NAT方式:ASR 1000vを使って、NATの制御を行う
Open vSwitchを使ってNATを構成する場合には、OpFlex連携が必要となります。ComputeノードとしてvSphere ESXiホストを使用するACI連携構成でNATを使用したい場合は、ASR 1000vを使う方式のみが使用可能です(KVMをComputeノードとして使用する構成でもASR 1000v構成は使用可能)。

本ページでは、OpFlex NAT方式について記載します。
2.OpFlex NAT:Source NAT (SNAT)
OpFlex NAT方式でインスタンスが外部ネットワークに通信する際に使用されるSNATとしては、各Computeノード毎に割り当てられるSNAT IPアドレスによる通信が構成されます。各Computeノード上のインスタンスは、接続先ネットワークのルータにゲートウェイが構成されている場合、当該Computeノードに割り当てられたSNAT IPアドレスに変換されて外部との通信を行います。
- 使用する外部接続は、ACIにおいて事前に[Routed External Network]として構成しておくことが推奨されます。OpenStack環境全体で共有するため、ACI側ではcommonテナントに外部接続用のL3outを構成してください。本ページでは外部接続の構成手順は記載しません。必要に応じて[外部L3接続 (OSPF)]のページなどを参照してください。
- OpenStackのACI定義ファイル(ml2_conf_cisco_apic.ini)に情報を記載することによって、OpenStack連携で自動的に外部接続を構成することも可能ですが、Static Routeのみ、かつインターフェイスの形式はRouted Interface構成のみとなりますので、Dynamic Routingを構成したい場合や、SVI構成を使用したい場合などは事前に作成した外部接続を使用する構成を選択する必要があります。
- SNAT用のIPアドレスプールは定義ファイルで指定する必要があります。SNATを使用する必要のあるComputeノード数を踏まえてCIDR形式で指定してください。SNAT用のIPアドレスプールはFloating IP用のサブネットとは異なる必要があります。指定IPアドレスは、SNAT用ネットワークのゲートウェイIPアドレスとなります。
以下では、下記の構成例を示します。事前に定義したL3outでは、これらのサブネットがACIファブリック側にあることを対向のルータに通知するDynamic Routingを構成するか、対向のルータ側でStatic Routeを構成する必要があります。
用途 | IPアドレス範囲 | ゲートウェイアドレス |
Source NAT用 | 192.168.246.0/24 | 192.168.246.1 |
Floating IP用 | 192.168.247.0/24 | 192.168.247.1 |
ml2_conf_cisco_apic.iniファイルに定義する外部接続に関する設定例は、以下の通りです。
[apic_external_network:SharedL3Out]
preexisting=True
external_epg=SharedWAN
host_pool_cidr=192.168.246.1/24
ここで、各名称とACI側の設定の組み合わせ例は、以下の通りです。上記設定ファイルに対する記載と合わせて確認してください。

設定ファイルの記載方法については、以下を参考にしてください。

上記設定ファイルを準備した上で、Neutronサーバにおいて"neutron net-create"コマンドで外部ネットワークを構成してください。

問題なく外部接続用のネットワークがOpenStackにおいて構成されると、以下のようにサブネットとしてSNAT用のネットワークIPレンジが構成されたネットワークが定義されます。なお、下記図のように、管理状態としてDOWNとして表示されますが、問題ありません(OpenStack側でのソフトウェア定義ではなく、ACI側にオフロードされるため、OpenStack側で管理状態を把握できないため)。

外部接続の構成方法は、OpenStackの標準的な手順そのままです。OpenStackの内部に定義された論理ネットワークにルータを接続し、ルータにゲートウェイを構成して外部ネットワークとして上記で構成したネットワークを接続します。内部の論理ネットワークに接続されたインスタンスからは、外部ネットワークに対して通信を行うことが可能となります。ACI側では、インスタンスが稼動するComputeノードに対して割り当てられたSNAT IPアドレスが外部ネットワーク紐付くEPGにおいて認識されていることを確認できます。
下記例では、インスタンス ins-A1 が外部ネットワークに通信を行っている構成に置いて、このインスタンスが稼動する Computeノードである c200m2a に対して割り当てられたSNAT用IPアドレス 192.168.246.2 がACI側から認識されています。

SNAT用のIPアドレスは、当該Computeノード上でSNATを使用するインスタンスが存在する場合にのみACI側から認識されます。Computeノード上に外部接続を行うインスタンスが存在しない場合や、全てのインスタンスがFloating IPを使用する構成となっている場合には、SNAT用のIPアドレスが認識されない場合があります。
3.OpFlex NAT: Floating IP (FIP)
OpFlex NAT方式でインスタンスに対して外部からの通信を定義するためには、OpenStackの仕様に基づいてFloating IP (FIP)が使用されます。FIPを構成したインスタンスでは、内部から始まる通信についてもSNATに優先してFIPアドレスが用いられるようになります。
FIPを外部ネットワークに対して構成するためには、Neutronサーバにおいて"neutron subnet-create"コマンドを用いて構成を行う必要があります。以下を参考にしてください。

FIPを構成すると、以下のようにFIP用のネットワークが外部ネットワークに構成されます。

FIPの割当方法は、OpenStackの標準的な手順そのままです。各プロジェクトにおいて割り当てられた範囲でFloating IPを取得し、インスタンスに割り当てることができます。Floating IPが割り当てられたインスタンスにおいては、内部から始まる通信についてもFIPが使用されるようになります。そのため、ACI側では、インスタンス自身がFIPを持ったEPとして、外部ネットワークに紐付くEPGにおいて認識されることを確認できます。
下記例では、インスタンス ins-A2 が外部ネットワークから通信を受けている構成に置いて、このインスタンスに割り当てられたFIPアドレス 192.168.247.3 がACI側から認識されています。

なお、デフォルトではセキュリティグループdefaultの設定によって、外部からの通信は許可されていないため、外部からの通信を受け付けるには必要なセキュリティ設定が定義されたセキュリティグループにインスタンスを割り当てるか、セキュリティグループに設定を追加定義する必要があります。