OpenStack虚拟机如何获取metadata

开发者盛宴来袭!7月28日51CTO首届开发者大赛决赛带来技术创新分享

 1. 关于OpenStack metadata服务

我们知道OpenStack虚拟机是通过cloud-init完成初始化配置,比如网卡配置、hostname、初始化密码以及密钥配置等。cloud-init是运行在虚拟机内部的一个进程,它通过datasource获取虚拟机的配置信息(即metadata)。cloud-init实现了很多不同的datasource,不同的datasource实现原理不一样。比较常用的datasource主要有以下两种:

ConfigDriver: Nova把所有配置信息写入到本地的一个raw文件中,然后通过cdrom形式挂载到虚拟机中。此时在虚拟机内部可以看到类似/dev/sr0(注:sr代表 scsi + rom)的虚拟设备。cloud-init只需要读取/dev/sr0文件信息即可获取虚拟机配置信息。

Metadata: Nova在本地启动一个HTTP metadata服务,虚拟机只需要通过HTTP访问该metadata服务获取相关的虚拟机配置信息。

ConfigDriver的实现原理比较简单,本文不再介绍。这里重点介绍Metadata,主要解决以下两个问题:

Nova Metadata服务启动在宿主机上(nova-api所在的控制节点),虚拟机内部租户网络和宿主机的物理网络是不通的,虚拟机如何访问Nova的Metadata服务。

假设问题1已经解决,那么Nova Metadata服务如何知道是哪个虚拟机发起的请求。

OpenStack虚拟机如何获取metadata

2. Metadata服务配置

2.1 Nova配置

Nova的metadata服务名称为nova-api-metadata,不过通常会把服务与nova-api服务合并:

[DEFAULT

enabled_apis = osapi_compute,metadata 

另外虚拟机访问Nova的Metadata服务需要Neutron转发,原因后面讲,这里只需要注意在nova.conf配置:

[neutron] 

service_metadata_proxy = true 

2.2 Neutron配置

前面提到虚拟机访问Nova的Metadata服务需要Neutron转发,可以通过l3-agent转发,也可以通过dhcp-agent转发,如何选择需要根据实际情况:

通过l3-agent转发,则虚拟机所在的网络必须关联了router。

通过dhcp-agent转发,则虚拟机所在的网络必须开启dhcp功能。

Metadata默认是通过l3-agent转发的,不过由于在实际情况下,虚拟机的网络通常都会开启dhcp功能,但不一定需要router,因此我更倾向于选择通过dhcp-agent转发,配置如下:

# /etc/neutron/dhcp_agent.ini [DEFAULT

force_metadata = true 

 

# /etc/neuron/l3_agent.ini [DEFAULT

enable_metadata_proxy = false 

本文接下来的所有内容均基于以上配置环境。

3 OpenStack虚拟机如何访问Nova Metadata服务

3.1 从虚拟机访问Metadata服务说起

cloud-init访问metadata服务的URL地址是,这个IP很特别,主要是效仿了AWS的Metadata服务地址,它的网段是169.254.0.0/16,这个IP段其实是保留的,即IPv4 Link Local Address,它和私有IP(10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)类似,不能用于互联网路由,通常只用于直连网络。如果操作系统(Windows)获取IP失败,也有可能自动配置为169.254.0.0/16网段的一个IP。

那AWS为什么选择169.254.169.254这个IP呢,这是因为选择Link Local IP可以避免与用户的IP冲突,至于为什么选择169.254.169.254这个IP而不是169.254.0.0/24的其它IP,大概是为了好记吧。

另外AWS还有几个很有趣的地址:

169.254.169.253: DNS服务。

169.254.169.123: NTP服务。

更多关于169.254.169.254信息,可以参考whats-special-about-169-254-169-254-ip-address-for-aws。

OpenStack虚拟机也是通过获取虚拟机的初始化配置信息:

$ curl -sL 169.254.169.254/openstack/latest/meta_data.json {"uuid""daf32a70-42c9-4d30-8ec5-3a5d97582cff""availability_zone""nova""hostname""int32bit-test-1.novalocal""launch_index": 0, "devices": [], "project_id""ca17d50f6ac049928cc2fb2217dab93b""name""int32bit-test-1"

从以上输出可见从metadata服务中我们获取了虚拟机的uuid、name、project id、availability_zone、hostname等。

虚拟机怎么通过访问169.254.169.254这个地址就可以获取Metadata信息呢,我们首先查看下虚拟机的路由表:

# route -n 

Kernel IP routing table 

相关推荐
新闻聚焦
猜你喜欢
热门推荐
  • 微软AI面试题有多难?这里有一份样卷

      究竟什么样的AI人才能被微软这样的巨头聘用呢?今天,文摘君就淘来了几道微软AI 面试题,同时给出了最基本的解答......

    06-25    来源:澎湃新闻网

    分享
  • 全球最聪明的大脑怎么看AI?他们预测了

      2017年AI领域取得了诸多成果。2018年AI又将何去何从?以下是来自世界顶级研究人员和行业领军人物对2018年AI领域发展作......

    02-20    来源:虎嗅网

    分享
  • 2017JavaScript框架战报 - React分战场

      我们来看看与React有关的软件包的生态系统。当Facebook构建React时,就有许多来自开源社区的第三方软件包。为提供完......

    02-27    来源:湖北新闻网

    分享
  • 小白学数据:教你用Python实现简单监督学

      监督学习作为运用最广泛的机器学习方法,一直以来都是从数据挖掘信息的重要手段。即便是在无监督学习兴起的近......

    03-05    来源:今日头条

    分享
  • 现代编程语言Swift、Kotlin等十大有趣功能

      最近学习了一些现代编程语言,比如Reason,Swift,Kotlin和Dart。这些编程语言提供了许多新功能,本文主要分享了我认......

    04-29    来源:祁东新闻网

    分享
  • 领域场景分析的6W模型

      组成场景的要素常常被称之为6W模型,即描写场景的过程必须包含Who,What,Why,Where,When与hoW这六个要素。......

    04-30    来源:砍柴网

    分享
  • 开源应用服务器WildFly 12发新季度交付模式

      WildFly 12 Final版本现在已经可以下载了,WildFly是一款灵活的开源应用服务器,支持开发人员构建轻量级应用程序。支持......

    05-10    来源:青岛新闻网

    分享
  • 基于Spring Cloud的微服务落地

      微服务架构模式的核心在于如何识别服务的边界,设计出合理的微服务。但如果要将微服务架构运用到生产项目上,......

    06-04    来源:广西新闻网

    分享
  • 为什么阿里工程师纷纷在内网晒代码?

      前阵子,在阿里一个小黑屋里,5名对代码有着极致追求的工程师参与阿里代码领域最高荣誉“多隆奖”的最终角逐。......

    06-08    来源:四川新闻网

    分享
  • 央企Car Hacking Team诚招各路安全大咖

      传统安全行业做腻了?这里有新鲜、有趣、好玩的岗位等你来挑战!“数”驱产业变革“智”领汽车未来中国汽车技......

    02-24    来源:西安新闻网

    分享
返回列表
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。