0
0

Openstack Metadata Service分析

xianchaobo 发表于 2016年02月27日 16:49 | Hits: 2152
Tag: OpenStack | 公有云

声明:

本博客欢迎转发,但请保留原作者信息!

博客地址:http://t.51gocloud.com

新浪微博:@线超博

内容系本人学习、研究和总结,如有雷同,实属荣幸!

1、什么是metadata service

metadate service最早概念是AWS提出的,通过这一服务可以为虚拟机提供元数据,包含虚拟机id、主机名、密钥、IP地址、用户自定义脚本等。

【元数据获取方式】:在虚拟机内部,通过http请求访问http://169.254.169.254/latest/meta-data/

$ curl http://169.254.169.254/latest/meta-data/    
ami-id
ami-launch-index
ami-manifest-path
block-device-mapping/
hostname
instance-action
instance-id
instance-type
kernel-id
local-hostname
local-ipv4
mac
network/
placement/
public-hostname
public-ipv4
public-keys/
reservation-id
security-groups
services/

AWS metadata服务介绍:http://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/ec2-instance-metadata.html

2、openstack metadata service框架

openstack-metadata-service

2.1 cloud-init

cloud-init是专为云环境中虚拟机的初始化而开发的工具,它可以从metadata service读取相关数据并据此对虚拟机进行配置。常见的配置包括:设定虚拟机的hostname、hosts文件、设定SSH密钥、更新软件包、调整系统盘文件系统大小(调整至创建时候的大小)等。

openstack也支持cloud-init组件,虚拟机内部安装完cloiud-init组件后,系统启动过程中,会首先运行cloud-init组件进行系统配置。
VM内部通过169.254.169.254这个地址来获取metadata,此时Openstack创建的VM内部的路由情况分为了两种:

(1)VM subnet连接在了router
在这种情况下,虚拟机启动后,内部包含了一条如下路由:

169.254.169.254 via 10.0.0.1 dev eth0

10.0.0.1(subnet的网关)地址在router命名空间里
在router命名空间里,iptables包含了一条nat转换,将169.254.169.254:80的数据包转给9697端口,9697为neutron-ns-metadata-proxy服务

(2)VM subnet未连接router

在这种情况下,虚拟机启动后,内部包含了一条如下路由:

169.254.169.254 via 10.0.0.2 dev eth0

在dhcp命名空间内,发现dhcp地址的网卡上配置了两个IP,10.0.0.2(dhcp服务ip)和169.254.169.254(metadata服务ip)。dhcp agent会启动一个neutron-metadata-agent进程监听80端口,专门为这种情况提供metadata服务

2.2 neutron-ns-metadata-proxy

这个组件主要在metadata请求中,增加route-id和network-id信息,然后通过Unix domain socket将请求转发给neutron-metadata-agent。

代码:neutron/agent/metadata/namespace_proxy.py
metadata-proxy

通过2.1分析,每一个router命名空间会对应一个neutron-ns-metadata-proxy,每一个dhcp命名空间也会对应一个neutron-ns-metadata-proxy。这里是否会存在性能问题?

2.3 neutron-metadata-agent

主要根据route-id、network-id、IP地址,获取port信息,然后根据port反查到对应虚拟机id和租户id,最后请求再次转发至nova-api-metadata服务。

代码:neutron/agent/metadata/agent.py
metadata-agent

2.4 nova-api-metadata

这个服务在nova-api模块里,根据虚拟机id以及租户id,对metadata请求作出响应,返回虚拟机metadata信息。

原文链接: http://t.51gocloud.com/?p=1595

0     0

我要给这篇文章打分:

可以不填写评论, 而只是打分. 如果发表评论, 你可以给的分值是-5到+5, 否则, 你只能评-1, +1两种分数. 你的评论可能需要审核.

评价列表(0)