获取 metadata 过程详解 - 每天5分钟玩转 OpenStack(167)

接上节,启动 neutron router 后 instance c1 终于拿到了 metadata, 从下面 c1 的启动日志可知:

c1 所认为的 metadata 服务地址是 169.254.169.254,端口为 80。我们在 c1 中尝试访问一下 metadata。

确实能够拿到 metadata。但我们知道 nova-api-metadata 是运行在控制节点上的,IP并不是 169.254.169.254,这是怎么实现的呢?下面我们分析一下这个过程。

从 c1 的路由表得访问 169.254.169.254 的请求会走 17.17.17.1

17.17.17.1 实际上就是 test_router 在 test_net 上的 interface IP。这条路由是 OpenStack 自动添加到 instance 中的,这样就将 metadata 的请求转发到 neutron router。

ip netns 是管理 linux network namespace 的命令,如果对 namespace 不熟悉,可参考教程前面相关章节。

test_router 接收到 c1 的请求,会通过 iptable 规则转发到 9697 端口。

9697 端口是干嘛的?这是 neutron-ns-metadata-proxy 的监听端口。

到这里我们可以把思路重新理一下了:

  1. instance 通过预定义的 169.254.169.254 请求 metadata。
  2. 请求被转发到 neutron router。
  3. router 将请求转发给 neutron-ns-metadata-proxy。
  4. 再后面就简单了:neutron-ns-metadata-proxy 将请求通过 unix domain socket 发给 neutron-metadata-agent,后者再通过管理网络发给 nova-api-metadata。

OpenStack 默认通过 l3-agent 创建和管理 neutron-ns-metadata-proxy。但不是所有环境都有 l3-agent,比如直接用物理 router 的场景。这时就需要让 dhcp-agent 来管理 neutron-ns-metadata-proxy。

下一节我们分析 dhcp-agent 如何处理 metadata 请求。

时间: 2024-11-15 00:24:22

获取 metadata 过程详解 - 每天5分钟玩转 OpenStack(167)的相关文章

Metadata Service 架构详解 - 每天5分钟玩转 OpenStack(165)

下面是 Metadata Service 的架构图,本节我们详细讨论各个组件以及它们之间的关系. nova-api-metadata nova-api-metadata 是 nova-api 的一个子服务,它是 metadata 的提供者,instance 可以通过 nova-api-metadata 的 REST API 来获取 metadata 信息. nova-api-metadata 运行在控制节点上,服务端口是 8775. 通过进程 ID 13415 查看该启动程序. 我们这个环境是

Launch和Shut Off操作详解 - 每天5分钟玩转 OpenStack(30)

本节详细分析 instance launch 和 shut off 操作,以及如何在日志中快速定位有用信息的技巧. Launch Launch instance 应该算 Nova 最重要的操作. 仔细研究 lanuch 操作能够帮助我们充分理解 Nova 各个子服务的协调配合和运行机制. 前面我们已经以 launch 操作为例详细讨论了各个 nova-* 子服务. 这里不再赘述,只是再回顾一下流程. 客户(可以是 OpenStack 最终用户,也可以是其他程序)向 API(nova-api)发送

Resize Instance 操作详解 - 每天5分钟玩转 OpenStack(41)

Resize 的作用是调整 instance 的 vCPU.内存和磁盘资源. Instance 需要多少资源是定义在 flavor 中的,resize 操作是通过为 instance 选择新的 flavor 来调整资源的分配. 有了前面对 Migrate 的分析,再来看 Resize 的实现就非常简单了. 因为 instance 需要分配的资源发生了变化,在 resize 之前需要借助 nova-scheduler 重新为 instance 选择一个合适的计算节点,如果选择的节点与当前节点不是同

Migrate Instance 操作详解 - 每天5分钟玩转 OpenStack(40)

Migrate 操作的作用是将 instance 从当前的计算节点迁移到其他节点上. Migrate 不要求源和目标节点必须共享存储,当然共享存储也是可以的. Migrate 前必须满足一个条件:计算节点间需要配置 nova 用户无密码访问. 下面是 Migrate instance 的流程图 向 nova-api 发送请求 nova-api 发送消息 nova-scheduler 执行调度 nova-scheduler 发送消息 nova-compute 执行操作 下面我们详细讨论每一个步骤.

Unshelve Instance 操作详解 - 每天5分钟玩转 OpenStack(39)

上一节我们 shelve instance 到 Glance,本节讨论如何通过 unshelve 操作恢复该 instance. 因为 Glance 中保存了 instance 的 image,unshelve 的过程其实就是通过该 image launch 一个新的 instance,nova-scheduler 也会调度合适的计算节点来创建该 instance. instance unshelve 后可能运行在与 shelve 之前不同的计算节点上,但 instance 的其他属性(比如 f

Cinder 组件详解 - 每天5分钟玩转 OpenStack(47)

本节我们将详细讲解 Cinder 的各个子服务. cinder-api cinder-api 是整个 Cinder 组件的门户,所有 cinder 的请求都首先由 nova-api 处理.cinder-api 向外界暴露若干 HTTP REST API 接口.在 keystone 中我们可以查询 cinder-api 的 endponits. 客户端可以将请求发送到 endponits 指定的地址,向 cinder-api 请求操作. 当然,作为最终用户的我们不会直接发送 Rest API 请求

Nova 组件详解 - 每天5分钟玩转 OpenStack(26)

本节开始,我们将详细讲解 Nova 的各个子服务. 前面架构概览一节知道 Nova 有若干 nova-* 的子服务,下面我们将依次学习最重要的几个.今天先讨论 nova-api 和 nova-conductor. nova-api Nova-api 是整个 Nova 组件的门户,所有对 Nova 的请求都首先由 nova-api 处理. Nova-api 向外界暴露若干 HTTP REST API 接口. 在 keystone 中我们可以查询 nova-api 的 endponits. 客户端就

Shelve Instance 操作详解 - 每天5分钟玩转 OpenStack(38)

Instance 被 Suspend 后虽然处于 Shut Down 状态,但 Hypervisor 依然在宿主机上为其预留了资源,以便在以后能够成功 Resume. 如果希望释放这些预留资源,可以使用 Shelve 操作. Shelve 会将 instance 作为 image 保存到 Glance 中,然后在宿主机上删除该 instance. 下面是 shelve instance 的流程图 向 nova-api 发送请求 nova-api 发送消息 nova-compute 执行操作 下面

Snapshot Instance 操作详解 - 每天5分钟玩转 OpenStack(36)

本节我们通过日志详细讨论 instance 的 snapshot 操作. 有时候操作系统损坏得很严重,通过 Rescue 操作无法修复,那么我们就得考虑通过备份恢复了.当然前提是我们之前对instance做过备份. Nova 备份的操作叫 Snapshot,其工作原理是对 instance 的镜像文件(系统盘)进行全量备份,生成一个类型为 snapshot 的 image,然后将其保存到 Glance 上. 从备份恢复的操作叫 Rebuild,将在下一节重点讨论. 下面是 snapshot in