我正在使用virt-install
(见下文)来创建访客。一切似乎都很好,直到它抱怨 SPICE TLS 端口的自动分配。
这是我正在运行的内容和完整输出:
# sudo virt-install --name vmname --ram 1024 --os-type=linux --os-variant=ubuntutrusty --disk path=/data/vm/vmname_sda.qcow2,bus=virtio,size=10,sparse=false --noautoconsole --console pty,target_type=virtio --accelerate --hvm --network=network:default --graphics spice,port=20001,listen=127.0.0.1
Starting install...
Retrieving file MANIFEST... | 2.1 kB 00:00 ...
Retrieving file MANIFEST... | 2.1 kB 00:00 ...
Retrieving file linux... | 11 MB 00:00 ...
Retrieving file initrd.gz... | 41 MB 00:00 ...
ERROR unsupported configuration: Auto allocation of spice TLS port requested but spice TLS is disabled in qemu.conf
Domain installation does not appear to have been successful.
If it was, you can restart your domain by running:
virsh --connect qemu:///system start vmname
otherwise, please restart your installation.
错误是:
错误不支持的配置:请求自动分配 SPICE TLS 端口,但在 qemu.conf 中禁用 SPICE TLS
事实上,/etc/libvirt/qemu.conf
我有:
spice_tls = 0
(并且是故意的)。
那么我如何使用 SPICE 图形协议创建 KVM 来宾,但禁用了 TLS?
我怀疑它是否相关,但我想禁用 TLS 的原因是因为我已经通过 SSH 通过隧道连接到 SPICE。不需要额外的加密层。
主机系统是Ubuntu 14.04.1。软件包版本有:
- 虚拟机:0.600.4-3ubuntu2
- qemu-kvm:2.0.0+dfsg-2ubuntu1.2
(就目前而言都是最新apt-get
的)
答案1
好吧,我自己解决了这个问题。在选项中:
--graphics spice,port=20001,listen=127.0.0.1
删除port
参数,使其变为:
--graphics spice,listen=127.0.0.1
你需要配置元素<graphics />
然后在libvirt
XML 配置文件中。我的调用virt-install
给了我这个:
<graphics type='spice' autoport='yes' listen='127.0.0.1'>
<listen type='address' address='127.0.0.1'/>
</graphics>
有一点需要注意。我完成了安装,同时 SPICE 仍连接到默认的自动连接端口(在我的例子中为 5900)。如果您在完成安装之前关闭来宾,则启动的整个过程virt-install
将被中断。
为了更改它,应该关闭来宾并将 XML 编辑为如下所示,使用virsh edit vmname
(其中vmname
应替换为您的名字):
<graphics type='spice' autoport='no' port='20001' listen='127.0.0.1'>
<listen type='address' address='127.0.0.1'/>
</graphics>
“使用中的端口”冲突的可能解决方法。使用 127.0.0.0/24 中 127.0.0.1 以外的任何本地网络地址(例如 127.0.0.2 等)进行监听。
笔记:如果有人能提出更好的(即实际的)解决方案,我会接受其他答案。这篇文章主要是针对可能遇到同样问题的其他人的。
答案2
当方便的参数virt-install
失败时,可以使用以下命令手动制作 xmlX路径句法。
--graphics "spice,port=20001,defaultMode=insecure,autoport=no"
对我来说,用这五个参数对替换是一个成功的解决方法:
--xml 'xpath.delete=./devices/graphics' \
--xml './devices/graphics/@defaultMode=insecure' \
--xml './devices/graphics/@autoport=no' \
--xml './devices/graphics/@type=spice' \
--xml "./devices/graphics/@port=20001"
对生成的 xml 感到好奇的人可以添加该--print-xml
选项。
答案3
解决方案是告诉 kvm/virt 默认使用不安全的连接。
<graphics type='spice' autoport='yes' listen='0.0.0.0' defaultMode='insecure'>
<listen type='address' address='0.0.0.0'/>
</graphics>
设置defaultMode
为insecure
,你可以使用even autoport='yes'
,一切都很好。
一个提示,当您搜索端口时,您必须使用domdisplay
:
[root@kvm repo]# virsh domdisplay --domain openshift1
spice://localhost:5900
我不知道这是一个错误还是正确的行为,但virsh domdisplay --domain openshift1
显示的输出localhost
而不是0.0.0.0
.但您可以使用 server-ip/dns 从外部连接到您的来宾虚拟机。确保防火墙允许您连接到这些端口,甚至 kvm/virt 也会监听,0.0.0.0
如上所示。
答案4
上面用户“sampi”的答案工作得很好,但是要远程连接,我必须添加这一行
--xml './devices/graphics/@listen=0.0.0.0' \
所以它变成了
--xml 'xpath.delete=./devices/graphics' \
--xml './devices/graphics/@defaultMode=insecure' \
--xml './devices/graphics/@listen=0.0.0.0' \
--xml './devices/graphics/@autoport=no' \
--xml './devices/graphics/@type=spice' \
--xml "./devices/graphics/@port=20001"
工作完美,所以现在我使用 Linux 创建一个虚拟机,并使用远程查看器从 Windows 进行连接,非常容易,非常感谢 @sampi :)