- 概念
1 | OpenStack云主机metadata(元数据)是一组与一台云主机相关联的键值对。用户可以通过API读写这些键值对。 |
- OpenStack元数据分类
1 | 元数据可以分为实例元数据(instance metadata)和用户数据(instance user data)。 |
1 | 实例元数据包括键值对或者自定义键值对. |
- 查询元数据有何作用?
1 | 在OpenStack云主机上通过请求Metadata元数据API,来获取云主机上的主机名、IP地址、SSH公钥等信息。通过这些信息可以通过编写脚本来对云主机的标准化进行定制。 |
查询云主机元数据
云主机中,可以通过访问http://169.254.169.254 这个URL来获取它的元数据信息。
1 | 在控制节点上ssh虚拟机 |
1 | $ curl http://169.254.169.254/2009-04-04/meta-data/ |
1 | 比如: |
metadata元数据获取流程
1 | 获取元数据的请求会通过云主机的默认网关,路由到网络节点上该云主机所在虚拟网络的虚拟网关设备上,并通过iptables的NAT规则重定向到neutron-ns-metadata-proxy服务,再经由neutron-metadata-agent最终由nova-api里提供的metadata服务返回云主机的虚拟机。 |
(1)虚拟机发出请求
1 | 查看虚拟机网卡信息 |
(2)namespace-metadata-proxy
1 | 我的网络环境因为是扁平桥接所以下面是qdhcp设备。因为使用了namespace,在network node上每个namespace里都会有相应的iptables规则和网络设备。 |
1 | [root@controller ~]# ip netns exec qdhcp-605a77b4-d232-4d0b-b915-d6572542c3d5 ip route |
(3)Neutron Metadata Agent
network node上的metadata agent监听/var/lib/neutron/metadata_proxy
1 | 我这里的PIKE版本启用的是Neutron Metadata Agent, 控制节点上查看以下信息 |
(4) Nova Metadata Service
1 | Nova的metadata service是随着nova-api启动的。虚拟机访问169.254.169.254的返回内容,其实就是metadata服务向nova-conductor查询后,返回给network node的metadata agent,再由metadata agent返回给metadata proxy,然后返回给虚拟机的。 |
为什么请求的IP地址是169.254.169.254?
1 | 这个IP地址在OpenStack中是不存在的,为什么可以获取到metadata呢? |
参考: Amazon Ec2-instance-metadata介绍
1 | 后来很多开源机构给亚马逊定制了一些操作系统的镜像,比如 ubuntu, fedora, centos 等等,而且将里面获取 metadta 的api地址也写死了。所以opentack为了兼容,保留了这个地址 169.254.169.254。然后通过iptables nat映射到真实的api上. |
- 本文作者: GaryWu
- 本文链接: https://garywu520.github.io/2018/01/15/深入理解OpenStack-虚拟机元数据metadata/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!