KVMのネットワーク構成
KVM仮想ネットワークを構成および管理するには、次のトピックを参照してください:
概要: 仮想ネットワーク
KVM環境内のネットワークは、KVMゲストに仮想ネットワーク・インタフェース・カード(vNIC)を作成することによって実現されます。vNICは、次のいずれかの方法でホスト・システム独自のネットワーク・インフラストラクチャにマップされます。
- ホストで実行されている仮想ネットワークへの接続。
- ホスト上の物理インタフェースを直接使用。
- PCIeデバイスでのシングル・ルートI/O仮想化(SR-IOV)機能の使用。
- vNICがホスト上の物理ネットワーク・インタフェースを共有できるようにするネットワーク・ブリッジを使用する。
vNICは、多くの場合、KVMを最初に作成するときに定義されますが、必要に応じてlibvirt APIを使用してvNICを追加または削除できます。ホット・プラグを処理できるため、これらのアクションは実行中の仮想マシンで大幅な中断なしで実行できます。
仮想ネットワーク・タイプ:
KVM環境内に設定できる様々なタイプの仮想ネットワークの概要を次に示します:
- NATを使用したデフォルトの仮想ネットワーク – KVMネットワークには、(1)ホスト・システム上に直接構成されている物理コンポーネント、(2)
libvirt
内のKVM構成、および(3)実行中のゲストOS内のネットワーク構成が含まれるため、複雑になることがあります。そのため、多くの開発環境とテスト環境では、libvirt
によって提供される仮想ネットワークを使用するようにvNICを構成するだけで十分な場合があります。デフォルトでは、libvirt
仮想ネットワークはネットワーク・アドレス変換(NAT)を使用して、KVMゲストが外部ネットワーク・リソースにアクセスできるようにします。このアプローチは構成が簡単であるとみなされ、多くの場合、すでにホスト・システムに構成されている同様のネットワーク・アクセスを円滑にします。 - ブリッジ・ネットワークとマッピングされた仮想インタフェース – 特定のサブネットワークにVMが属している必要がある場合は、ブリッジ・ネットワークを使用できます。ネットワーク・ブリッジは、ホストの物理インタフェースにマップされて共有される仮想インタフェースを使用します。このアプローチでは、KVMからのネットワーク・トラフィックは、ホスト・システムと同じ物理ネットワークにある独立したシステムから送信されているかように動作します。使用するツールによっては、KVM用に構成する前に、ホスト・ネットワーク構成を手動で変更する必要がある場合があります。
- ホスト物理ネットワークインタフェース – VM用のネットワークは、ホスト・システムの物理インタフェースを直接使用するように構成することもできます。この構成は、vNICが物理ネットワークに直接接続されているかのように動作するという点で、ブリッジ・ネットワーク・インタフェースの使用と同様のネットワーク動作を提供できます。直接接続では、物理ネットワーク・インタフェースを拡張するために
macvtap
ドライバが使用される傾向があります。これにより、多くの機能が提供されることに加えて、ブリッジ・ネットワークと同様に動作しながら構成と維持が簡単でパフォーマンスの向上も得られる可能性がある仮想ブリッジも提供されます。 -
直接および共有のPCIeパススルー – 別のKVMネットワークの方法は、PCIeパススルーを構成することです。この方法では、PCIeインタフェースによってKVMのネットワーク機能がサポートされます。この方法を使用すると、管理者は直接または共有のPCIeパススルー・ネットワークを構成できます。直接PCIeパススルーは、ホスト・システム上のPCIeデバイスの排他的使用を単一のKVMゲストに割り当てます。共有PCIeパススルーは、SR-IOV (シングル・ルートI/O仮想化)対応のPCIeデバイスの共有使用を複数のKVMゲストに割り当てます。これらのどちらの構成方法でも、ネットワーク使用のためにKVMゲストにPCIeデバイスを接続する前に、ホスト・システムでハードウェアの設定および構成を行う必要があります。
仮想ネットワークを構成するためのKVMツール
ネットワーク構成がより複雑になる可能性がある場合は、Oracle Linux Virtualization Managerを使用することをお薦めします。このガイドで説明するCLIネットワーク構成および操作の基本的な目的は、最も基本的なKVMネットワークのデプロイメント・シナリオを容易にすることです。
Oracle Linux Virtualization Managerのより複雑なネットワーク構成については、Oracle Linux Virtualization Managerのドキュメントを参照してください。
コマンドの使用方法: 仮想ネットワークの管理
KVM環境で仮想ネットワークを管理するには、virsh net-*
コマンドを使用します。次に例を示します:
virsh net-list all
– ホスト・システムに構成されているすべての仮想ネットワークをリストします。
出力例:virsh net-list --all
Name State Autostart Persistent ---------------------------------------------------------- default active yes yes
virsh net-info
– ネットワークに関する情報を表示します。
出力例:virsh net-info default
説明:Name: default UUID: 16318035-eed4-45b6-99f8-02f1ed0661d9 Active: yes Persistent: yes Autostart: yes Bridge: virbr0
- 名前 = 割り当てられたネットワーク名。
- UUID = 割り当てられたネットワーク識別子。
- virbr0 = 仮想ネットワーク・ブリッジ。
ノート:
virbr0
を従来のブリッジ・ネットワークと混同しないでください。この場合、仮想ブリッジは物理インタフェースに接続されません。仮想ネットワーク・ブリッジは、NATおよびIP転送に依存して、VMを物理ネットワークに接続します。
virsh net-dumpxml
– ネットワークの完全な構成を表示します。
出力例:virsh net-dumpxml default
<network> <name>default</name> <uuid>16318035-eed4-45b6-99f8-02f1ed0661d9</uuid> <forward mode='nat'> <nat> <port start='1024' end='65535'/> </nat> </forward> <bridge name='virbr0' stp='on' delay='0'/> <mac address='52:54:00:82:75:1d'/> <ip address='192.168.122.1' netmask='255.255.255.0'> <dhcp> <range start='192.168.122.2' end='192.168.122.254'/> </dhcp> </ip> </network>
この例では、仮想ネットワークは
virbr0
というネットワーク・ブリッジを使用しており、従来のブリッジ・ネットワークと混同しないようにしています。仮想ブリッジは、物理インタフェースに接続されておらず、NATおよびIP転送に依存して、VMを物理ネットワークに接続しています。libvirt
は、DHCPを使用してVMへのIPアドレスの割当ても処理しています。通常、デフォルト・ネットワークは192.168.122.1/24の範囲です。virsh net-start
– 以前に定義した非アクティブな仮想ネットワークを起動します。
ここで、network-identifierはネットワーク名またはネットワークUUIDを表します。sudo virsh net-start [--network] <network-identifier>
virsh net-destroy
– アクティブなネットワークを停止し、それによって使用されていたすべてのリソースの割当てを解除します。たとえば、該当するdnsmasqプロセスを停止し、ブリッジを解放します。sudo virsh net-start [--network] <network-identifier>
libvirt
のネットワーク管理コマンドの詳細なリストは、libvirt
仮想ネットワークのサイト(https://wiki.libvirt.org/VirtualNetworking.html#virsh-xml-commands)の仮想ネットワークの基本的なコマンドラインの使用方法に関する項を参照してください。
コマンドの使用方法: vNICの追加または削除
既存のKVMに新しいvNICを追加するには、virsh attach-interfaceコマンドを使用します。このコマンドは、KVMで使用可能なネットワーク・タイプのいずれかを使用するKVMに、vNICを作成するために使用できます。
virsh attach-interface --domain guest --type network --source default --config
このコマンドで、次のパラメータを指定する必要があります。
--domain
– KVM名、IDまたはUUID。--type
– vNICが使用するネットワークのタイプ。使用可能なオプションは次のとおりです:
-
network
: NATを使用するlibvirt仮想ネットワークの場合 -
bridge
: ホスト上のブリッジ・デバイスの場合 -
direct
: ホストのネットワーク・インタフェースまたはブリッジのいずれかへの直接マッピングの場合 -
hostdev
: ホスト上のPCIデバイスを使用したパススルー接続の場合。
-
--source
– 指定したネットワーク・タイプに使用されるソース。これらの値は、タイプによって異なります:
network
の場合は、仮想ネットワークの名前を指定しますbridge
の場合は、ブリッジ・デバイスの名前を指定しますdirect
接続の場合は、ホストのインタフェースまたはブリッジの名前を指定しますhostdev
接続の場合は、domain:bus:slot.function
としてフォーマットされたホストのインタフェースのPCIアドレスを指定します。
--config
– ゲストVMの格納されているXML構成を変更し、ゲストの起動時に有効になります。--live
– ゲストVMは稼働している必要があり、変更は即時に行われ、vNICがホット・プラグされます。--current
– 現在のゲストVMに影響します。
他のネットワーク・タイプを使用する場合は、MACアドレスの設定やターゲットmacvtap
デバイスの構成など、このインタフェースをさらにカスタマイズするための追加のオプションが使用できます。--model
オプションを使用すると、VMに提供されるネットワーク・インタフェースのモデルを変更することもできます。デフォルトでは、virtio
モデルが使用されますが、e1000
やrtl8139
などの他のモデルを使用できます。詳細は、virsh help attach-interfaceを実行するか、virsh(1)
マニュアル・ページを参照してください。
VMからvNICを削除するには、virsh detach-interfaceコマンドを使用します。次に例を示します:
virsh detach-interface --domain guest --type network --mac 52:54:00:41:6a:65 --config
domain
またはVM名とtype
は、必須パラメータです。VMに複数のvNICがアタッチされている場合は、mac
パラメータを指定して、削除するvNICのMACアドレスを提示する必要があります。この値は、VMにアタッチされているvNICをリストして取得できます。たとえば、次のコマンドを実行します。
virsh domiflist guest
次のような出力が表示されます。
Interface Type Source Model MAC
-------------------------------------------------------
vnet0 network default virtio 52:54:00:8c:d2:44
vnet1 network default virtio 52:54:00:41:6a:65
ブリッジ・ネットワーク: 設定
設定のガイドライン: ブリッジ・ネットワーク
Linuxブリッジを使用した従来のネットワーク・ブリッジは、virsh iface-bridge
コマンドを使用して構成できます。このコマンドを使用すると、管理者はホスト・システムにブリッジを作成し、それに物理インタフェースを追加できます。たとえば、次のコマンド構文では、enp0s31f6という名前のイーサネット・ポートを持つvmbridge1という名前のブリッジが作成されます:
virsh iface-bridge vmbridge1 enp0s31f6
ブリッジ・ネットワーク・インタフェースを設定したら、管理者はvirsh attach-interfaceコマンドを使用してそれをVMに接続できます。
KVMゲストに従来のLinuxブリッジ・ネットワークを使用する場合は、次のことを考慮してください:
- ワイヤレス・インターフェイスでのソフトウェア・ブリッジの設定は、802.11フレームで使用可能なアドレス数のために複雑と見なされます。
- ソフトウェア・ブリッジを処理するコードが複雑になるため、スループットの低下、レイテンシの増大および構成の複雑さを招くことがあります。
ブリッジ・ネットワークの主な利点は、ホスト・システムがブリッジ・ネットワークを使用するように構成されたゲストとネットワーク・スタックを通じて直接通信できるようになることです。
macvtap
ドライバを使用することで簡単に解消できます。KVMのほとんどのブリッジ・ネットワーク構成では、パフォーマンスが向上して構成が容易になるため、このアプローチをお薦めします。macvtap
ドライバは、KVM XML構成ファイル内のネットワーク・タイプがdirect
に設定されている場合に使用します。次に例を示します:<interface type="direct">
<mac address="#:##:##:##:#:##"/>
<source dev="kvm-host-network-interface- name" mode="bridge"/>
<model type="virtio"/>
<driver name="vhost"/>
</interface>
説明:- mac address="#:##:##:##:#:##" – MACアドレス・フィールドはオプションです。省略すると、
libvirt
デーモンによって一意のアドレスが生成されます。 - interface type="direct" – MacVTapで使用されます。既存のKVMホスト・デバイスへの直接マッピングを指定します。
- source dev="KVM-host-device" mode="bridge" – KVMゲストのMacVTapインタフェースで使用されるKVMホスト・ネットワーク・インタフェース名を指定します。modeキーワードは、使用するMacVTapモードを定義します。
macvtap
ドライバは、既存のネットワーク・インタフェースを拡張するためにtun/tap ioctlインタフェース・モデルに従うエンドポイント・デバイスを作成します。KVMは、各種のネットワーク機能をサポートする物理ネットワーク・インタフェースに直接接続するために、このエンドポイント・デバイスを使用できます。このような機能は、インタフェースに別のモードを設定することで制御できます。使用可能なモードは次のとおりです。
-
vepa
(仮想イーサネット・ポート・アグリゲータ)はデフォルトのモードです。このモードでは、vNICのすべてのデータが物理インタフェースからネットワーク・スイッチに強制的に送信されます。スイッチがヘアピン・モードをサポートしている場合、同じ物理インタフェースに接続されている別のvNICsがそのスイッチを介して通信できます。今日の多くのスイッチはヘアピン・モードをサポートしていません。つまり、VEPAモードで実行されている直接接続インタフェースを使用する仮想マシンは通信できませんが、スイッチを使用して外部ネットワークに接続できます。 -
bridge
モードでは、すべてのvNICが相互に直接接続されるため、同じ物理インタフェース上の仮想マシン間のトラフィックはスイッチに送信されず、直接送信されます。bridge
モード・オプションは、ヘアピン・モードをサポートしないスイッチや、VM間の通信に最大限のパフォーマンスが必要な場合に最も役立ちます。bridge
モードは、従来のソフトウェア・ブリッジとは異なり、ホストがこのインタフェースを使用してKVMと直接通信できない点に注意してください。 -
private
モードでは、ヘアピン・モード・オプションをサポートするスイッチがない場合、VEPAモードのvNICと同様に動作します。ただし、スイッチがヘアピン・モードをサポートしている場合でも、同じ物理インタフェースに接続されている2つのVMは相互に通信できません。このオプションでは、限られたユースケースがサポートされます。 -
passthrough
モードは、物理インタフェース・デバイスまたはSR-IOV仮想機能(VF)をvNICに直接接続しますが、移行機能は失われません。すべてのパケットは、構成されたネットワーク・デバイスに直接送信されます。passthrough
モードで構成すると、ネットワーク・デバイスとVMの間に1対1のマッピングが存在します。この構成では、ネットワーク・デバイスをVM間で共有できないためです。
ノート:
virsh attach-interface
コマンドには、macvtap
ドライバを使用するダイレクト・タイプのインタフェースを接続するときに使用可能な様々なモードを指定するオプションがなく、デフォルトでVEPAモードに設定されます。グラフィカルなvirt-manager
ユーティリティでは、macvtap
を使用したブリッジ・ネットワークの設定が簡単になり、様々なモードごとのオプションが用意されています。
作成: ブリッジ・ネットワーク接続
- root権限。
- ホスト・システム上の既存のKVMゲスト。
- イーサネット・デバイスをブリッジのポートとして使用するには、物理イーサネット・デバイスまたは仮想イーサネット・デバイスをホスト・システムにインストールする必要があります。
手順
既存のホストKVMインスタンスでmacvtapドライバを使用してブリッジ・ネットワークを構成するには、次の手順に従います。
スループットの向上のための結合インタフェース
複数のサービスを同時に提供する複数のVMを同時実行するホストの場合、ネットワーク・スループットを向上させるために結合インタフェースを使用することが一般的です。この場合、物理サーバーにホストされているアプリケーションに対して十分な帯域幅を単一の物理インタフェースが提供している可能性があり、単一の物理インタフェースを共有して複数のVMが実行されるときにネットワーク・トラフィックが増加すると、ネットワークのパフォーマンスに悪影響を与える可能性があります。結合インタフェースを使用することで、KVMネットワークのスループットが大幅に向上し、ネットワーク・ボンディングで使用可能な高可用性機能を活用できます。
VMが使用する物理ネットワーク・インタフェースはVMではなくホストにあるため、スループットの向上や高可用性のためには、いずれかの形式の結合ネットワークをホスト・システムに構成する必要があります。このプロセスでは、ホスト上でネットワーク結合を構成してから、ネットワーク・ブリッジなどの仮想ネットワーク・インタフェースをホスト上の結合ネットワークに直接接続します。
VMの高可用性ネットワークを実現するには、まずホスト・システムにネットワーク結合を構成する必要があります。ネットワーク・ボンディングの設定方法の詳細は、次のいずれかのガイドのネットワーク・ボンディングの使用を参照してください:
結合を構成したら、ネットワーク・ブリッジの構成時に結合されたインタフェースを使用するように仮想マシン・ネットワークを構成できます。これは、(1)インタフェース・タイプのbridge
モード、または(2)macvtap
ドライバのbridge
モードを使用するように構成されたdirect
インタフェースのいずれかを使用して実行できます。結合インタフェースは、仮想ネットワーク・インタフェースの構成時に、物理ネットワーク・インタフェースのかわりに使用できます。
PCIeパススルー: 設定
libvirt
を使用してKVMゲストにPCIeパススルーを直接送信します。このメソッドは、ホスト・システム上のPCIeデバイスの排他的使用を単一のKVMゲストに割り当てる場合に使用します。この方法では、libvirt
デバイス割当てを使用して、単一のKVMゲストへの直接I/Oパスを構成します。ノート:
直接PCIeパススルーを使用すると、ホスト・システムのCPUリソースの消費量が増加し、ホスト・システムの全体的なパフォーマンスが低下する可能性があります。この方法を使用したPCIeパススルーの構成の詳細は、「作成: 直接PCIeパススルー接続」を参照してください。
.- SR-IOVを使用したKVMゲストへの共有PCIeパススルー。この方法を使用して、SR-IOV (単一ルートI/O仮想化)対応のPCIeデバイスの共有使用を複数のKVMゲストに割り当てます。この方法では、SR-IOVデバイス割当てを使用して、複数のKVMゲスト間で共有されるPCIeリソースを構成します。SR-IOVデバイスの割当ては、パケットレートが高いワークロードや待機時間が短いワークロードで役立ちます。SR-IOV PCIeパススルーの詳細は、次のトピックを参照してください。
作成: 直接PCIeパススルー接続
排他的PCIeデバイス制御
KVMゲストは、ホスト・システムで使用可能なPCIeデバイスに直接アクセスし、その機能を排他的に制御するように構成できます。virsh
コマンドを使用して、KVMゲストにホストPCIeデバイスを割り当てます。PCIeデバイスがゲストに割り当てられると、ゲストはデバイスに排他的にアクセスでき、システム上のホストまたは他のゲストが使用できなくなります。
ノート:
次の手順では、SR-IOVイーサネット仮想デバイスのパススルーを有効にする構成については説明しません。SR-IOV対応PCIeデバイスにパススルーを構成する方法については、「作成: SR-IOV PCIeパススルー接続」を参照してください。手順
ホストPCIeデバイスをKVMゲストに直接割り当てるには、次のステップを実行します。
設定のガイドライン: SR-IOV PCIeパススルー
単一ルートI/O仮想化(SR-IOV)仕様は、複数のKVMゲスト間で単一のPCIeリソースを共有できるデバイス割当ての標準です。SR-IOVは、物理PCIeリソースを、通常のPCIeデバイスとして検出、管理および構成できる仮想PCIe関数にパーティション化する機能を提供します。
- 物理機能(PF)物理機能(PF)は、物理PCIeアダプタデバイスを指します。各物理PCIeアダプタは、最大8つの関数を持つことができます(ただし、最も一般的なケースは1つの関数です)。各関数には完全な構成領域があり、ソフトウェアによって個別のPCIeデバイスとして認識されます。PCIe関数の構成領域にSR-IOVサポートが含まれている場合、その関数はSR-IOV物理機能とみなされます。SR-IOV物理機能を使用すると、仮想化を有効にして仮想機能(VF)を公開するためのSR-IOV設定を管理および構成できます。
- 仮想機能(VF)。仮想機能(VF)は、PCIeデバイスの仮想化インスタンスを指します。各VFは、データの入出力を行うように設計されています。VFは物理機能(PF)から導出されます。たとえば、各VFはベースとなるPFに接続され、各PFはゼロ(0)から1 (1)以上のVFを持つことができます。VFはほとんどの設定をPFから継承するため、構成スペースが短縮されます。
- PCIeリソースの効率的な共有を可能にすることで、パフォーマンスと容量を最適化します。
- 1つのPFに関連付けられた数百のVFを作成することで、ハードウェア・コストを削減します。
- SR-IOV機能をオンにするように設計されたレジスタによるPFによる動的な制御により、時間のかかる統合が不要になります。
- 仮想ゲスト環境からハードウェアへの直接アクセスにより、パフォーマンスが向上します。
作成: SR-IOV PCIeパススルー接続
シングル・ルートI/O仮想化(SR-IOV)は、高パフォーマンスの仮想化ソリューションとして動作するOracle Linux機能をさらに拡張します。SR-IOVを使用すると、Oracle LinuxはSR-IOV機能を持つPCIデバイスから仮想リソースを割り当てることができます。仮想機能(VF)と呼ばれるこれらの仮想リソースは、KVMゲストへの新しい割当て可能なPCIeデバイスとして表示されます。
SR-IOVは、物理PCIデバイスをゲストに割り当てるのと同じ機能を提供します。ただし、SR-IOVを使用するための主な利点には、I/Oパフォーマンスの最適化(ゲストOSがデバイスハードウェアと直接やり取りするとき)、およびハードウェアコストの削減(周辺デバイスの大規模なシステム構成を管理する必要性の排除)があります。
手順
KVMゲストへのSR-IOV PCIeパススルーを構成するには、次のステップを実行します。
SR-IOV対応PCIeデバイス
ノート:
新しいSR-IOV PCIeデバイスとLinuxカーネルが継続的に開発されているため、他のSR-IOV対応のPCIeデバイスは時間の経過とともに利用できる可能性があり、次の表には取得されません。表5-1 PCIeのデバイスおよびドライバ
デバイス名 | デバイス・ドライバ |
---|---|
Intel 82599ES 10ギガビット・イーサネット・コントローラ | Intel(R)イーサネット・ネットワーク接続用のIntel xgbe Linuxベース・ドライバ
最新の |
Intelイーサネット・コントローラXL710シリーズ
Intelイーサネット・ネットワーク・アダプタXXV710 |
Intel(R)イーサネット・ネットワーク接続用Intel i40e Linuxベース・ドライバ
最新の |
NVIDA (Mellanox) ConnectX-5、ConnectX-6 DX、ConnectX-7 | NVIDA (Mellanox) mlx5_core ドライバ
|
Intel 82576ギガビット・イーサネット・コントローラ | Intel(R)イーサネット・ネットワーク接続用Intel igb Linux*ベース・ドライバ
最新の |
Broadcom NetXtreme II BCM57810 | Broadcom bnx2x Broadcom NetXtreme IIネットワーク接続用のLinuxベース・ドライバ
|
QSFP用イーサネット・コントローラ E810-C | Intel(R)イーサネット・ネットワーク接続で使用可能なOracle Linuxベース・ドライバ・パッケージ |
SFC9220 10/40Gイーサネット・コントローラ |
|
FastLinQ QL41000シリーズ10/25/40/50GbEコントローラ | qede FastLinQイーサネット・ネットワーク接続用ポーリング・モード・ドライバ
|