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 を使用するように設定されます。

手順

  1. 仮想マシン設定ファイルの interfaces 仕様を編集します。

    kind: VirtualMachine
    spec:
      domain:
        devices:
          interfaces:
            - name: red
              masquerade: {} 
    1
    
              ports:
                - port: 80 
    2
    
      networks:
      - name: red
        pod: {}
    Copy to Clipboard Toggle word wrap
    1
    マスカレードモードを使用した接続
    2
    ポート 80 での受信トラフィックの許可
  2. 仮想マシンを作成します。

    $ oc create -f <vm-name>.yaml
    Copy to Clipboard Toggle word wrap

7.14.1.2. バインディング方法の選択

OpenShift Virtualization Web コンソールウィザード から仮想マシンを作成する場合、Networking 画面で必要なバインディングメソッドを選択します。

7.14.1.2.1. ネットワークフィールド
Expand
名前説明

名前

ネットワークインターフェイスの名前。

Model

ネットワークインターフェイスカードのモデルを示します。サポートされる値は、e1000e1000ene2k_pcipcnet, rtl8139、および virtIO です。

Network

利用可能な NetworkAttachmentDefinition オブジェクトの一覧。

Type

利用可能なバインディングメソッドの一覧。デフォルトの Pod ネットワークについては、masquerade が唯一の推奨されるバインディングメソッドになります。セカンダリーネットワークの場合は、bridge バインディングメソッドを使用します。masquerade メソッドは、デフォルト以外のネットワークではサポートされません。

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
Copy to Clipboard Toggle word wrap
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
Copy to Clipboard Toggle word wrap

7.14.1.4. 仮想マシンからのサービスの作成

仮想マシンを公開するために Service オブジェクトを最初に作成し、実行中の仮想マシンからサービスを作成します。

ClusterIP サービスタイプは、クラスター内で仮想マシンを内部に公開します。NodePort または LoadBalancer サービスタイプは、クラスター外から仮想マシンを外部に公開します。

この手順では、type: ClusterIPService オブジェクトを仮想マシンバックエンドサービスとして作成し、これに接続し、公開する方法についての例を示します。

注記

ClusterIP は、サービスの type が指定されていない場合のデフォルトサービスの type です。

手順

  1. 以下のように仮想マシンの YAML を編集します。

    apiVersion: kubevirt.io/v1alpha3
    kind: VirtualMachine
    metadata:
      name: vm-ephemeral
      namespace: example-namespace
    spec:
      running: false
      template:
        metadata:
          labels:
            special: key 
    1
    
        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
    Copy to Clipboard Toggle word wrap
    1
    ラベル special: keyspec.template.metadata.labels セクションに追加します。
    注記

    仮想マシンのラベルは Pod に渡されます。VirtualMachine のラベル (例: special: key) は、この手順の後で作成する Service YAML selector 属性のラベルに一致する必要があります。

  2. 仮想マシン YAML を保存して変更を適用します。
  3. Service YAML を編集し、Service オブジェクトを作成し、公開するために必要な設定を行います。

    apiVersion: v1
    kind: Service
    metadata:
      name: vmservice 
    1
    
      namespace: example-namespace 
    2
    
    spec:
      ports:
      - port: 27017
        protocol: TCP
        targetPort: 22 
    3
    
      selector:
        special: key 
    4
    
      type: ClusterIP 
    5
    Copy to Clipboard Toggle word wrap
    1
    作成および公開するサービスの name を指定します。
    2
    仮想マシン YAML に指定する namespace に対応する Service YAML の metadata セクションの namespace を指定します。
    3
    targetPort: 22 を追加し、SSH ポート 22 にサービスを公開します。
    4
    Service YAML の spec セクションで、special: keyselector 属性に追加します。これは、仮想マシン YAML 設定ファイルに追加した labels に対応します。
    5
    Service YAML の spec セクションで、ClusterIP サービスの type: ClusterIP を追加します。NodePortLoadBalancer などのクラスター外にある他のタイプのサービスを作成し、公開するには、type: ClusterIPtype: NodePort または type: LoadBalancer に随時置き換えます。
  4. Service YAML を保存し、サービス設定を保管します。
  5. ClusterIP サービスを作成します。

    $ oc create -f <service_name>.yaml
    Copy to Clipboard Toggle word wrap
  6. 仮想マシンを起動します。仮想マシンがすでに実行中の場合は、これを再起動します。
  7. Service オブジェクトをクエリーし、これが利用可能であり、ClusterIP タイプで設定されていることを確認します。

    検証

    • oc get service コマンドを実行し、仮想マシンで参照する namespace および Service YAML ファイルを指定します。

      $ oc get service -n example-namespace
      Copy to Clipboard Toggle word wrap

      出力例

      NAME        TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)     AGE
      vmservice   ClusterIP   172.30.3.149   <none>        27017/TCP   2m
      Copy to Clipboard Toggle word wrap

      • 出力で示されているように、vmservice が実行されています。
      • TYPE は、Service YAML で指定したように ClusterIP として表示されます。
  8. サービスをサポートするために使用する仮想マシンへの接続を確立します。別の仮想マシンなど、クラスター内のオブジェクトから接続します。

    1. 以下のように仮想マシンの 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 --stdin
      Copy to Clipboard Toggle word wrap
    2. oc create コマンドを実行して 2 番目の仮想マシンを作成します。ここで、file.yaml は仮想マシン YAML の名前になります。

      $ oc create -f <file.yaml>
      Copy to Clipboard Toggle word wrap
    3. 仮想マシンを起動します。
    4. 以下の virtctl コマンドを実行して仮想マシンに接続します。

      $ virtctl -n example-namespace console <new-vm-name>
      Copy to Clipboard Toggle word wrap
      注記

      サービスタイプ LoadBalancer の場合、vinagre クライアントを使用し、パブリック IP およびポートを使用して仮想マシンに接続します。外部ポートは、サービスタイプ LoadBalancer を使用する場合に動的に割り当てられます。

    5. ssh コマンドを実行して接続を認証します。ここで、172.30.3.149 はサービスの ClusterIP であり、fedora は仮想マシンのユーザー名です。

      $ ssh fedora@172.30.3.149 -p 27017
      Copy to Clipboard Toggle word wrap

      検証

      • 公開するサービスをサポートする仮想マシンのコマンドプロンプトが表示されます。実行中の仮想マシンがサポートするサービスの準備ができました。

関連情報

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat