8.7. 访问虚拟机控制台
OpenShift Virtualization 提供不同的虚拟机控制台,您可使用这些控制台来完成不同的产品任务。您可以使用 CLI 命令通过 OpenShift Container Platform Web 控制台和访问这些控制台。
8.7.1. 在 OpenShift Container Platform web 控制台中访问虚拟机控制台
您可以使用 OpenShift Container Platform web 控制台中的串口控制台或 VNC 控制台连接至虚拟机。
您可以使用 OpenShift Container Platform Web 控制台中的 desktop viewer 控制台(使用 RDP(远程桌面协议)连接到 Windows 虚拟机。
8.7.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 在一个单独的窗口中打开串口控制台。
8.7.1.2. 连接至 VNC 控制台
从 web 控制台的 VirtualMachine 详情页中的 Console 选项卡连接至正在运行的虚拟机的 VNC 控制台。
流程
-
在 OpenShift Container Platform 控制台中,从侧边菜单中点 Virtualization
VirtualMachines。 - 选择虚拟机以打开 VirtualMachine 详情页面。
- 点击 Console 选项卡。默认会打开 VNC 控制台。
- 可选:点 Open Console in New Window 在一个单独的窗口中打开 VNC 控制台。
- 可选:点 Send Key 将密钥组合发送到虚拟机。
- 点控制台窗口外,然后点 Disconnect 结束会话。
8.7.1.3. 通过 RDP 连接至 Windows 虚拟机
桌面查看器控制台利用远程桌面协议 (RDP),为连接至 Windows 虚拟机提供更好的控制台体验。
要使用 RDP 连接至 Windows 虚拟机,请从 web 控制台上 Virtual Machine Details 屏幕中的 Consoles 选项卡下载虚拟机的 console.rdp
文件,并将其提供给您首选的 RDP 客户端。
先决条件
-
正在运行的 Windows 虚拟机装有 QEMU 客户机代理。VirtIO 驱动程序中包含
qemu-guest-agent
。 - 第 2 层 vNIC 附加到虚拟机。
- 与 Windows 虚拟机处于相同网络的机器上装有 RDP 客户端。
流程
-
在 OpenShift Container Platform 控制台中,从侧边菜单中点 Virtualization
VirtualMachines。 - 点 Windows 虚拟机打开 VirtualMachine 详情页。
- 点击 Console 选项卡。
- 在 Console 列表中,选择 Desktop Viewer。
- 在 Network Interface 列表中,选择第 2 层 vNIC。
-
点击 Launch Remote Desktop 下载
console.rdp
文件。 打开 RDP 客户端并引用
console.rdp
文件。例如,使用 Remmina:$ remmina --connect /path/to/console.rdp
- 输入 Administrator 用户名和密码以连接至 Windows 虚拟机。
8.7.2. 使用 CLI 命令访问虚拟机控制台
8.7.2.1. 通过 SSH 访问虚拟机实例
在虚拟机上公开 22 端口后,就可以使用 SSH 访问虚拟机(VM)。
virtctl expose
命令可将虚拟机实例(VMI)端口转发到节点端口,并创建一个服务以启用对它的访问。以下示例创建 fedora-vm-ssh
服务,它将集群节点的特定端口流量转发到 <fedora-vm>
虚拟机的端口 22。
先决条件
- 您必须与 VMI 在同一个项目中。
-
您要访问的 VMI 必须使用
masquerade
绑定方法连接到默认 pod 网络。 - 您要访问的 VMI 必须正在运行。
-
安装 OpenShift CLI(
oc
)。
流程
运行以下命令来创建
fedora-vm-ssh
服务:$ virtctl expose vm <fedora-vm> --port=22 --name=fedora-vm-ssh --type=NodePort 1
- 1
<fedora-vm>
是您在其上运行fedora-vm-ssh
服务的虚拟机的名称。
检查服务,找出服务获取的端口:
$ oc get svc
输出示例
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE fedora-vm-ssh NodePort 127.0.0.1 <none> 22:32551/TCP 6s
在本例中,服务获取了
32551
端口。通过 SSH 登录 VMI。使用任何集群节点的
ipAddress
,以及在上一步中找到的端口:$ ssh username@<node_IP_address> -p 32551
8.7.2.2. 使用 YAML 配置通过 SSH 访问虚拟机
您可以启用与虚拟机的 SSH 连接,而无需运行 virtctl expose
命令。当配置并应用虚拟机的 YAML 文件和服务的 YAML 文件时,服务会将 SSH 流量转发到虚拟机。
以下示例显示了虚拟机的 YAML 文件和服务 YAML 文件的配置。
先决条件
-
安装 OpenShift CLI (
oc
) 。 -
使用
oc create namespace
命令并指定命名空间的名称,为虚拟机的 YAML 文件创建一个命名空间。
流程
在虚拟机的 YAML 文件中,添加标签和一个值来公开 SSH 连接的服务。为接口启用
伪装(masquerade)
功能:VirtualMachine
定义示例apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: namespace: ssh-ns 1 name: vm-ssh spec: running: false template: metadata: labels: kubevirt.io/vm: vm-ssh special: vm-ssh 2 spec: domain: devices: disks: - disk: bus: virtio name: containerdisk - disk: bus: virtio name: cloudinitdisk interfaces: - masquerade: {} 3 name: testmasquerade 4 rng: {} machine: type: "" resources: requests: memory: 1024M networks: - name: testmasquerade pod: {} volumes: - name: containerdisk containerDisk: image: kubevirt/fedora-cloud-container-disk-demo - name: cloudinitdisk cloudInitNoCloud: userData: | #cloud-config user: fedora password: fedora chpasswd: {expire: False} # ...
创建虚拟机:
$ oc create -f <path_for_the_VM_YAML_file>
启动虚拟机:
$ virtctl start vm-ssh
在服务的 YAML 文件中,指定服务名称、端口号和目标端口。
Service
定义示例apiVersion: v1 kind: Service metadata: name: svc-ssh 1 namespace: ssh-ns 2 spec: ports: - targetPort: 22 3 protocol: TCP port: 27017 selector: special: vm-ssh 4 type: NodePort # ...
创建服务:
$ oc create -f <path_for_the_service_YAML_file>
验证虚拟机是否正在运行:
$ oc get vmi
输出示例
NAME AGE PHASE IP NODENAME vm-ssh 6s Running 10.244.196.152 node01
检查服务,找出服务获取的端口:
$ oc get svc
输出示例
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE svc-ssh NodePort 10.106.236.208 <none> 27017:30093/TCP 22s
在本例中,服务获取了端口号 30093。
运行以下命令来获取节点的 IP 地址:
$ oc get node <node_name> -o wide
输出示例
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP node01 Ready worker 6d22h v1.23.0 192.168.55.101 <none>
通过 SSH 登录虚拟机运行的节点的 IP 地址和端口号。使用
oc get svc
命令显示的端口号,以及oc get node
命令显示的节点 IP 地址。以下示例显示了带有用户名、节点 IP 地址和端口号的ssh
命令:$ ssh fedora@192.168.55.101 -p 30093
8.7.2.3. 访问虚拟机实例的串行控制台
virtctl console
命令可打开特定虚拟机实例的串行控制台。
先决条件
-
必须安装
virt-viewer
软件包。 - 您要访问的虚拟机实例必须正在运行。
流程
使用
virtctl
连接至串行控制台:$ virtctl console <VMI>
8.7.2.4. 使用 VNC 访问虚拟机实例的图形控制台
virtctl
客户端实用程序可使用 remote-viewer
功能打开正在运行的虚拟机实例的图形控制台。该功能包含在 virt-viewer
软件包中。
先决条件
-
必须安装
virt-viewer
软件包。 - 您要访问的虚拟机实例必须正在运行。
如果要通过 SSH 在远程机器上使用 virtctl
,您必须将 X 会话转发至您的机器。
流程
使用
virtctl
实用程序连接至图形界面:$ virtctl vnc <VMI>
如果命令失败,请尝试使用
-v
标志来收集故障排除信息:$ virtctl vnc <VMI> -v 4
8.7.2.5. 通过 RDP 控制台连接至 Windows 虚拟机
远程桌面协议 (RDP) 为连接至 Windows 虚拟机提供更好的控制台体验。
要通过 RDP 连接至 Windows 虚拟机,请为 RDP 客户端指定附加的 L2 vNIC 的 IP 地址。
先决条件
-
正在运行的 Windows 虚拟机装有 QEMU 客户机代理。VirtIO 驱动程序中包含
qemu-guest-agent
。 - 附加到虚拟机的第 2 层 vNIC。
- 与 Windows 虚拟机处于相同网络的机器上装有 RDP 客户端。
流程
以具有访问令牌的用户身份通过
oc
CLI 工具登录 OpenShift Virtualization 集群。$ oc login -u <user> https://<cluster.example.com>:8443
使用
oc describe vmi
显示正在运行的 Windows 虚拟机的配置。$ oc describe vmi <windows-vmi-name>
输出示例
... spec: networks: - name: default pod: {} - multus: networkName: cnv-bridge name: bridge-net ... status: interfaces: - interfaceName: eth0 ipAddress: 198.51.100.0/24 ipAddresses: 198.51.100.0/24 mac: a0:36:9f:0f:b1:70 name: default - interfaceName: eth1 ipAddress: 192.0.2.0/24 ipAddresses: 192.0.2.0/24 2001:db8::/32 mac: 00:17:a4:77:77:25 name: bridge-net ...
-
找出并复制第 2 层网络接口的 IP 地址。在以上示例中是
192.0.2.0
,如果您首选 IPv6,则为2001:db8::
。 - 打开 RDP 客户端,并使用上一步中复制的 IP 地址进行连接。
- 输入 Administrator 用户名和密码以连接至 Windows 虚拟机。