7.17. 仮想マシンのネットワーク
7.17.1. デフォルトの Pod ネットワーク用の仮想マシンの設定
masquerade
バインディングモードを使用するようにネットワークインターフェイスを設定することで、仮想マシンをデフォルトの内部 Pod ネットワークに接続できます。
KubeMacPool コンポーネントは、指定の namespace に仮想マシン NIC の MAC アドレスプールサービスを提供します。これはデフォルトで有効にされません。KubeMacPool ラベルを namespace に適用して、その namespace で MAC アドレスプールを有効にします。
7.17.1.1. コマンドラインでのマスカレードモードの設定
マスカレードモードを使用し、仮想マシンの送信トラフィックを Pod IP アドレスの背後で非表示にすることができます。マスカレードモードは、ネットワークアドレス変換 (NAT) を使用して仮想マシンを Linux ブリッジ経由で Pod ネットワークバックエンドに接続します。
仮想マシンの設定ファイルを編集して、マスカレードモードを有効にし、トラフィックが仮想マシンに到達できるようにします。
前提条件
- 仮想マシンは、IPv4 アドレスを取得するために DHCP を使用できるように設定される必要がある。以下の例では、DHCP を使用するように設定されます。
手順
仮想マシン設定ファイルの
interfaces
仕様を編集します。kind: VirtualMachine spec: domain: devices: interfaces: - name: default masquerade: {} 1 ports: - port: 80 2 networks: - name: default pod: {}
注記ポート 49152 および 49153 は libvirt プラットフォームで使用するために予約され、これらのポートへの他のすべての受信トラフィックは破棄されます。
仮想マシンを作成します。
$ oc create -f <vm-name>.yaml
7.17.1.2. 仮想マシンからのサービスの作成
仮想マシンを公開するために 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: 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
- 1
- ラベル
special: key
をspec.template.metadata.labels
セクションに追加します。
注記仮想マシンのラベルは Pod に渡されます。
VirtualMachine
設定のラベル (例:special: key
) は、この手順の後で作成するService
YAMLselector
属性のラベルに一致する必要があります。- 仮想マシン YAML を保存して変更を適用します。
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
- 1
- 作成および公開するサービスの
name
を指定します。 - 2
- 仮想マシン YAML に指定する
namespace
に対応するService
YAML のmetadata
セクションのnamespace
を指定します。 - 3
targetPort: 22
を追加し、SSH ポート22
にサービスを公開します。- 4
Service
YAML のspec
セクションで、special: key
をselector
属性に追加します。これは、仮想マシン YAML 設定ファイルに追加したlabels
に対応します。- 5
Service
YAML のspec
セクションで、ClusterIP サービスのtype: ClusterIP
を追加します。NodePort
やLoadBalancer
などのクラスター外にある他のタイプのサービスを作成し、公開するには、type: ClusterIP
をtype: NodePort
またはtype: LoadBalancer
に随時置き換えます。
-
Service
YAML を保存し、サービス設定を保管します。 ClusterIP
サービスを作成します。$ oc create -f <service_name>.yaml
- 仮想マシンを起動します。仮想マシンがすでに実行中の場合は、これを再起動します。
Service
オブジェクトをクエリーし、これが利用可能であり、ClusterIP
タイプで設定されていることを確認します。検証
oc get service
コマンドを実行し、仮想マシンで参照するnamespace
およびService
YAML ファイルを指定します。$ 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
は、Service
YAML で指定したように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 --stdin
oc 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
検証
- 公開するサービスをサポートする仮想マシンのコマンドプロンプトが表示されます。実行中の仮想マシンがサポートするサービスの準備ができました。