I personally test all kinds of Openstack setups and needed Openstack to run on Openstack (nested virtualization).
Assuming that you have Intel CPUs, you need the vmx cpu flag to be enabled inside your instances.
On your Openstack compute node, enable nested virtualization at the kernel level:
echo "options kvm-intel nested=y" >> /etc/modprobe.d/dist.conf
I believe the following step might be optional in some cases but I also modify by nova.conf file with the following settings:
virt_type=kvm ... cpu_mode=host-passthrough
* Note that enabling “host-passthrough” will configure your instances CPU with the exact same model as your hardware CPU model. That said, if you have multiple nodes with different CPU models, it will not be possible to live-migrate instances between them anymore.
Reboot your compute node.
Validate that nested virtualization is enable at the kernel level:
# cat /sys/module/kvm_intel/parameters/nested Y
Validate that virsh capabilities is not supporting the “vmx” feature:
# virsh capabilities
Lunch an instance on this node, and validate that your instance at the vmx cpu flag enable:
# cat /proc/cpuinfo |grep vmx
You should not be able to install a new hypervisor inside your instances and support nested virtualization.