OpenStack Metadata Service分析

1、为什么Metadata Service

OpenStack Metadata Service 提供 instance 的配置信息(这些信息被统称为 metadata)。instance 启动时向 Metadata Service 请求并获得自己的 metadata,instance 的 cloud-init根据 metadata 完成个性化配置工作。

2、Metadata Service架构

nova-api-metadata

nova-api-metadata是nova-api的子服务,它是metadata的实际提供者,虚拟机的启动时,可以选择通过nova-api-metadata的REST API来获取metadata信息
nova-api-metadata服务运行在控制节点上,服务端口8775(可以通过nova的配置修改)

开启metadata服务

nova-api-metadata与nova-api服务是合并在一起的,可以通过nova.conf的enabled_apis配置来指定是否启用nova-api-metadata

neutron-metadata-agent

nova-api-metadata走管理网络,虚拟机走业务网络,所以虚拟机无法直接和nova-api-metadata进行通信,在这个时候就需要借助到运行在网络节点上的neutron-metadata-agent服务。

在网络节点上运行两个组件 l3 agent和dhcp agent,他们会创建一个haproxy进程,运行在各自的namespace中,用来接收虚拟机发送的metadata请求,并将该请求通过Unix Domain Socket的方式转发给neutron-metadata-agent服务,再由neutron-metadata-agent转发给nova-api-metadata。

整个流程可以总结为:
a、instance将metadata请求发送给router或者dhcp agent创建的haproxy进程
b、haproxy进程通过Unix Domian Socket将请求发送给neutron-metadata-agent
c、neutron-metadata通过内部管理网络将请求发送给nova-api-metadata服务

3、L3 agent or DHCP agent

上述描述中提到,L3 agent和dhcp agent均可以创建haproxy进程,进而实现metadata请求的转发,那么两种方案该如何选择呢?

事实上,两者各有各的应用场景,甚至两种方案可以并存,下文将详细分析两者的区别。
说在前面,l3-agent 和 dhcp-agent 访问 metadata 的实现方法是不同的。

对于 169.254.169.254:
a、l3-agent 用 iptables 规则来转发。
b、dhcp-agent 则是将此 IP 配置到自己的 interface 上。

4、L3 agent实现分析

创建一个网络test1,启用dhcp,暂时不连接到router,然后启动一个instance,然后观察instance的启动日志:

从上面的启动log中,我们可以发现,intance从dhcp获取到ip地址之后,向169.254.169.254发送了request请求,但是20次均失败
那么169.254.169.254到底是什么?

事实上,这个ip地址就是metadata service的ip地址,instance在启动的时候会向它发送metadata的请求。

现在我们发现,instance请求是失败的,这个是为什么呢?

上文提到,OpenStack通过L3 agent或者dhcp agent创建haproxy进程,进而实现metadata的转发,我们首先检查下网络节点上的haproxy进程。

发现并没有haproxy进程运行,这个也就解释了,为什么instance会请求失败。但是到底是哪里出了问题?

根本原因是:默认情况下,haproxy进程由L3 agent来创建(dhcp agent则是关闭状态),由于当前test1网络并没有挂载router上,所以没有创建haproxy进程。

创建router,并将test1挂载router上之后。我们发现haproxy进程已经在网络节点启动。

重启instance test1,看会发生什么变化。

根据instance日志显示,虚拟机已经成功从169.254.169.254获取到了metadata。
这个过程中到底发生了什么?

a、instance在启动之后,会向168.254.169.254的80端口发起metadata请求,根据
instance的路由可以发现,该请求会从instance的eth0发出,送往路由器上的qr-设备。

b、metadata请求到达路由,进入PREROUTING链,将目的地址为169.254.169.254,进入qr-口,目的port是80的请求,重定向到9697。

c、为什么是9697?
因为router创建的haproxy进程正是监听在9697端口上

d、在后面就简单了:haproxy进程将请求通过Unix Domain Socket转发给neutron-metadata-agent,后者再通过管理网关转发给nova-api-metadata。

5、DHCP agent实现分析

OpenStack默认通过L3 agent管理metadata的实现,进而和nova-api-metadata通信,但是并不是所有的环境都有L3 agent,比如直接使用物理router的场景,这样场景如何实现metadata呢?

答案就是DHCP agent

a、打开dhcp agent的metadata功能
vim /etc/neutron/dhcp_agent.ini

重启dchp agent服务

b、检查网络节点上的haproxy进程情况,会发现开启dhcp功能的网络,会创建一个对应的haproxy进程,并将169.254.169.254配置在对应的dhcp port上。


c、重启instance,instance会向169.254.169.254的80端口发送metadata请求,根据instance内部路由,请求会到达dhcp_port端口上。

c、metadata请求到达dhcp的namespace,会被haproxy进程监听到(haproxy进程在dhcp namespace中监听80端口)

d、后面流程和L3 agent完全相同:haproxy进程将请求通过Unix Domain Socket转发给neutron-metadata-agent,后者再通过管理网关转发给nova-api-metadata。

6、Instance 怎么获得自己的 Metadata

要从 nova-api-metadata 获得 metadata,需要指定 instance 的 id
而instance在启动的时候,是无法知道自己的id的,所以http请求中不会包含id,
instance id是neutron-metadata-agent添加进去的。对于L3 agent和DHCP agent
两种方案上实现又略有不同,下文会针对两者进行说明。

获取metadata流程如下:
instance -> haproxy-> neutron-metadata-agent -> nova-api-metadata

L3 agent
a、haproxy进程接受到metadata请求,在转发给neutron-metadata-agent之前,会将ip和router id添加到http的head中。
b、neutron-metadata-agent接受到请求后,会查询instance的id,然后将instance id添加到http的head中,然后转发给nova-api-metadata。
c、nova-api-metadata响应请求到指定的instance。

DHCP agent
a、haproxy进程接受到metadata请求,在转发给neutron-metadata-agent之前,会将ip和network id添加到http的head中。
b、neutron-metadata-agent接受到请求后,会查询instance的id,然后将instance id添加到http的head中,然后转发给nova-api-metadata。
c、nova-api-metadata响应请求到指定的instance。

这样,不管 instance 将请求发给 l3-agent 还是 dhcp-agent,nova-api-metadata 最终都能获知 instance 的 id,进而返回正确的 metadata。

原文地址:http://blog.51cto.com/99cloud/2333500

时间: 2024-07-30 04:16:57

OpenStack Metadata Service分析的相关文章

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 查看该启动程序. 我们这个环境是

Install and Configure OpenStack Database Service (Trove)

Based on OpenStack Icehouse release we will install Database service on controller node 1. 这个还不完善,以后更新 Install and Configure OpenStack Database Service (Trove),布布扣,bubuko.com

Manage Metadata Service Error: There are no addresses available for this application

打开正常创建的Metadata Service后发现了如下的错误: 检查了Application Pool和Managed Metadata Web  Service ,发现两者一切正常,之后查看SharePoint log,发现了如下错误: Failed to get full hidden list changes for database WSS_Content_6666 and proxy 646b3588-ecbd-42d7-9ad3-578b39da58a8, error was T

Managed Metadata Service Application(一)创建Managed Metadata Service Application

 创建Managed MetadataService Application   SharePoint Managed Metadata Service是SharePoint里面非常重要用处广泛的一个服务.User Profile Service Application和Search ServiceApplication的某些功能都依赖于它. 要创建Managed Metadata Service Application,首先以farmadministrator的身份登录到Central A

Managed Metadata Service Application(二)Managed Metadata Service Application常见错误

 上一篇(Managed Metadata Service Application(一)创建Managed Metadata Service Application)说到了如何创建一个新的Managed Metadata Service Application. 创建完之后,或者是在使用过程中,经常会遇到一个错误--The Managed Metadata Service or Connection is currently not available: 一般情况下,有两个原因会导致这个错误

OpenStack源码分析——Nova-Scheduler

一.服务启动 Nova-scheduler服务的启动入口脚本是cmd包下的scheduler.py,其主要监听来自于消息队列中topic=scheduler(可配置)的消息.在服务启动过程中,其将初始化一个SchedulerManager实例作为该服务的Handler,来处理接受到的消息请求. 同时,Nova-scheduler服务在启动的过程中,会将自己注册到DB中,即将自己的host.binary.topic.report_count信息添加到services表中,并将自己同样注册到Serv

Managed Metadata Service Application(七)权限管理

 MMS Permission Managed Metadata Service 要被整个Farm使用,那么究竟谁有权限来管理term呢? 通常情况下,管理term的事情不应该有Farm Administrator来做的,而是应该具体到业务部门,因为只有他们知道需要如何管理term.SharePoint 采用了自上而下分层的权限设计来给不同的人分配不同的管理权限.从大到小为:服务器场管理员,术语库管理员,组管理员和参与者. 服务器场管理员(FarmAdministrator) 毋庸置疑,服务

Managed Metadata Service Application(六) Managed Navigation

 Managed Navigation 在SharePoint里面,有两个导航栏,一个是上方的全局导航,一个是在左面的当前导航.有了Managed Metadata Service之后,除了传统的结构式导航,现在也可以借助ManagedMetadata Service 设置导航. 在使用之前,先保证Site Collection和Site级别都开启了Publishing feature.下面的是Site级别的Feature: 下面是Site Collection级别的Feature: 然后进

Managed Metadata Service Application(四)Enterprise metadata and keywords

Enterprise Metadata and Keywords SharePoint List/Library的设定里,有一个设定叫Enterprise metadata and keywords settings.点击Ribbon上的List Settings, 这里面有Enterprise Metadata and Keywords Settings: 默认这个功能是关闭的,选中Enterprise Keywords的checkbox: 这样,再编辑一个item的时候,就多出来了一个col