自己做坑人网站的软件,门户网站建设滞后,校园网页设计模板,域名过期了被别人拿去做违法要想从 nova-api-metadata 获得 metadata#xff0c;需要指定 instance 的 id。但 instance 刚启动时无法知道自己的 id#xff0c;所以 http 请求中不会有 instance id 信息#xff0c;id 是由 neutron-metadata-agent 添加进去的。针对 l3-agent 和 dhcp-agent 这两种情况… 要想从 nova-api-metadata 获得 metadata需要指定 instance 的 id。但 instance 刚启动时无法知道自己的 id所以 http 请求中不会有 instance id 信息id 是由 neutron-metadata-agent 添加进去的。针对 l3-agent 和 dhcp-agent 这两种情况在实现细节上有所不同下面分别讨论。 l3-agent 下面是 l3-agent 参与情况下 metadata http 请求的处理流程图。 大的流程为instance - neutron-ns-metadata-proxy - neutron-metadata-agent - nova-api-metadata处理细节说明如下 ① neutron-ns-metadata-proxy 接收到请求在转发给 neutron-metadata-agent 之前会将 instance ip 和 router id 添加到 http 请求的 head 中这两个信息对于 l3-agent 来说很容易获得。 ② neutron-metadata-agent 接收到请求后会查询 instance 的 id具体做法是 1) 通过 router id 找到 router 连接的所有 subnet然后筛选出 instance ip 所在的 subnet。 2在 subnet 中找到 instance ip 对应的 port。 3通过 port 找到对应的 instance 及其 id。 ③ neutron-metadata-agent 将 instance id 添加到 http 请求的 head 中然后转发给 nova-api-metadata这样 nova-api-metadata 就能返回指定 instance 的 metadata 了。 我们再来看 dhcp-agent 的情况。 dhcp-agent ① neutron-ns-metadata-proxy 在转发请求之前会将 instance ip 和 network id 添加到 http 请求的 head 中这两个信息对于 dhcp-agent 来说很容易获得。 ② neutron-metadata-agent 接收到请求后会查询 instance 的 id具体做法是 1) 通过 network id 找到 network 所有的 subnet然后筛选出 instance ip 所在的 subnet。 2在 subnet 中找到 instance ip 对应的 port。 3通过 port 找到对应的 instance 及其 id。 ③ neutron-metadata-agent 将 instance id 添加到 http 请求的 head 中然后转发给 nova-api-metadata这样 nova-api-metadata 就能返回指定 instance 的 metadata 了。 这样不管 instance 将请求发给 l3-agent 还是 dhcp-agentnova-api-metadata 最终都能获知 instance 的 id进而返回正确的 metadata。 从获取 metadata 的流程上看有一步是至关重要的instance 必须首先能够正确获取 DHCP IP否则请求发送不到 169.254.169.254。但不是所有环境都会启用 dhcp更极端的有些环境可能连 nova-api-metadata 服务都不会启用。那么 instance 还能获得 metadata 吗 这就是下一节我们要讨论的主题config drive。