通过router发送请求
如果虚拟机所在subnet 连接在了router 上,那么发向169.254.169.254 的报文会被发至router。如下图所示,neutron 通过在router 所在网络命名空间添加iptables 规则,将该报文转发至9697 端口,而neutron-ns-metadata-proxy 监听着该端口,所以报文被neutron-ns-metadata-proxy 获取。
通过DHCP发送请求
如果虚拟机所在subnet 没有连接在任何router 上,那么请求则无法通过router 转发。此时 neutron 通过DHCP 服务器来转发metadata 请求。从 下图可以看到DHCP 服务器的IP 配置信息,发现DHCP 服务器配置了两个IP,其中一个就是169.254.169.254。并且DHCP服务器对应的neutron-ns-metadata-proxy监听着80端口,从而发向169.254.169.254 的报文会被发至neutron-ns-metadata-proxy。
总结
OpenStack metadata服务为用户自定义配置虚拟机提供了有效的解决方案,在虚拟机创建阶段可以方便的将一些参数配置到虚拟机中。如果是在虚拟机的运行阶段,用户期待的一些参数又该如何传递到虚拟机呢,我们将会在后续的文章中讲解。
启迪云-高级开发工程师 郭全