获取 metadata 的完整例子 - 每天5分钟玩转 OpenStack(166)

简介: 我们将通过实验详细分析 instance 从 nova-api-metadata 获取信息的完整过程。 环境介绍 1. 一个 all-in-one 环境(多节点类似)。 2. 已创建 neutron 网络 test_net,DHCP 已启动。

我们将通过实验详细分析 instance 从 nova-api-metadata 获取信息的完整过程。

 

环境介绍


1. 一个 all-in-one 环境(多节点类似)。

2. 已创建 neutron 网络 test_net,DHCP 已启动。在这个 metadata 实验中, test_net 的 type 不重要,flat、vlan、vxlan 都可以。


3. 暂无 neutron router。


准备就绪,开始实验。

 

启动 instance


通过 cirros 镜像部署一个 instance,命名为 c1,选择网络 test_net。启动过程中,查看 instance 的启动日志。


上面的 log 中我们看到两个信息:


① instance 从 DHCP 拿到了 IP 17.17.17.5,这个好理解,因为我们在test_net 上开启的 DHCP 服务。


② instance 会去访问 http://169.254.169.254/2009-04-04/instance-id,尝试了 20 次都失败了。

 

神奇的 169.254.169.254

 

169.254.169.254 是个什么地址?


这是 metadata service 的 IP。


这个地址来源于 AWS,当年亚马逊在设计公有云的时候,为了让 instance 能够访问 metadata,就将 169.254.169.254 这个特殊的 IP 作为 metadata 服务器的地址,instance 启动时就会向 169.254.169.254 请求 metadata。OpenStack 之后也沿用了这个设计。


我们现在遇到的问题是 169.254.169.254 没法访问啊!cirros 的 cloud-init 显然是没有拿到 metadata 的,这点至少可以从 instance 的 hostname 没有被设置为 c1 判断出来。



前面我们在 Metadata Service 架构部分介绍了,instance 首先会将 metadata 请求发送给 DHCP agent 或者 L3_agent 管理的 neutron-ns-metadata-proxy。那目前到底是谁在管理 neutron-ns-metadata-proxy 呢?我们先在控制节点上查看一下 neutron-ns-metadata-proxy 的进程。




尽然没有 neutron-ns-metadata-proxy 在运行!


其原因是:默认配置下,neutron-ns-metadata-proxy 是由 L3_agent 管理的(后面会讨论让 DHCP 来管理),由于当前 test_net 并没有挂在 neutron router 上,所以没有启动 neutron-ns-metadata-proxy。

 

添加 router

 

要解决这个问题很简单:创建虚拟路由器 test_router 并连接 test_net



现在控制节点上已经能够看到 test_router 管理的 neutron-ns-metadata-proxy 了。



重启 instance c1,看会发生怎样的变化。



instance 成功访问到 169.254.169.254。从结果看,cloud-init 已经获取到 metadata,因为 hostname 已经设置为 c1



下一节我们详细分析 c1 是如何拿到 metadata 的。


目录
相关文章
|
Kubernetes 关系型数据库 容器
Kubernetes之路 3 - 解决服务依赖
在容器服务的客户群中,一个经常被问起的问题就是如何处理服务间依赖。本文介绍了常见的解决方法来实现服务的依赖检查,还进一步用示例展示了如何利用init container, liveness/readiness探针等技术实现服务健康检查,依赖检查等等功能。
12099 1
|
5月前
|
人工智能 自然语言处理 搜索推荐
Manus爆火,我发现平替开源项目OpenManus带你玩转AI智能体开发,无需邀请码!
在AI技术日新月异的今天,OpenManus像一把打开智能体开发大门的万能钥匙,让每个人都能轻松构建自己的AI助手!
240 0
|
Go 数据安全/隐私保护 开发者
Go语言import真的很简单,分分钟学会!
Go语言import真的很简单,分分钟学会!
1063 1
|
Java Go Python
python 性能分析利器 py-spy
python 内存泄漏工具以及性能瓶颈分析工具分享。
5485 0
|
SQL 网络协议 Oracle
【DG】主rac + 备rac dg 部署
【DG】主rac + 备rac dg 部署 一.1  BLOG文档结构图       一.2  前言部分   一.2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① 主库...
2913 0
|
应用服务中间件 Linux 网络虚拟化
docker:了解docker网络和自定义docker网卡
docker:了解docker网络和自定义docker网卡
docker:了解docker网络和自定义docker网卡
|
Unix API 网络架构
Metadata Service 架构详解 - 每天5分钟玩转 OpenStack(165)
下面是 Metadata Service 的架构图,本节我们详细讨论各个组件以及它们之间的关系。 nova-api-metadata nova-api-metadata 是 nova-api 的一个子服务,它是 metadata 的提供者,instance 可以通过 nova-api-metadata 的 REST API 来获取 metadata 信息。
1844 1
|
前端开发 Linux 虚拟化
虚拟化篇之前后端驱动分析
前后端驱动是虚拟化的重要组成部分,在我们平时的排查过程中,经常会涉及到这部分的数据,特别是与性能相关的问题类型。举个例子,我们经常会碰到网络抖动的问题,此时我们会在实例内部和后端vif口抓包,如果发现两者之间存在延迟,经常我们就会怀疑到前后端的问题。
3484 0
重构——63提炼超类(Extract Superclass)
提炼超类(Extract Superclass):两个类有相似特性;为这两个类建立一个超类,将相同的特性搬移到超类
1873 0