6.11. 仮想マシンのネットワーク
6.11.1. 仮想マシンのデフォルト Pod ネットワークの使用
Container-native Virtualization でデフォルトの Pod ネットワークを使用できます。これを実行するには、masquerade
バインディングメソッドを使用する必要があります。これは、デフォルトの Pod ネットワークを使用する場合にのみ推奨されるバインディングメソッドです。デフォルト以外のネットワークには、masquerade
モードを使用しないでください。
セカンダリーネットワークの場合は、bridge
バインディングメソッドを使用します。
6.11.1.1. コマンドラインでのマスカレードモードの設定
マスカレードモードを使用し、仮想マシンの送信トラフィックを Pod IP アドレスの背後で非表示にすることができます。マスカレードモードは、ネットワークアドレス変換 (NAT) を使用して仮想マシンを Linux ブリッジ経由で Pod ネットワークバックエンドに接続します。
仮想マシンの設定ファイルを編集して、マスカレードモードを有効にし、トラフィックが仮想マシンに到達できるようにします。
前提条件
- 仮想マシンは、IPv4 アドレスを取得するために DHCP を使用できるように設定される必要があります。以下の例では、DHCP を使用するように設定されます。
6.11.1.2. バインディング方法の選択
Container-native Virtualization Web コンソールウィザードから仮想マシンを作成する場合、Networking 画面で必要なバインディングメソッドを選択します。
6.11.1.2.1. ネットワークフィールド
Name | Description |
---|---|
Name | ネットワークインターフェースの名前。 |
Model | ネットワークインターフェースカードのドライバー、またはネットワークインターフェースカードのモデル |
Network | 利用可能な NetworkAttachmentDefinition オブジェクトの一覧。 |
Type |
利用可能なバインディングメソッドの一覧。デフォルトの Pod ネットワークについては、 |
MAC Address | ネットワークインターフェースの MAC アドレス。MAC アドレスが指定されていない場合、セッションの一時アドレスが生成されます。 |
6.11.1.3. デフォルトネットワーク用の仮想マシン設定の例
6.11.1.3.1. テンプレート: 仮想マシンの設定ファイル
apiVersion: kubevirt.io/v1alpha3 kind: VirtualMachine metadata: name: example-vm namespace: default spec: running: false template: spec: domain: devices: disks: - name: containerdisk disk: bus: virtio - name: cloudinitdisk disk: bus: virtio interfaces: - masquerade: {} name: default resources: requests: memory: 1024M networks: - name: default pod: {} volumes: - name: containerdisk containerDisk: image: kubevirt/fedora-cloud-container-disk-demo - name: cloudinitdisk cloudInitNoCloud: userData: | #!/bin/bash echo "fedora" | passwd fedora --stdin
6.11.1.3.2. テンプレート: Windows 仮想マシンインスタンスの設定ファイル
apiVersion: kubevirt.io/v1alpha3 kind: VirtualMachineInstance metadata: labels: special: vmi-windows name: vmi-windows spec: domain: clock: timer: hpet: present: false hyperv: {} pit: tickPolicy: delay rtc: tickPolicy: catchup utc: {} cpu: cores: 2 devices: disks: - disk: bus: sata name: pvcdisk interfaces: - masquerade: {} model: e1000 name: default features: acpi: {} apic: {} hyperv: relaxed: {} spinlocks: spinlocks: 8191 vapic: {} firmware: uuid: 5d307ca9-b3ef-428c-8861-06e72d69f223 machine: type: q35 resources: requests: memory: 2Gi networks: - name: default pod: {} terminationGracePeriodSeconds: 0 volumes: - name: pvcdisk persistentVolumeClaim: claimName: disk-windows
6.11.2. 仮想マシンの複数ネットワークへの割り当て
Container-native Virtualization は、仮想マシンの複数ネットワークへの接続を可能にする layer-2 vNIC ネットワーク機能を提供します。複数インターフェースへのアクセスによって異なる既存のワークロードを持つ仮想マシンをインポートできます。また、仮想マシンをネットワーク経由で起動できるように PXE ネットワークを設定することもできます。
まず、ネットワーク管理者は Web コンソールまたは CLI で namespace のブリッジ NetworkAttachmentDefinition を設定します。次に、ユーザーは NIC を作成し、その namespace 内の Pod および仮想マシンをブリッジネットワークに割り当てることができます。
6.11.2.1. Container-native Virtualization ネットワークの用語集
Container-native Virtualization は、カスタムリソースおよびプラグインを使用して高度なネットワーク機能を提供します。
以下の用語は、Container-native Virtualization ドキュメント全体で使用されています。
- Container Network Interface (CNI)
- コンテナーのネットワーク接続に重点を置く Cloud Native Computing Foundation プロジェクト。Container-native Virtualization は CNI プラグインを使用して基本的な Kubernetes ネットワーク機能を強化します。
- Multus
- 複数の CNI の存在を可能にし、Pod または仮想マシンが必要なインターフェースを使用できるようにする「メタ」 CNI プラグイン。
- カスタムリソース定義 (CRD、Customer Resource Definition)
- カスタムリソースの定義を可能にする Kubernetes API リソース、または CRD API リソースを使用して定義されるオブジェクト。
- NetworkAttachmentDefinition
- Pod、仮想マシン、および仮想マシンインスタンスを 1 つ以上のネットワークに割り当てることを可能にする Multus プロジェクトによって導入される CRD。
- PXE (Preboot eXecution Environment)
- 管理者がネットワーク経由でサーバーからクライアントマシンを起動できるようにするインターフェース。ネットワークのブートにより、オペレーティングシステムおよび他のソフトウェアをクライアントにリモートでロードできます。
6.11.2.2. NetworkAttachmentDefinition の作成
6.11.2.2.1. Web コンソールでの Linux ブリッジ NetworkAttachmentDefinition の作成
NetworkAttachmentDefinition は、layer-2 デバイスを Container-native Virtualization クラスターの特定の namespace に公開するカスタムリソースです。
ネットワーク管理者は、NetworkAttachmentDefinition を作成して既存の layer-2 ネットワークを Pod および仮想マシンに提供できます。
前提条件
- Container-native Virtualization 2.2 以降がクラスターにインストールされていること。
- Linux ブリッジはすべてのノードで設定され、適切な Network Interface Card (NIC) に割り当てられる必要があります。
-
VLAN を使用する場合、
vlan_filtering
はブリッジで有効にされる必要があります。 NIC はすべての関連する VLAN に対してタグ付けされる必要があります。
-
例:
bridge vlan add dev bond0 vid 1-4095 master
-
例:
手順
-
Web コンソールで、Networking
Network Attachment Definitions をクリックします。 - Create Network Attachment Definition をクリックします。
- 一意の Name およびオプションの Description を入力します。
- Network Type 一覧をクリックし、CNV Linux bridge を選択します。
- Bridge Name フィールドにブリッジの名前を入力します。
- (オプション) リソースに VLAN ID が設定されている場合、 VLAN Tag Number フィールドに ID 番号を入力します。
- Create をクリックします。
6.11.2.2.2. CLI での Linux ブリッジ NetworkAttachmentDefinition の作成
ネットワーク管理者は、タイプ cnv-bridge
の NetworkAttachmentDefinition を、レイヤー 2 ネットワークを Pod および仮想マシンに提供するように設定できます。
NetworkAttachmentDefinition は Pod または仮想マシンと同じ namespace にある必要があります。
前提条件
- Container-native Virtualization 2.0 以降
- Linux ブリッジはすべてのノードで設定され、適切な Network Interface Card に割り当てられる必要があります。
-
VLAN を使用する場合、
vlan_filtering
はブリッジで有効にされる必要があります。 NIC はすべての関連する VLAN に対してタグ付けされる必要があります。
-
例:
bridge vlan add dev bond0 vid 1-4095 master
-
例:
手順
任意のローカルディレクトリーで NetworkAttachmentDefinition の新規ファイルを作成します。このファイルには、お使いの設定に合わせて変更された以下の内容が含まれる必要があります。
apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: a-bridge-network annotations: k8s.v1.cni.cncf.io/resourceName: bridge.network.kubevirt.io/br0 1 spec: config: '{ "cniVersion": "0.3.1", "name": "cnv-bridge-conf", 2 "plugins": [ { "type": "cnv-bridge", 3 "bridge": "br0" 4 }, { "type": "cnv-tuning" 5 } ] }'
- 1
- このアノテーションを NetworkAttachmentDefinition に追加する場合、仮想マシンインスタンスは
br0
ブリッジが接続されているノードでのみ実行されます。 - 2
- 必須。設定の名前。
- 3
- この NetworkAttachmentDefinition のネットワークを提供する Container Network Interface (CNI) プラグインの実際の名前。異なる CNI を使用するのでない限り、このフィールドは変更しないでください。
- 4
- ブリッジの名前が
br0
でない場合、ブリッジの実際の名前に置き換える必要があります。 - 5
- 必須。これにより、MAC プールマネージャーが接続に固有の MAC アドレスを割り当てます。
$ oc create -f <resource_spec.yaml>
ブリッジネットワークに接続する必要のある仮想マシンまたは仮想マシンインスタンスの設定を編集します。
apiVersion: v1 kind: VirtualMachine metadata: name: example-vm annotations: k8s.v1.cni.cncf.io/networks: a-bridge-network 1 spec: ...
- 1
- NetworkAttachmentDefinition の実際の
name
値に置き換える必要があります。
設定ファイルをリソースに適用します。
$ oc create -f <local/path/to/network-attachment-definition.yaml>
次のセクションで vNIC を定義する際に、NETWORK の値が直前のセクションで作成した NetworkAttachmentDefinition のブリッジネットワーク名であることを確認します。
6.11.2.3. 仮想マシンの NIC の作成
Web コンソールから追加の NIC を作成し、これを仮想マシンに割り当てます。
手順
-
Container-native Virtualization コンソールの適切なプロジェクトで、Workloads
Virtual Machines をクリックします。 - 仮想マシンを選択します。
- Network Interfaces をクリックし、仮想マシンにすでに割り当てられている NIC を表示します。
- Create Network Interface をクリックし、一覧に新規スロットを作成します。
- 新規 NIC の Name、Model、Network、 Type、および MAC Address を入力します。
- ✓ ボタンをクリックして NIC を保存し、これを仮想マシンに割り当てます。
6.11.2.4. ネットワークフィールド
Name | Description |
---|---|
Name | ネットワークインターフェースの名前。 |
Model | ネットワークインターフェースカードのドライバー、またはネットワークインターフェースカードのモデル |
Network | 利用可能な NetworkAttachmentDefinition オブジェクトの一覧。 |
Type |
利用可能なバインディングメソッドの一覧。デフォルトの Pod ネットワークについては、 |
MAC Address | ネットワークインターフェースの MAC アドレス。MAC アドレスが指定されていない場合、セッションの一時アドレスが生成されます。 |
仮想マシンにオプションの QEMU ゲストエージェントをインストールし、ホストが追加のネットワークについての関連情報を表示できるようにします。
6.11.3. QEMU ゲストエージェントの仮想マシンへのインストール
QEMU ゲストエージェントは仮想マシンで実行されるデーモンです。エージェントは仮想マシン上で、追加ネットワークの IP アドレスなどのネットワーク情報をホストに渡します。
6.11.3.1. 前提条件
以下のコマンドを実行して、ゲストエージェントがインストールされており、実行中であることを確認します。
$ systemctl status qemu-guest-agent
6.11.3.2. QEMU ゲストエージェントの Linux 仮想マシンへのインストール
qemu-guest-agent
は広く利用されており、Red Hat 仮想マシンでデフォルトで利用できます。このエージェントをインストールし、サービスを起動します。
手順
- コンソールのいずれか、または SSH を使用して仮想マシンのコマンドラインにアクセスします。
QEMU ゲストエージェントを仮想マシンにインストールします。
$ yum install -y qemu-guest-agent
QEMU ゲストエージェントサービスを起動します。
$ systemctl start qemu-guest-agent
サービスに永続性があることを確認します。
$ systemctl enable qemu-guest-agent
Web コンソールで仮想マシンまたは仮想マシンテンプレートのいずれかを作成する際に、ウィザードの cloud-init セクションの custom script フィールドを使用して QEMU ゲストエージェントをインストールし、起動することもできます。
6.11.3.3. QEMU ゲストエージェントの Windows 仮想マシンへのインストール
Windows 仮想マシンの場合、QEMU ゲストエージェントは、以下の手順のいずれかを使用してインストールできる VirtIO ドライバーに含まれています。
6.11.3.3.1. VirtIO ドライバーの既存 Windows 仮想マシンへのインストール
VirtIO ドライバーを、割り当てられた SATA CD ドライブから既存の Windows 仮想マシンにインストールします。
この手順では、ドライバーを Windows に追加するための汎用的なアプローチを使用しています。このプロセスは Windows のバージョンごとに若干異なる可能性があります。特定のインストール手順については、お使いの Windows バージョンについてのインストールドキュメントを参照してください。
手順
- 仮想マシンを起動し、グラフィカルコンソールに接続します。
- Windows ユーザーセッションにログインします。
Device Manager を開き、Other devices を拡張して、Unknown device を一覧表示します。
-
Device Properties
を開いて、不明なデバイスを特定します。デバイスを右クリックし、Properties を選択します。 - Details タブをクリックし、Property リストで Hardware Ids を選択します。
- Hardware Ids の Value をサポートされる VirtIO ドライバーと比較します。
-
- デバイスを右クリックし、Update Driver Software を選択します。
- Browse my computer for driver software をクリックし、VirtIO ドライバーが置かれている割り当て済みの SATA CD ドライブの場所に移動します。ドライバーは、ドライバーのタイプ、オペレーティングシステム、および CPU アーキテクチャー別に階層的に編成されます。
- Next をクリックしてドライバーをインストールします。
- 必要なすべての VirtIO ドライバーに対してこのプロセスを繰り返します。
- ドライバーのインストール後に、Close をクリックしてウィンドウを閉じます。
- 仮想マシンを再起動してドライバーのインストールを完了します。
6.11.3.3.2. Windows インストール時の VirtIO ドライバーのインストール
Windows のインストール時に割り当てられた SATA CD ドライバーから VirtIO ドライバーをインストールします。
この手順では、Windows インストールの汎用的なアプローチを使用しますが、インストール方法は Windows のバージョンごとに異なる可能性があります。インストールする Windows のバージョンについてのドキュメントを参照してください。
手順
- 仮想マシンを起動し、グラフィカルコンソールに接続します。
- Windows インストールプロセスを開始します。
- Advanced インストールを選択します。
-
ストレージの宛先は、ドライバーがロードされるまで認識されません。
Load driver
をクリックします。 - ドライバーは SATA CD ドライブとして割り当てられます。OK をクリックし、CD ドライバーでロードするストレージドライバーを参照します。ドライバーは、ドライバーのタイプ、オペレーティングシステム、および CPU アーキテクチャー別に階層的に編成されます。
- 必要なすべてのドライバーについて直前の 2 つの手順を繰り返します。
- Windows インストールを完了します。
6.11.4. vNIC の IP アドレスの仮想マシンへの表示
QEMU ゲストエージェントは仮想マシンで実行され、割り当てられた NIC の IP アドレスをホストに渡します。 これにより、Web コンソールおよび oc
クライアントの両方から IP アドレスを表示できます。
6.11.4.1. 前提条件
以下のコマンドを実行して、ゲストエージェントがインストールされており、実行中であることを確認します。
$ systemctl status qemu-guest-agent
- ゲストエージェントがインストールされておらず、実行されていない場合は、仮想マシン上でゲストエージェントをインストールし、実行します。
6.11.4.2. CLI での仮想マシンインターフェースの IP アドレスの表示
ネットワークインターフェース設定は oc describe vmi <vmi_name>
コマンドに含まれます。
IP アドレス情報は、仮想マシン上で ip addr
を実行するか、または oc get vmi <vmi_name> -o yaml
を実行して表示することもできます。
手順
oc describe
コマンドを使用して、仮想マシンインターフェース設定を表示します。$ oc describe vmi <vmi_name> ... Interfaces: Interface Name: eth0 Ip Address: 10.244.0.37/24 Ip Addresses: 10.244.0.37/24 fe80::858:aff:fef4:25/64 Mac: 0a:58:0a:f4:00:25 Name: default Interface Name: v2 Ip Address: 1.1.1.7/24 Ip Addresses: 1.1.1.7/24 fe80::f4d9:70ff:fe13:9089/64 Mac: f6:d9:70:13:90:89 Interface Name: v1 Ip Address: 1.1.1.1/24 Ip Addresses: 1.1.1.1/24 1.1.1.2/24 1.1.1.4/24 2001:de7:0:f101::1/64 2001:db8:0:f101::1/64 fe80::1420:84ff:fe10:17aa/64 Mac: 16:20:84:10:17:aa
6.11.4.3. Web コンソールでの仮想マシンインターフェースの IP アドレスの表示
IP 情報は、仮想マシンの Virtual Machine Overview 画面に表示されます。
手順
-
Container-native Virtualization コンソールで Workloads
Virtual Machinesをクリックします。 - 仮想マシンの名前をクリックして、Virtual Machine Overview 画面を開きます。
それぞれの割り当てられた NIC の情報は IP ADDRESSES の下に表示されます。