openstack port binding failure (by quqi99)
作者:张华 发表于:2025-09-19
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明
问题
搭建了一个openstack环境(用multipass创建了两个VM来运行bastion和juju controller, 然后用juju manual provider延用multipass的网桥mpqemubr0来创建lxd容器来安装openstack服务), 但是创建虚机时不work, 查了一下是port binding failure. 原因是multipass默认使用了fqdn=.multipass导致了下列初始状态:
openstack compute service list #use juju-2d9f3a-0-lxd-8.multipass
openstack hypervisor list ##use juju-2d9f3a-0-lxd-8.multipass
openstack network agent list #use juju-2d9f3a-0-lxd-8root@juju-2d9f3a-0-lxd-8:~# ovs-vsctl get open . external_ids
{hostname=juju-2d9f3a-0-lxd-8, ovn-bridge-mappings="physnet1:br-data", ovn-cms-options=enable-chassis-as-gw, ovn-encap-ip="10.149.144.80", ovn-encap-type=geneve, ovn-match-northd-version=True, ovn-remote="ssl:10.149.144.185:6642,ssl:10.149.144.197:6642,ssl:10.149.144.94:6642", rundir="/var/run/openvswitch", system-id=juju-2d9f3a-0-lxd-8.multipass}root@juju-2d9f3a-0-lxd-10:~# ovn-sbctl list Chassis |grep -E 'name|external'
external_ids : {datapath-type=system, iface-types="erspan,geneve,gre,internal,ip6erspan,ip6gre,lisp,patch,stt,system,tap,vxlan", is-interconn="false", "neutron:liveness_check_at"="2025-09-19T07:00:04.112572+00:00", "neutron:ovn-metadata-id"="eb59a656-7480-5c92-9cef-4a7599ec1d86", ovn-bridge-mappings="physnet1:br-data", ovn-chassis-mac-mappings="", ovn-cms-options=enable-chassis-as-gw}
hostname : juju-2d9f3a-0-lxd-8
name : juju-2d9f3a-0-lxd-8.multipass
曲折中得到的几个事实
1, 修改nova.conf中的host只能修改’openstack compute service list’中的hostname
juju config nova-compute config-flags="host=juju-2d9f3a-0-lxd-8.multipass"
juju exec --application nova-compute "systemctl restart nova-compute"
2, 修改neutron.conf中的host不能修改’openstack network agent list’, nova.conf与neutron.conf中的host只是修改service name也就是只是和mq打交道的, 它和schedule用的hostname无关.
3, ‘openstack hypervisor list’中的hostname应该是由nova-compute调用libvirt时通过socket.getfqdn()获取的, 所以可以修改/etc/resolv.conf注释’search lan multipass’这行去掉fqdn, 但这时重启nova-compute会报这个错’nova.exception.ResourceProviderCreationFailed: Failed to create resource provider juju-2d9f3a-0-lxd-8’, 可通过下列workaround修复.
PLACEMENTENDPOINT=`openstack endpoint list --service placement --interface public -f value -c URL`
TOKEN=`openstack token issue -f value -c id`
curl -X GET ${PLACEMENTENDPOINT}/resource_providers -H "X-Auth-Token:${TOKEN}" -H "Openstack-API-Version: placement latest" | jq .
PROVIDER_ID=8c79de01-6963-480c-a31c-0fddfdd5d05e
curl -X DELET