9.3. 仮想マシンコンソールに接続する
VNC、シリアル、またはデスクトップビューアーコンソールを使用することで、仮想マシンにネットワーク接続がない場合でも、仮想マシンのコンソールにアクセスしてトラブルシューティングを行うことができます。
9.3.1. VNC コンソールへの接続 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform Web コンソールまたは virtctl コマンドラインツールを使用して、仮想マシンの VNC コンソールに接続できます。
9.3.1.1. Web コンソールを使用した VNC コンソールへの接続 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform Web コンソールを使用して、仮想マシンの VNC コンソールに接続できます。
vGPU が仲介デバイスとして割り当てられている Windows 仮想マシンに接続すると、デフォルトの表示と仮想 GPU 表示を切り替えることができます。
手順
-
Virtualization
VirtualMachines ページで仮想マシンをクリックして、VirtualMachine details ページを開きます。 - Console タブをクリックします。VNC コンソールセッションが自動的に開始します。
オプション: Windows 仮想マシンの仮想 GPU 表示に切り替えるには、Send key リストから Ctl + Alt + 2 を選択します。
- デフォルトの表示に戻すには、Send key リストから Ctl + Alt + 1 を選択します。
- コンソールセッションを終了するには、コンソールペインの外側をクリックし、Disconnect をクリックします。
9.3.1.2. virtctl を使用した VNC コンソールへの接続 リンクのコピーリンクがクリップボードにコピーされました!
virtctl コマンドラインツールを使用して、実行中の仮想マシンの VNC コンソールに接続できます。
SSH 接続経由でリモートマシン上で virtctl vnc コマンドを実行する場合は、-X フラグまたは -Y フラグを指定して ssh コマンドを実行して、X セッションをローカルマシンに転送する必要があります。
前提条件
-
virt-viewerパッケージをインストールする必要があります。
手順
次のコマンドを実行して、コンソールセッションを開始します。
+
$ virtctl vnc <vm_name>
接続に失敗した場合は、次のコマンドを実行してトラブルシューティング情報を収集します。
$ virtctl vnc <vm_name> -v 4
9.3.1.3. VNC コンソールの一時トークンの生成 リンクのコピーリンクがクリップボードにコピーされました!
Kubernetes API が仮想マシン (VM) の VNC にアクセスするための一時的な認証ベアラートークンを生成します。
Kubernetes は、curl コマンドを変更することで、ベアラートークンの代わりにクライアント証明書を使用した認証もサポートします。
前提条件
-
OpenShift Virtualization 4.14 以降および
ssp-operator4.14 以降を搭載した実行中の仮想マシン。 -
OpenShift CLI (
oc) がインストールされている。
手順
HyperConverged (
HCO) カスタムリソース (CR) のdeployVmConsoleProxyフィールド値をtrueに設定します。$ oc patch hyperconverged kubevirt-hyperconverged -n openshift-cnv --type json -p '[{"op": "replace", "path": "/spec/deployVmConsoleProxy", "value": true}]'次のコマンドを入力してトークンを生成します。
$ curl --header "Authorization: Bearer ${TOKEN}" \ "https://api.<cluster_fqdn>/apis/token.kubevirt.io/v1alpha1/namespaces/<namespace>/virtualmachines/<vm_name>/vnc?duration=<duration>"<duration>パラメーターは時間と分で設定でき、最小期間は 10 分です。たとえば、5h30mです。このパラメーターが設定されていない場合、トークンはデフォルトで 10 分間有効です。出力サンプル
{ "token": "eyJhb..." }オプション: 出力で提供されたトークンを使用して変数を作成します。
$ export VNC_TOKEN="<token>"
これで、トークンを使用して、仮想マシンの VNC コンソールにアクセスできるようになります。
検証
次のコマンドを入力してクラスターにログインします。
$ oc login --token ${VNC_TOKEN}virtctlコマンドを使用して、仮想マシンの VNC コンソールへのアクセスをテストします。$ virtctl vnc <vm_name> -n <namespace>
現在、特定のトークンを取り消すことはできません。
トークンを取り消すには、トークンの作成に使用したサービスアカウントを削除する必要があります。ただし、これにより、サービスアカウントを使用して作成された他のすべてのトークンも取り消されます。次のコマンドは注意して使用してください。
$ virtctl delete serviceaccount --namespace "<namespace>" "<vm_name>-vnc-access"
9.3.1.3.1. クラスターロールを使用して VNC コンソールにトークン生成パーミッションを付与する リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、クラスターロールをインストールし、それをユーザーまたはサービスアカウントにバインドして、VNC コンソールのトークンを生成するエンドポイントへのアクセスを許可できます。
手順
クラスターロールをユーザーまたはサービスアカウントにバインドすることを選択します。
クラスターロールをユーザーにバインドするには、次のコマンドを実行します。
$ kubectl create rolebinding "${ROLE_BINDING_NAME}" --clusterrole="token.kubevirt.io:generate" --user="${USER_NAME}"以下のコマンドを実行してクラスターロールをサービスアカウントにバインドします。
$ kubectl create rolebinding "${ROLE_BINDING_NAME}" --clusterrole="token.kubevirt.io:generate" --serviceaccount="${SERVICE_ACCOUNT_NAME}"