VM images in OpenStack (and by extension all cloud providers) need to do two things to get configured after boot:
- Get an IP (v4) through DHCP
- Download its initial config by sending a request to 169.254.169.254. A tool such as cloud-init takes care of this. More information at the Amazon EC2 documentation.
In a “normal” OpenStack deployment with a Network node that performs L3 functions (routing), requests to 169.254.169.254 are redirect with NAT to the metadata-proxy, which on its turn proxies the requests to nova-api.
If you want to use OpenStack merely as a management layer on top of compute and storage with a little touch of networking (and skip self-service networks) provider networks are used. The OpenStack admin defines these networks statically: the NIC to use, VLAN ID, subnet, gateway, … This means that the default gateway is not controlled by OpenStack and therefore metadata requests cannot be redirected.
OpenStack has a solution for that. You have to use the OpenStack dhcp service and set enable_isolated_metadata to true in /etc/neutron/dhcp_agent.ini This will pass a host route for 169.254.169.254/16 with the DHCP offer (option 121). The metadata-proxy will also listen for requests to this IP in the DHCP server network namespace on the network node.