7.14. 仮想マシンのネットワーク
7.14.1. 仮想マシンのデフォルト Pod ネットワークの使用 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Virtualization でデフォルトの Pod ネットワークを使用できます。これを実行するには、masquerade バインディングメソッドを使用する必要があります。これは、デフォルトの Pod ネットワークを使用する場合にのみ推奨されるバインディングメソッドです。デフォルト以外のネットワークには、masquerade モードを使用しないでください。
セカンダリーネットワーク の場合は、bridge バインディングメソッドを使用します。
KubeMacPool コンポーネントは、指定の namespace に仮想マシン NIC の MAC アドレスプールサービスを提供します。これはデフォルトで有効にされません。KubeMacPool ラベルを namespace に適用して、namespace で MAC アドレスプールを有効にします。
7.14.1.1. コマンドラインでのマスカレードモードの設定 リンクのコピーリンクがクリップボードにコピーされました!
マスカレードモードを使用し、仮想マシンの送信トラフィックを Pod IP アドレスの背後で非表示にすることができます。マスカレードモードは、ネットワークアドレス変換 (NAT) を使用して仮想マシンを Linux ブリッジ経由で Pod ネットワークバックエンドに接続します。
仮想マシンの設定ファイルを編集して、マスカレードモードを有効にし、トラフィックが仮想マシンに到達できるようにします。
前提条件
- 仮想マシンは、IPv4 アドレスを取得するために DHCP を使用できるように設定される必要がある。以下の例では、DHCP を使用するように設定されます。
7.14.1.2. バインディング方法の選択 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Virtualization Web コンソールウィザード から仮想マシンを作成する場合、Networking 画面で必要なバインディングメソッドを選択します。
7.14.1.2.1. ネットワークフィールド リンクのコピーリンクがクリップボードにコピーされました!
| 名前 | 説明 |
|---|---|
| 名前 | ネットワークインターフェイスの名前。 |
| Model | ネットワークインターフェイスカードのモデルを示します。サポートされる値は、e1000、 e1000e、ne2k_pci、pcnet, rtl8139、および virtIO です。 |
| Network | 利用可能な NetworkAttachmentDefinition オブジェクトの一覧。 |
| Type |
利用可能なバインディングメソッドの一覧。デフォルトの Pod ネットワークについては、 |
| MAC Address | ネットワークインターフェイスの MAC アドレス。MAC アドレスが指定されていない場合、セッションの一時アドレスが生成されます。 |
7.14.1.3. デフォルトネットワーク用の仮想マシン設定の例 リンクのコピーリンクがクリップボードにコピーされました!
7.14.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
7.14.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
7.14.1.4. 仮想マシンからのサービスの作成 リンクのコピーリンクがクリップボードにコピーされました!
仮想マシンを公開するために Service オブジェクトを最初に作成し、実行中の仮想マシンからサービスを作成します。
ClusterIP サービスタイプは、クラスター内で仮想マシンを内部に公開します。NodePort または LoadBalancer サービスタイプは、クラスター外から仮想マシンを外部に公開します。
この手順では、type: ClusterIP の Service オブジェクトを仮想マシンバックエンドサービスとして作成し、これに接続し、公開する方法についての例を示します。
ClusterIP は、サービスの type が指定されていない場合のデフォルトサービスの type です。
手順
以下のように仮想マシンの YAML を編集します。
apiVersion: kubevirt.io/v1alpha3 kind: VirtualMachine metadata: name: vm-ephemeral namespace: example-namespace spec: running: false template: metadata: labels: special: key1 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- 1
- ラベル
special: keyをspec.template.metadata.labelsセクションに追加します。
注記仮想マシンのラベルは Pod に渡されます。
VirtualMachineのラベル (例:special: key) は、この手順の後で作成するServiceYAMLselector属性のラベルに一致する必要があります。- 仮想マシン YAML を保存して変更を適用します。
ServiceYAML を編集し、Serviceオブジェクトを作成し、公開するために必要な設定を行います。apiVersion: v1 kind: Service metadata: name: vmservice1 namespace: example-namespace2 spec: ports: - port: 27017 protocol: TCP targetPort: 223 selector: special: key4 type: ClusterIP5 - 1
- 作成および公開するサービスの
nameを指定します。 - 2
- 仮想マシン YAML に指定する
namespaceに対応するServiceYAML のmetadataセクションのnamespaceを指定します。 - 3
targetPort: 22を追加し、SSH ポート22にサービスを公開します。- 4
ServiceYAML のspecセクションで、special: keyをselector属性に追加します。これは、仮想マシン YAML 設定ファイルに追加したlabelsに対応します。- 5
ServiceYAML のspecセクションで、ClusterIP サービスのtype: ClusterIPを追加します。NodePortやLoadBalancerなどのクラスター外にある他のタイプのサービスを作成し、公開するには、type: ClusterIPをtype: NodePortまたはtype: LoadBalancerに随時置き換えます。
-
ServiceYAML を保存し、サービス設定を保管します。 ClusterIPサービスを作成します。$ oc create -f <service_name>.yaml- 仮想マシンを起動します。仮想マシンがすでに実行中の場合は、これを再起動します。
Serviceオブジェクトをクエリーし、これが利用可能であり、ClusterIPタイプで設定されていることを確認します。検証
oc get serviceコマンドを実行し、仮想マシンで参照するnamespaceおよびServiceYAML ファイルを指定します。$ oc get service -n example-namespace出力例
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE vmservice ClusterIP 172.30.3.149 <none> 27017/TCP 2m-
出力で示されているように、
vmserviceが実行されています。 -
TYPEは、ServiceYAML で指定したようにClusterIPとして表示されます。
-
出力で示されているように、
サービスをサポートするために使用する仮想マシンへの接続を確立します。別の仮想マシンなど、クラスター内のオブジェクトから接続します。
以下のように仮想マシンの YAML を編集します。
apiVersion: kubevirt.io/v1alpha3 kind: VirtualMachine metadata: name: vm-connect namespace: example-namespace 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 --stdinoc createコマンドを実行して 2 番目の仮想マシンを作成します。ここで、file.yamlは仮想マシン YAML の名前になります。$ oc create -f <file.yaml>- 仮想マシンを起動します。
以下の
virtctlコマンドを実行して仮想マシンに接続します。$ virtctl -n example-namespace console <new-vm-name>注記サービスタイプ
LoadBalancerの場合、vinagreクライアントを使用し、パブリック IP およびポートを使用して仮想マシンに接続します。外部ポートは、サービスタイプLoadBalancerを使用する場合に動的に割り当てられます。sshコマンドを実行して接続を認証します。ここで、172.30.3.149はサービスの ClusterIP であり、fedoraは仮想マシンのユーザー名です。$ ssh fedora@172.30.3.149 -p 27017検証
- 公開するサービスをサポートする仮想マシンのコマンドプロンプトが表示されます。実行中の仮想マシンがサポートするサービスの準備ができました。
関連情報