8.4. 内部 FQDN を使用した仮想マシンへのアクセス
ヘッドレスサービスを使用すると、安定した完全修飾ドメイン名 (FQDN) 上のデフォルトの内部 Pod ネットワークに接続されている仮想マシン (VM) にアクセスできます。
Kubernetes ヘッドレスサービス は、Pod のセットの表現にクラスター IP アドレスを割り当てないサービス形式です。ヘッドレスサービスは、サービスに単一の仮想 IP アドレスを提供する代わりに、サービスに関連付けられた Pod ごとに DNS レコードを作成します。特定の TCP ポートまたは UDP ポートを公開しなくても、FQDN を通じて仮想マシンを公開できます。
OpenShift Container Platform Web コンソールを使用して VM を作成した場合、VirtualMachine details ページの Overview タブの Network タイルにその内部 FQDN が表示されます。VM への接続の詳細は、内部 FQDN を使用した仮想マシンへの接続 を参照してください。
8.4.1. CLI を使用したプロジェクトでのヘッドレスサービスの作成
namespace にヘッドレスサービスを作成するには、サービス YAML 定義に clusterIP: None
パラメーターを追加します。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。
手順
次の例のように、仮想マシンを公開するための
Service
マニフェストを作成します。apiVersion: v1 kind: Service metadata: name: mysubdomain 1 spec: selector: expose: me 2 clusterIP: None 3 ports: 4 - protocol: TCP port: 1234 targetPort: 1234
-
サービス
マニフェストファイルを保存します。 以下のコマンドを実行してサービスを作成します。
$ oc create -f headless_service.yaml
8.4.2. CLI を使用した仮想マシンのヘッドレスサービスへのマッピング
内部の完全修飾ドメイン名 (FQDN) を使用してクラスター内から仮想マシン (VM) に接続するには、まず仮想マシンをヘッドレスサービスにマップする必要があります。仮想マシン設定ファイルに spec.hostname
および spec.subdomain
パラメーターを設定します。
サブドメインと名前が一致するヘッドレスサービスが存在する場合、<vm.spec.hostname>.<vm.spec.subdomain>.<vm.metadata.namespace>.svc.cluster.local
の形式で仮想マシンに対して一意の DNS A レコードが作成されます。
手順
次のコマンドを実行して、
VirtualMachine
マニフェストを編集し、サービスセレクターラベルとサブドメインを追加します。$ oc edit vm <vm_name>
VirtualMachine
マニフェストファイルの例apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: vm-fedora spec: template: metadata: labels: expose: me 1 spec: hostname: "myvm" 2 subdomain: "mysubdomain" 3 # ...
- 変更を保存し、エディターを終了します。
- 仮想マシンを再起動して変更を適用します。
8.4.3. 内部 FQDN を使用した仮想マシンへの接続
内部の完全修飾ドメイン名 (FQDN) を使用して仮想マシン (VM) に接続できます。
前提条件
-
virtctl
ツールがインストールされている。 -
Web コンソールから仮想マシンの内部 FQDN を特定するか、仮想マシンをヘッドレスサービスにマッピングしている。内部 FQDN の形式は
<vm.spec.hostname>.<vm.spec.subdomain>.<vm.metadata.namespace>.svc.cluster.local
です。
手順
次のコマンドを入力して仮想マシンコンソールに接続します。
$ virtctl console vm-fedora
要求された FQDN を使用して仮想マシンに接続するには、次のコマンドを実行します。
$ ping myvm.mysubdomain.<namespace>.svc.cluster.local
出力例
PING myvm.mysubdomain.default.svc.cluster.local (10.244.0.57) 56(84) bytes of data. 64 bytes from myvm.mysubdomain.default.svc.cluster.local (10.244.0.57): icmp_seq=1 ttl=64 time=0.029 ms
上記の例では、
myvm.mysubdomain.default.svc.cluster.local
の DNS エントリーは10.244.0.57
を指しています。これは、現在仮想マシンに割り当てられているクラスター IP アドレスです。