更新时间:2025-04-27 GMT+08:00
连接到虚拟机
使用console命令连接到虚拟机
- 如需连接到虚拟机的控制台,执行以下命令:
virtctl console testvm
- 按照提示输入创建虚拟机时指定的用户凭据,即可进入虚拟机控制台。结束使用后,可以通过以下命令退出控制台:
Ctrl + ]
使用VNC连接虚拟机
华为云集群支持使用remote-viewer(需在客户端安装)从本机连接VNC,或者开启VNC代理供远程连接。
- 如需启动本地VNC viewer:
virtctl vnc testvm
- 如需使用华为云集群提供的VNC代理供远程使用:
virtctl vnc --proxy-only testvm
配置SSH-Key连接虚拟机
在管理虚拟机时,一个常见的操作模式是在虚拟机启动时注入SSH公钥。这使得自动化工具(如Ansible)能够对虚拟机进行配置,同时也为操作员提供了安全且无需密码访问虚拟机的方式。华为云集群提供了多种向虚拟机注入SSH公钥的方法。一般来说,这些方法分为如下两类:
- 静态密钥注入:在虚拟机首次启动时放置密钥。
用户在创建虚拟机时,可以通过cloud-init向虚拟机注入启动脚本,从而实现多种自定义操作。
可以通过以下方法注入密钥:
将公钥存入Kubernetes Secret,虚拟机的访问凭证API能够在启动时静态注入。
- 生成SSH密钥对后,会在键入命令的目录生成私钥和公钥(公钥命名id_rsa.pub)。
- 包含公钥的Secret通过访问凭证API和noCloud传播方法被分配给虚拟机。
- 华为云集群通过使用生成的cloud-init元数据而非用户数据,将密钥注入虚拟机。
- 使用以下命令创建Kubernetes Secret,存储生成的公钥:
kubectl create secret generic my-pub-key --from-file=key1=id_rsa.pub
- 使用以下命令创建一个虚拟机:
kubectl create -f - <<EOF apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: testvm spec: runStrategy: Always template: spec: domain: devices: disks: - disk: bus: virtio name: containerdisk - disk: bus: virtio name: cloudinitdisk rng: {} resources: requests: memory: 1024M terminationGracePeriodSeconds: 0 accessCredentials: - sshPublicKey: source: secret: secretName: my-pub-key propagationMethod: noCloud: {} volumes: - containerDisk: image: quay.io/containerdisks/fedora:latest name: containerdisk - cloudInitNoCloud: userData: |- #cloud-config password: fedora chpasswd: { expire: False } name: cloudinitdisk EOF
- 稍等片刻,使用以下命令查看虚拟机实例的 IP:
kubectl get vmis
输出示例:NAME AGE PHASE IP NODENAME READY testvm 12m Running 172.16.51.103 192.168.88.99 True
- 使用示例中Fedora镜像的默认用户名fedora进行SSH登录,免密进入创建的虚拟机终端:
ssh fedora@172.16.51.103
- 动态密钥注入:允许在启动和运行时动态更新密钥。
- 无法向正在运行的虚拟机附加新密钥:若需添加新的密钥,必须重启虚拟机;
- 依赖qemu-guest-agent:此功能要求虚拟机内部已安装qemu-guest-agent;
- 文件所有权说明:当使用qemuGuestAgent传播方法时,/home/$USER/.ssh/authorized_keys文件的所有权将归属于guest agent。任何非通过guest agent进行的文件修改将会丢失。
华为云集群支持通过访问凭证API动态向虚拟机注入密钥。通过qemuGuestAgent传播方法,配置的Kubernetes Secret会在虚拟机启动时附加到该虚拟机。这使得用户可以在运行时通过更新附加的密钥动态注入公钥。
- 与上面静态密钥注入的例子不同之处,主要是将accessCredentials部分修改为:
accessCredentials: - sshPublicKey: source: secret: secretName: my-pub-key propagationMethod: qemuGuestAgent: users: - fedora
- cloudInitNoCloud部分需要添加关闭SELinux,使得qemu-guest-agent可以修改。
- cloudInitNoCloud: userData: |- #cloud-config password: fedora chpasswd: { expire: False } # Disable SELinux for now, so qemu-guest-agent can write the authorized_keys file # The selinux-policy is too restrictive currently, see open bugs: # - https://bugzilla.redhat.com/show_bug.cgi?id=1917024 # - https://bugzilla.redhat.com/show_bug.cgi?id=2028762 # - https://bugzilla.redhat.com/show_bug.cgi?id=2057310 bootcmd: - setenforce 0
父主题: 虚拟机容器混合管理