libvirt remote

18 阅读4分钟

Libvirt 允许您通过经过身份验证和加密的连接访问在远程计算机上运行的虚拟机管理程序。

image.png

在 libvirt remote 场景中, libvirt 在 api 基本功能至上,还有一个类似远程代理的功能

1. Basic usage  基本用法 

在远程计算机上,libvirtd 通常应该正在运行。看 libvirtd 配置文件部分,了解如何配置 libvirtd。

并非 libvirt 支持的所有虚拟机管理程序都需要运行 libvirtd。如果要连接到 VMware ESX/ESXi 或 GSX 服务器,则不需要 libvirtd。有关详细信息,请参阅 VMware ESX 页面 

要告诉 libvirt 您要访问远程资源,您应该在传给 virConnectOpen 的普通 URI 中提供主机名 (或 virsh -c ...)。

例如,如果您通常使用 qemu:///system 来访问系统范围的 QEMU 守护程序,那么要在名为 compute1.libvirt.org 的远程计算机上访问系统范围的 QEMU 守护程序,您将使用 qemu://compute1.libvirt.org/system。

从 API 的角度来看,除了 URI 的更改外,API 的行为应该相同。

例如,普通调用通过远程连接透明地路由,并且来自远程端的值或错误将返回给您,就像它们发生在本地一样

您可能会注意到一些差异:

  • 可能会生成其他错误,特别是与远程传输本身的故障相关的错误。
  • 远程调用是同步处理的,因此它们将比直接虚拟机管理程序调用慢得多。

2.  传输

  • tls
  • unix
  • ssh
  • ext:扩展方式
  • tcp
  • libssh2
  • libssh

3. libvirtd 配置文件

Libvirtd(远程守护程序)是从名为 /etc/libvirt/libvirtd.conf 中指定,或在命令行中使用 -f filename 或 --config filename 的 -f 文件名

4. 本地连接 vs 远程连接

4.1 本地连接

4.1.1 本地 hypervisor URI

要访问在本地计算机上运行的 Xen 虚拟机管理程序,请使用 URI xen:///system

4.1.2 qemu:///...QEMU 和 KVM URI

要在 libvirt 中使用 QEMU 支持,您必须运行 libvirtd 守护进程(在 0.3.0 之前的版本中名为 libvirt_qemud)。此守护程序的目的是管理 qemu 实例。

libvirtd 守护程序应在计算机引导时由 init 脚本启动。它应该显示为一个进程 libvirtd --daemon,在后台以 root 身份运行,并将代表机器的所有用户处理 qemu 实例(除其他外)。

因此,要连接到守护进程,请使用两种不同的 URI 之一:

  • qemu:///system 连接到系统模式守护程序
  • qemu:///session 连接到会话模式守护程序

4.2 远程 URI

远程 URI 具有一般形式(“[...]”表示可选部分):

driver[+transport]://[username@][hostname][:port]/[path][?extraparameters]

必须提供 transport 或 hostname 才能将其与本地 URI 区分开来。

  • xen+ssh://rjones@towada/system — 使用 ssh 传输和 ssh 用户名 rjones 连接到主机上的远程 Xen 管理程序。

  • xen://towada/system — 使用 TLS 连接到主机 towada 上的远程 Xen 虚拟机管理程序。

  • xen://towada/system?no_verify=1 — 使用 TLS 连接到主机 towada 上的远程 Xen 虚拟机管理程序。不验证服务器的证书。

  • qemu+unix:///system?socket=/opt/libvirt/run/libvirt/libvirt-sock — 通过非标准 Unix 套接字( 在这种情况下,将显式提供 Unix 套接字的完整路径)。

  • 测试+tcp://localhost:5000/默认 — 连接到在 localhost 端口 5000 并使用具有默认设置的测试驱动程序。

  • qemu+libssh2://user@host/system?known_hosts=/home/user/.ssh/known_hosts — 使用带有 libssh2 驱动程序的 ssh 连接连接到远程主机,并且 使用不同的 known_hosts 文件。

  • qemu+libssh://user@host/system?known_hosts=/home/user/.ssh/known_hosts — 使用带有 libssh 驱动程序的 ssh 连接连接到远程主机,并且 使用不同的 known_hosts 文件。

5. 红帽配置参考


# 使用 SSH 传输和 SSH 用户名 `virtuser` 连接到名为 `host2` 的远程 KVM 主机

qemu+ssh://virtuser@host2/

# 使用 TLS 连接到名为 `host2` 的主机上的远程 KVM 虚拟机监控程序。


qemu://host2/

# 使用非标准 UNIX 套接字连接到本地 KVM 虚拟机管理程序。在这种情况下,将显式提供 UNIX 套接字的完整路径。

qemu+unix:///system?socket=/opt/libvirt/run/libvirt/libvirt-sock

 可以看到如果一个宿主机上存在多个 libvirt, 那么通过 sock,也是可以实现远程管理的

参考:

  1. libvirt.org/remote.html…
  2. libvirt.org/uri.html
  3. docs.redhat.com/en/document…