metadata字面上是元数据,是一个不容易理解的概念。在除了openstack的其他场合也经常会碰到。openstack里的metadata,是提供一个机制给用户,可以设定每一个instance 的参数。
具体可以参见openstack的相关api和以下的蓝图:
https://blueprints.launchpad.net/nova/+spec/openstack-api-metadata
比如你想给instance设置某个属性,比如主机名。metadata的一个重要应用,是设置每个instance的ssh公钥。公钥的设置有两种方式:
1、创建instance时注入文件镜像
2、启动instance后,通过metadata获取,然后用脚本写入
第二种方式更加灵活,可以给非root用户注入公钥。以下是获取ssh key的代码片段:
# Fetch public key using HTTP ATTEMPTS=10 while [ ! -f /root/.ssh/authorized_keys ]; do curl -f http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key > /tmp/aws-key 2>/dev/null if [ \$? -eq 0 ]; then cat /tmp/aws-key >> /root/.ssh/authorized_keys chmod 0600 /root/.ssh/authorized_keys restorecon /root/.ssh/authorized_keys rm -f /tmp/aws-key echo "Successfully retrieved AWS public key from instance metadata" else FAILED=\$((\$FAILED + 1)) if [ \$FAILED -ge \$ATTEMPTS ]; then echo "Failed to retrieve AWS public key after \$FAILED attempts, quitting" break fi echo "Could not retrieve AWS public key (attempt #\$FAILED/\$ATTEMPTS), retrying in 5 seconds..." sleep 5 fi done
可以看到,获取metadata的api接口是:
http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key
可是,这个IP地址,在我们 openstack 是不存在的。为什么可以获取到metadata呢?
这是由于Amazon的原因,最早metadata是亚马逊提出来的,参见:
http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/AESDG-chapter-instancedata.html
后来很多人给亚马逊定制了一些操作系统的镜像,比如 ubuntu, fedora, centos 等等,而且将里面获取 metadta 的api地址也写死了。所以opentack为了兼容,保留了这个地址 169.254.169.254。然后通过iptables nat映射到真实的api上:
iptables -A nova-network-PREROUTING -d 169.254.169.254/32 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.0.0.4:8775
使用metadata会带来便利,但是经常碰到的一个问题是,metadata获取不成功,导致instance启动很慢,并且获取失败会导致ssh key等功能设置失效,刚才获取ssh的代码片段中,就是尝试10次。需要注意的是:
1、在 network 上,正确设置相关参数,在 /etc/nova/nova.conf 里配置:
metadata_host=10.0.0.4
这里的 10.0.0.4 是api所在的内网地址
2、network上,要能够连接这个api地址 10.0.0.4
3、由于 api 判断instance是通过fix ip 来判断的,所以instance的fix ip地址段,一定要能够正确连接 api 所在 ip,
并且没有经过 nat 地址转换。否则不能正确获取instance 的metadata
openstack 的 metadata获取,我修正了一个bug:
https://review.openstack.org/#/c/5961/
https://code.launchpad.net/bugs/968453
但是,在某些场合,管理地址分开的情况下,还有bug, 需要继续改进:
https://bugs.launchpad.net/nova/+bug/982356
相关推荐
私有云open stack的安装
2.1_什么是OpenStack(2017.5.30) 2.2_OpenStack之于虚拟化(2017.5.30) 2.3_OpenStack之于云计算(2017.5.30) 2.4_OpenStack发展历程(2017.5.30) 2.5_OpenStack的设计准则(2017.5.30) 2.6_OpenStack的架构(2017.5...
《Open Stack设计与实现》是一本介绍OpenStack设计与实现原理的书。《Open Stack设计与实现》以Juno版本为基础,覆盖了OpenStack的学习方法到设计与实现等各个方面内容,致力于帮助读者形成OpenStack及其各个主要...
计算已成为IT业界出现频率最高的热门词语之...包括OpenStack计算(代号为Nova),OpenStack对象存储(代号为Swift),并OpenStack镜像服务(代号Glance)的集合。OpenStack提供了一个操作平台,或工具包,用于编排云。
我们为什么不赞同 OpenStack?.
Design, deploy, and manage a scalable OpenStack infrastructure About This Book Learn how to design and deploy an OpenStack private cloud using automation tools and best practices Gain valuable ...
openstack 计费模块设计与SSH实现
OpenStack is today’s leading technology for building and integrating public and private clouds. Common OpenStack Deployments is a complete, practical guide to deploying OpenStack and understanding ...
Openstack 测试 试卷 ,学校考试可以用,百度花钱买的,需要的下载吧。 OpenStack是一个开源的云计算管理平台项目,是一系列软件开源项目的组合。由NASA(美国国家航空航天局)和Rackspace合作研发并发起,以Apache...
云计算OpenStack Cloud Computing Cookbook 英文电子书.pdf Openstack以Python编程语言+Twisted软件框架编写。整合Tornado网页服务器、Nebula运算平台。遵循Open Virtualization Format、AMQP、SQLAlchemy等标准。所...
这是关于openstack swauth认证方式的分布式搭建流程。
Openstack组件卸载命令,跟上面的Openstack实验相对应的卸载文档。http://download.csdn.net/detail/u014028392/9161039
Build your own cloud based Database as a Service using OpenStack Trove About This Book Familiarize yourself with the concept of Database as a Service and make your existing system scalable and ...
Openstack Trove概要Openstack Trove概要Openstack Trove概要Openstack Trove概要Openstack Trove概要Openstack Trove概要Openstack Trove概要Openstack Trove概要Openstack Trove概要Openstack Trove概要Openstack ...
openstack自动化搭建脚本,openstack私有云平台部署。 这次是基于devstack进⾏⾃动化部署,后续会通过解析这个部署脚本的源代码的形式,学习openstack的部署,同时⼀步步阅读 openstack其他服务的源码,⽐如keystone...
手动安装openstack Mitaka版
The Fourth Edition of the industry-acclaimed OpenStack Cloud Computing Cookbook, from four recognized experts, updated to the latest OpenStack build including Cinder, Nova, and Neutron. Key Features ...