KVM を使用した ASAv の導入について
次の図は、ASAv と KVM のネットワーク トポロジの例を示します。この章で説明している手順は、このトポロジの例に基づいています。ASAv は、内部ネットワークと外部ネットワークの間のファイアウォールとして動作します。また、別個の管理ネットワークが設定されます。
この製品のマニュアルセットは、偏向のない言語を使用するように配慮されています。このマニュアルセットでの偏向のない言語とは、年齢、障害、性別、人種的アイデンティティ、民族的アイデンティティ、性的指向、社会経済的地位、およびインターセクショナリティに基づく差別を意味しない言語として定義されています。製品ソフトウェアのユーザーインターフェイスにハードコードされている言語、RFP のドキュメントに基づいて使用されている言語、または参照されているサードパーティ製品で使用されている言語によりドキュメントに例外が存在する場合があります。シスコのインクルーシブランゲージに対する取り組みの詳細は、こちらをご覧ください。
このドキュメントは、米国シスコ発行ドキュメントの参考和訳です。リンク情報につきましては、日本語版掲載時点で、英語版にアップデートがあり、リンク先のページが移動/変更されている場合がありますことをご了承ください。あくまでも参考和訳となりますので、正式な内容については米国サイトのドキュメントを参照ください。
カーネルベースの仮想マシン(KVM)を使用して ASAv を導入できます。
次の図は、ASAv と KVM のネットワーク トポロジの例を示します。この章で説明している手順は、このトポロジの例に基づいています。ASAv は、内部ネットワークと外部ネットワークの間のファイアウォールとして動作します。また、別個の管理ネットワークが設定されます。
Cisco.com から ASAv qcow2 ファイルをダウンロードし、Linux ホストに格納します。
http://www.cisco.com/go/asa-software
(注) |
Cisco.com のログインおよびシスコ サービス契約が必要です。 |
このマニュアルの導入例では、ユーザが Ubuntu 14.04 LTS を使用していることを前提としています。Ubuntu 14.04 LTS ホストの最上部に次のパッケージをインストールします。
qemu-kvm
libvirt bin
bridge-utils
Virt-Manager
virtinst
virsh tools
genisoimage
パフォーマンスはホストとその設定の影響を受けます。ホストを調整することで、KVM での ASAv のスループットを最大化できます。一般的なホスト調整の概念については、『Network Function Virtualization Packet Processing Performance of Virtualized Platforms with Linux and Intel Architecture』を参照してください。
以下の機能は Ubuntu 14.04 の最適化に役立ちます。
macvtap:高性能の Linux ブリッジ。Linux ブリッジの代わりに macvtap を使用できます。ただし、Linux ブリッジの代わりに macvtap を使用する場合は、特定の設定を行う必要があります。
Transparent Huge Pages:メモリ ページ サイズを増加させます。Ubuntu 14.04 では、デフォルトでオンになっています。
Hyperthread disabled:2 つの vCPUを 1 つのシングル コアに削減します。
txqueuelength:デフォルトの txqueuelength を 4000 パケットに増加させ、ドロップ レートを低減します。
pinning:qemu および vhost プロセスを特定のCPU コア にピン接続します。特定の条件下では、ピン接続によってパフォーマンスが大幅に向上します。
RHEL ベースのディストリビューションの最適化については、『Red Hat Enterprise Linux6 Virtualization Tuning and Optimization Guide』を参照してください。
KVM のシステム要件については、『Cisco ASA Compatibility』を参照してください。
ASAv を展開する前に、次のガイドラインと制限事項を確認します。
フェールオーバー配置の場合は、スタンバイ装置が同じモデル ライセンスを備えていることを確認してください(たとえば、両方の装置が ASAv30s であることなど)。
重要 |
ASAv を使用してハイ アベイラビリティ ペアを作成する場合は、データ インターフェイスを各 ASAv に同じ順序で追加する必要があります。完全に同じインターフェイスが異なる順序で各 ASAv に追加されると、ASAv コンソールにエラーが表示される可能性があります。また、フェールオーバー機能にも影響が出ることがあります。 |
ASAv を起動する前に、第 0 日(Day 0)用のコンフィギュレーション ファイルを準備できます。このファイルは、ASAv の起動時に適用される ASAv の設定を含むテキスト ファイルです。この初期設定は、「day0-config」というテキスト ファイルとして指定の作業ディレクトリに格納され、さらに day0.iso ファイルへと処理されます。この day0.iso ファイルが最初の起動時にマウントされて読み取られます。第 0 日用コンフィギュレーション ファイルには、少なくとも、管理インターフェイスをアクティブ化するコマンドと、公開キー認証用 SSH サーバを設定するコマンドを含める必要がありますが、すべての ASA 設定を含めることもできます。
day0.iso ファイル(カスタム day0.iso またはデフォルト day0.iso)は、最初の起動中に使用できる必要があります。
初期導入時に自動的に ASAv をライセンス許諾するには、Cisco Smart Software Manager からダウンロードした Smart Licensing Identity(ID)トークンを「idtoken」というテキスト ファイルに格納し、第 0 日用コンフィギュレーション ファイルと同じディレクトリに保存します。
ハイパーバイザで仮想 VGA コンソールではなくシリアル ポートから ASAV にアクセスし、設定する場合は、第 0 日のコンフィギュレーション ファイルにコンソール シリアルの設定を追加して初回ブート時にシリアル ポートを使用する必要があります。
トランスペアレント モードで ASAv を導入する場合は、トランスペアレント モードで実行される既知の ASA コンフィギュレーション ファイルを、第 0 日用コンフィギュレーション ファイルとして使用する必要があります。これは、ルーテッド ファイアウォールの第 0 日用コンフィギュレーション ファイルには該当しません。
(注) |
この例では Linux が使用されていますが、Windows の場合にも同様のユーティリティがあります。 |
ステップ 1 |
「day0-config」というテキスト ファイルに ASAv の CLI 設定を記入します。3 つのインターフェイスの設定とその他の必要な設定を追加します。 最初の行は ASA のバージョンで始める必要があります。day0-config は、有効な ASA 構成である必要があります。day0-config を生成する最適な方法は、既存の ASA または ASAv から実行コンフィギュレーションの関連部分をコピーすることです。day0-config 内の行の順序は重要で、既存の show running-config コマンド出力の順序と一致している必要があります。 例:
|
ステップ 2 |
(任意)Cisco Smart Software Manager により発行された Smart License ID トークン ファイルをコンピュータにダウンロードします。 |
ステップ 3 |
(任意)ダウンロード ファイルから ID トークンをコピーし、ID トークンのみを含む「idtoken」というテキスト ファイルを作成します。 |
ステップ 4 |
(任意)ASAv の初期導入時に自動的にライセンス許諾を行う場合は、day0-config ファイルに次の情報が含まれていることを確認してください。
|
ステップ 5 |
テキスト ファイルを ISO ファイルに変換して仮想CD-ROM を生成します。 例:
この ID トークンによって、Smart Licensing サーバに ASAv が自動的に登録されます。 |
ステップ 6 |
ステップ 1から 5 を繰り返し、導入する ASAv ごとに、適切な IP アドレスを含むデフォルトのコンフィギュレーション ファイルを作成します。 |
ASAv ゲストを KVM ホストに接続し、ゲストを相互接続する仮想ネットワークを設定する必要があります。
(注) |
この手順では、KVM ホストから外部への接続は確立されません。 |
KVM ホスト上に仮想ブリッジ XMLファイルを準備します。第 0 日のコンフィギュレーション ファイルの準備 に記載されている仮想ネットワーク トポロジの例では、3 つの仮想ブリッジ ファイル(virbr1.xml、virbr2.xml、virbr3.xml)が必要です(これらの 3 つのファイル名を使用する必要があります。たとえば、virbr0 はすでに存在しているため使用できません)。各ファイルには、仮想ブリッジの設定に必要な情報が含まれています。仮想ブリッジに対して名前と一意の MAC アドレスを指定する必要があります。IP アドレスの指定は任意です。
ステップ 1 |
3 つの仮想ネットワーク ブリッジ XML ファイルを作成します。次の例では、virbr1.xml、virbr2.xml、および virbr3.xml です。 例:
例:
例:
|
||
ステップ 2 |
以下を含むスクリプトを作成します(この例では、スクリプトに virt_network_setup.sh という名前を付けます)。
|
||
ステップ 3 |
このスクリプトを実行して、仮想ネットワークを設定します。このスクリプトは、仮想ネットワークを稼働状態にします。ネットワークは、KVM ホストが動作している限り稼動します。
|
||
ステップ 4 |
仮想ネットワークが作成されたことを確認します。
|
||
ステップ 5 |
virbr1 ブリッジに割り当てられている IP アドレスを表示します。これは、XML ファイルで割り当てた IP アドレスです。
|
ASAv を起動するには、virt-install ベースの導入スクリプトを使用します。
ステップ 1 |
「virt_install_asav.sh」という virt-install スクリプトを作成します。 ASAv 仮想マシンの名前は、この KVM ホスト上の他の VM 全体において一意である必要があります。 ASAv では最大 10 のネットワークがサポートされます。この例では 3 つのネットワークが使用されています。ネットワーク ブリッジの句の順序は重要です。リストの最初の句は常に ASAv の管理インターフェイス(Management 0/0)、2 番目の句は ASAv の GigabitEthernet 0/0、3 番目の句は ASAv の GigabitEthernet 0/1 に該当し、GigabitEthernet 0/8 まで同様に続きます。仮想 NIC は Virtio でなければなりません。 例:
|
ステップ 2 |
virt_install スクリプトを実行します。 例:
|
ASAv を停止して再起動しなくても、インターフェイスを動的に追加および削除できます。ASAv 仮想マシンに新しいインターフェイスを追加したときに、ASAv はそれを通常のインターフェイスとして検出してプロビジョニングできる必要があります。同様に、ホットプラグ プロビジョニングによって既存のインターフェイスを削除すると、ASAv はインターフェイスを削除して、関連付けられたすべてのリソースを解放する必要があります。
ホットプラグ インターフェイスを追加する場合、そのインターフェイス番号は、現在の最後のインターフェイス番号に 1 を加えた数になります。
ホットプラグ インターフェイスを削除すると、それが最後の番号のインターフェイスである場合を除き、インターフェイス番号にギャップが生じます。
インターフェイス番号にギャップがあると、次にホットプラグ プロビジョニングされるインターフェイスはそのギャップを埋める番号を使用します。
ホットプラグ インターフェイスをフェールオーバー リンクとして使用する場合、リンクは、ASAv のフェールオーバー ペアとして指定されている両方のユニットでプロビジョニングする必要があります。
まずハイパーバイザのアクティブ ASAv にホットプラグ インターフェイスを追加し、それからハイパーバイザのスタンバイ ASAv にホットプラグ インターフェイスを追加します。
アクティブ ASAv に新しく追加されたフェールオーバー インターフェイスを設定します。設定はスタンバイ ユニットに同期されます。
プライマリ ユニットのフェールオーバーを有効にします。
フェールオーバー リンクを削除する場合、最初にアクティブな ASAv でフェールオーバー設定を削除します。
ハイパーバイザのアクティブな ASAv からフェールオーバー インターフェイスを削除します。
次に、ハイパーバイザのスタンバイ ASAv から対応するインターフェイスを即座に削除します。
ホットプラグ インターフェイス プロビジョニングは Virtio 仮想 NIC に限定されます。
サポートされるインターフェイスの最大数は 10 です。10 を超える数のインターフェイスを追加しようとすると、エラーメッセージが表示されます。
インターフェイス カード(media_ethernet/port/id/10)を開くことはできません。
ホットプラグ インターフェイス プロビジョニングでは ACPI が必要です。virt-install スクリプトには --noacpi
フラグを含めないでください。
KVM ハイパーバイザのインターフェイスを追加および削除するには、virsh コマンド ラインを使用します。
ステップ 1 |
virsh コマンド ラインのセッションを開きます。 例:
|
||||
ステップ 2 |
インターフェイスを追加するには、attach-interface コマンドを使用します。 --domain には、短整数、名前、または完全 UUID を指定できます。--type パラメータは、物理的なネットワーク デバイスを示す network、またはデバイスへのブリッジを示す bridge のどちらかを指定できます。--source パラメータは、接続のタイプを示します。--model パラメータは、仮想 NIC のタイプを示します。--mac パラメータは、ネットワーク インターフェイスの MAC アドレスを指定します。--live パラメータは、コマンドが実行しているドメインに影響を与えることを示します。
例:
|
||||
ステップ 3 |
インターフェイスを削除するには、detach-interface コマンドを使用します。
例:
|
SR-IOV を使用すれば、複数の VM でホスト内部の 1 台の PCIe ネットワーク アダプタを共有することができます。SR-IOV は次の機能を定義しています。
物理機能(PF):PF は、SR-IOV 機能を含むフル PCIe 機能です。これらは、ホスト サーバ上の通常のスタティック NIC として表示されます。
仮想機能(VF):VF は、データ転送を支援する軽量 PCIe 機能です。VF は、PF から抽出され、PF を介して管理されます。
VF は、仮想化されたオペレーティング システム フレームワーク内の ASAv 仮想マシンに最大 10 Gbps の接続を提供できます。このセクションでは、KVM 環境で VF を設定する方法について説明します。ASAv 上の SR-IOV サポートについては、ASAv と SR-IOV インターフェイスのプロビジョニングで説明します。
SR-IOV をサポートする物理 NIC があれば、SR-IOV 対応 VF または仮想 NIC(vNIC)を ASAv インスタンスにアタッチできます。SR-IOV は、BIOS だけでなく、ハードウェア上で実行しているオペレーティング システム インスタンスまたはハイパーバイザでのサポートも必要です。KVM 環境で実行中の ASAv 用の SR-IOV インターフェイスのプロビジョニングに関する一般的なガイドラインのリストを以下に示します。
ホスト サーバには SR-IOV 対応物理 NIC が必要です。SR-IOV インターフェイスに関するガイドラインと制限事項を参照してください。
ホスト サーバの BIOS で仮想化が有効になっている必要があります。詳細については、ベンダーのマニュアルを参照してください。
ホスト サーバの BIOS で IOMMU グローバル サポートが SR-IOV に対して有効になっている必要があります。詳細については、ハードウェア ベンダーのマニュアルを参照してください。
このセクションでは、KVM システム上の SR-IOV インターフェイスのプロビジョニングに関するさまざまなセットアップ手順と設定手順を示します。このセクション内の情報は、Intel Ethernet Server Adapter X520 - DA2 を使用した Cisco UCS C シリーズ サーバ上の Ubuntu 14.04 を使用して、特定のラボ環境内のデバイスから作成されたものです。
SR-IOV 互換ネットワーク インターフェイス カード(NIC)が取り付けられていることを確認します。
Intel 仮想化テクノロジー(VT-x)機能と VT-d 機能が有効になっていることを確認します。
(注) |
システム メーカーによっては、これらの拡張機能がデフォルトで無効になっている場合があります。システムごとに BIOS 設定にアクセスして変更する方法が異なるため、ベンダーのマニュアルでプロセスを確認することをお勧めします。 |
オペレーティング システムのインストール中に、Linux KVM モジュール、ライブラリ、ユーザ ツール、およびユーティリティのすべてがインストールされていることを確認します。ASAv と KVM の前提条件を参照してください。
物理インターフェイスが稼働状態であることを確認します。ifconfig <ethname> を使用して確認します。
ステップ 1 |
"root" ユーザ アカウントとパスワードを使用してシステムにログインします。 |
||
ステップ 2 |
Intel VT-d が有効になっていることを確認します。 例:
最後の行は、VT-d が有効になっていることを示しています。 |
||
ステップ 3 |
/etc/default/grub 設定ファイル内の GRUB_CMDLINE_LINUX エントリに intel_iommu=on パラメータを付加することによって、カーネル内の Intel VT-d をアクティブにします。 例:
|
||
ステップ 4 |
iommu の変更を有効にするためにサーバをリブートします。 例:
|
||
ステップ 5 |
次の形式を使用して sysfs インターフェイス経由で sriov_numvfs パラメータに適切な値を書き込むことによって、VF を作成します。
サーバの電源を入れ直すたびに必要な数の VF が作成されるようにするには、/etc/rc.d/ ディレクトリに配置されている rc.local ファイルに上記コマンドを付加します。Linux OS は、ブート プロセスの最後で rc.local スクリプトを実行します。 たとえば、ポートあたり 1 つの VF を作成するケースを以下に示します。お使いのセットアップではインターフェイスが異なる可能性があります。 例:
|
||
ステップ 6 |
サーバをリブートします。 例:
|
||
ステップ 7 |
lspci を使用して、VF が作成されたことを確認します。 例:
|
VF を作成したら、PCI デバイスを追加するのと同様に、VF を ASAv に追加できます。次の例では、グラフィカル virt-manager ツールを使用して、イーサネット VF コントローラを ASAv に追加する方法について説明します。
ステップ 1 |
ASAv を開いて、[Add Hardware] ボタンをクリックし、新しいデバイスを仮想マシンに追加します。 |
ステップ 2 |
左ペインの [Hardware] リストで [PCI Host Device] をクリックします。 VF を含む PCI デバイスのリストが中央ペインに表示されます。 |
ステップ 3 |
使用可能な仮想機能のいずれかを選択して、[Finish] をクリックします。 PCI デバイスがハードウェア リストに表示されます。デバイスの記述が Ethernet Controller Virtual Function になっていることに注意してください。 |
ASAv コマンド ラインから、show interface コマンドを使用して、新しく設定したインターフェイスを確認します。
ASAv でインターフェイス コンフィギュレーション モードを使用して、トラフィックの送受信インターフェイスを設定および有効化します。詳細については、「Basic Interface Configuration」の章を『Cisco ASA Series General Operations CLI Configuration Guide』で参照してください。
KVM ホストの設定を変更することによって、KVM 環境内の ASAv のパフォーマンスを向上させることができます。これらの設定は、ホスト サーバ上の構成時の設定とは無関係です。このオプションは、Red Hat Enterprise Linux 7.0 KVM で使用できます。
CPU ピニングを有効にすると、KVM 構成でのパフォーマンスを向上できます。
KVM 環境内の ASAv のパフォーマンスを向上させるために、KVM CPU アフィニティ オプションを使用して、特定のプロセッサに仮想マシンを割り当てることができます。このオプションを使用する場合は、KVM ホストで CPU ピンニングを構成します。
ステップ 1 |
KVM ホスト環境で、ピンニングに使用できる vCPU の数を調べるために、ホストのトポロジを確認します。 例:
|
||
ステップ 2 |
使用可能な vCPU の数を確認します。 例:
|
||
ステップ 3 |
vCPU をプロセッサ コアのセットにピンニングします。 例:
virsh vcpupin コマンドは、ASAv 上の vCPU ごとに実行する必要があります。次の例は、vCPU が 4 個の ASAv 構成を使用し、ホストに 8 個のコアが搭載されている場合に必要になる KVM コマンドを示しています。
ホストのコア番号は、0 ~ 7 のどの番号でもかまいません。詳細については、KVM のドキュメンテーションを参照してください。
|