10.8. 访问虚拟机控制台
OpenShift Virtualization 提供不同的虚拟机控制台,您可使用这些控制台来完成不同的产品任务。您可以使用 CLI 命令通过 OpenShift Container Platform Web 控制台和访问这些控制台。
目前不支持运行到单个虚拟机的并发 VNC 连接。
10.8.1. 在 OpenShift Container Platform web 控制台中访问虚拟机控制台
您可以使用 OpenShift Container Platform web 控制台中的串口控制台或 VNC 控制台连接至虚拟机。
您可以使用 OpenShift Container Platform Web 控制台中的 desktop viewer 控制台(使用 RDP(远程桌面协议)连接到 Windows 虚拟机。
10.8.1.1. 连接至串行控制台
从 web 控制台的 VirtualMachine 详情页中的 Console 选项卡连接至正在运行的虚拟机的串行控制台。
流程
-
在 OpenShift Container Platform 控制台中,从侧边菜单中点 Virtualization
VirtualMachines。 - 选择虚拟机以打开 VirtualMachine 详情页面。
- 点击 Console 选项卡。默认会打开 VNC 控制台。
- 点 Disconnect 以确保一次只打开一个控制台会话。否则,VNC 控制台会话会在后台保持活跃。
- 点击 VNC Console 下拉菜单并选择 Serial Console。
- 点 Disconnect 结束控制台会话。
- 可选:点 Open Console in New Window 在一个单独的窗口中打开串口控制台。
10.8.1.2. 连接至 VNC 控制台
从 web 控制台的 VirtualMachine 详情页中的 Console 选项卡连接至正在运行的虚拟机的 VNC 控制台。
流程
-
在 OpenShift Container Platform 控制台中,从侧边菜单中点 Virtualization
VirtualMachines。 - 选择虚拟机以打开 VirtualMachine 详情页面。
- 点击 Console 选项卡。默认会打开 VNC 控制台。
- 可选:点 Open Console in New Window 在一个单独的窗口中打开 VNC 控制台。
- 可选:点 Send Key 将密钥组合发送到虚拟机。
- 点控制台窗口外,然后点 Disconnect 结束会话。
10.8.1.3. 通过 RDP 连接至 Windows 虚拟机
Desktop viewer 控制台利用远程桌面协议 (RDP),为连接至 Windows 虚拟机提供更好的控制台体验。
要使用 RDP 连接至 Windows 虚拟机,请从 web 控制台上 Virtual Machine Details 屏幕中的 Consoles 选项卡下载虚拟机的 console.rdp
文件,并将其提供给您首选的 RDP 客户端。
先决条件
-
正在运行的 Windows 虚拟机装有 QEMU 客户机代理。VirtIO 驱动程序中包含
qemu-guest-agent
。 - 与 Windows 虚拟机处于相同网络的机器上装有 RDP 客户端。
流程
-
在 OpenShift Container Platform 控制台中,从侧边菜单中点 Virtualization
VirtualMachines。 - 点 Windows 虚拟机打开 VirtualMachine 详情页。
- 点击 Console 选项卡。
- 从控制台列表中,选择 Desktop viewer。
-
点击 Launch Remote Desktop 下载
console.rdp
文件。 -
参考您首选的 RDP 客户端中的
console.rdp
文件,以连接到 Windows 虚拟机。
10.8.1.4. 在虚拟机间切换显示
如果您的 Windows 虚拟机附加了 vGPU,您可以使用 web 控制台在默认显示和 vGPU 显示间切换。
先决条件
-
介质设备在
HyperConverged
自定义资源中配置,并分配给虚拟机。 - 虚拟机正在运行。
流程
-
在 OpenShift Container Platform 控制台中点 Virtualization
VirtualMachines - 选择 Windows 虚拟机以打开 Overview 屏幕。
- 点击 Console 选项卡。
- 从控制台列表中,选择 VNC 控制台。
从 Send Key 列表选择适当的组合:
-
要访问默认虚拟机显示,请选择
Ctl + Alt+ 1
。 -
要访问 vGPU 显示,请选择
Ctl + Alt + 2
。
-
要访问默认虚拟机显示,请选择
其他资源
10.8.1.5. 使用 Web 控制台复制 SSH 命令
复制命令,以通过 SSH 连接到虚拟机 (VM) 终端。
流程
-
在 OpenShift Container Platform 控制台中,从侧边菜单中点 Virtualization
VirtualMachines。 - 点虚拟机的 Options 菜单 ,然后选择 Copy SSH 命令。
- 将其粘贴到终端中以访问虚拟机。
10.8.2. 使用 CLI 命令访问虚拟机控制台
10.8.2.1. 使用 virtctl 通过 SSH 访问虚拟机
您可使用 virtctl ssh
命令,使用本地 SSH 客户端将 SSH 流量转发到虚拟机 (VM)。如果您之前使用虚拟机配置了 SSH 密钥身份验证,请跳至步骤 2,因为不需要第 1 步。
control plane 上的高 SSH 流量可能会减慢 API 服务器的速度。如果您定期需要大量连接,请使用专用的 Kubernetes Service
对象来访问虚拟机。
先决条件
-
已安装 OpenShift CLI(
oc
)。 -
已安装
virtctl
客户端。 - 您要访问的虚拟机正在运行。
- 您与虚拟机位于同一个项目中。
流程
配置 SSH 密钥身份验证:
使用
ssh-keygen
命令生成 SSH 公钥对:$ ssh-keygen -f <key_file> 1
- 1
- 指定要存储密钥的文件。
创建一个 SSH 身份验证 secret,其中包含用于访问虚拟机的 SSH 公钥:
$ oc create secret generic my-pub-key --from-file=key1=<key_file>.pub
在
VirtualMachine
清单中添加对 secret 的引用。例如:apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: testvm spec: running: true template: spec: accessCredentials: - sshPublicKey: source: secret: secretName: my-pub-key 1 propagationMethod: configDrive: {} 2 # ...
- 重启虚拟机以应用您的更改。
通过 SSH 连接到虚拟机:
运行以下命令通过 SSH 访问虚拟机:
$ virtctl ssh -i <key_file> <vm_username>@<vm_name>
可选: 要安全地向虚拟机或虚拟机传输文件,请使用以下命令:
将文件从机器复制到虚拟机
$ virtctl scp -i <key_file> <filename> <vm_username>@<vm_name>:
将文件从虚拟机复制到您的机器中
$ virtctl scp -i <key_file> <vm_username@<vm_name>:<filename> .
其他资源
10.8.2.2. 使用 OpenSSH 和 virtctl port-forward
您可以使用本地 OpenSSH 客户端和 virtctl port-forward
命令连接到正在运行的虚拟机 (VM)。您可以将此方法与 Ansible 配合使用,以自动配置虚拟机。
对于低流量应用程序,建议使用这个方法,因为端口转发流量通过 control plane 发送。对于 Rsync 或 Remote Desktop 协议等高流量应用程序(如 Rsync 或 Remote Desktop 协议)使用这个方法,因为它对 API 服务器造成大量负担。
先决条件
-
已安装
virtctl
客户端。 - 您要访问的虚拟机正在运行。
-
安装
virtctl
工具的环境具有访问虚拟机所需的集群权限。例如,运行oc login
或设置了KUBECONFIG
环境变量。
流程
在客户端机器上的
~/.ssh/config
文件中添加以下文本:Host vm/* ProxyCommand virtctl port-forward --stdio=true %h %p
运行以下命令来连接到虚拟机:
$ ssh <user>@vm/<vm_name>.<namespace>
10.8.2.3. 访问虚拟机实例的串行控制台
virtctl console
命令可打开特定虚拟机实例的串行控制台。
先决条件
-
必须安装
virt-viewer
软件包。 - 您要访问的虚拟机实例必须正在运行。
流程
使用
virtctl
连接至串行控制台:$ virtctl console <VMI>
10.8.2.4. 使用 VNC 访问虚拟机实例的图形控制台
virtctl
客户端实用程序可使用 remote-viewer
功能打开正在运行的虚拟机实例的图形控制台。该功能包含在 virt-viewer
软件包中。
先决条件
-
必须安装
virt-viewer
软件包。 - 您要访问的虚拟机实例必须正在运行。
如果要通过 SSH 在远程机器上使用 virtctl
,您必须将 X 会话转发至您的机器。
流程
使用
virtctl
实用程序连接至图形界面:$ virtctl vnc <VMI>
如果命令失败,请尝试使用
-v
标志来收集故障排除信息:$ virtctl vnc <VMI> -v 4
10.8.2.5. 通过 RDP 控制台连接至 Windows 虚拟机
使用本地远程桌面协议 (RDP) 客户端创建 Kubernetes Service
对象以连接到 Windows 虚拟机(VM)。
先决条件
-
正在运行的 Windows 虚拟机装有 QEMU 客户机代理。VirtIO 驱动程序中包含
qemu-guest-agent
对象。 - 在本地机器上安装了 RDP 客户端。
流程
编辑
VirtualMachine
清单,为创建服务添加标签:apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: vm-ephemeral namespace: example-namespace spec: running: false template: metadata: labels: special: key 1 # ...
- 1
- 在
spec.template.metadata.labels
部分添加标签special: key
。
注意虚拟机上的标签会传递到 pod。
special: key
标签必须与Service
清单的spec.selector
属性中的标签匹配。-
保存
VirtualMachine
清单文件以应用更改。 创建
Service
清单以公开虚拟机:apiVersion: v1 kind: Service metadata: name: rdpservice 1 namespace: example-namespace 2 spec: ports: - targetPort: 3389 3 protocol: TCP selector: special: key 4 type: NodePort 5 # ...
-
保存
Service
清单文件。 运行以下命令来创建服务:
$ oc create -f <service_name>.yaml
- 启动虚拟机。如果虚拟机已在运行,重启它。
查询
Service
对象以验证它是否可用:$ oc get service -n example-namespace
NodePort
服务的输出示例NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE rdpservice NodePort 172.30.232.73 <none> 3389:30000/TCP 5m
运行以下命令来获取节点的 IP 地址:
$ oc get node <node_name> -o wide
输出示例
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP node01 Ready worker 6d22h v1.24.0 192.168.55.101 <none>
- 在首选的 RDP 客户端中指定节点 IP 地址和分配的端口。
- 输入用户名和密码以连接到 Windows 虚拟机。