Skip to content

openstack_nova_metadata

遇见王斌 edited this page Oct 13, 2017 · 3 revisions

nova metadata

元数据可以分为实例元数据(instance metadata)和用户数据(instance user data)。

  • Metadata 主要包括虚拟机自身的一些常用属性,如 hostname、网络配置信息、SSH 登陆秘钥等,主要的形式为键值对。(通过nova boot 命令的--meta参数)
  • user data 主要包括一些命令、脚本等。

服务详解

nova-api-metadata

nova-api-metadata 是 nova-api 的一个子服务,它是 metadata 的提供者,instance 可以通过 nova-api-metadata 的 REST API 来获取 metadata 信息。

nova-api-metadata 运行在控制节点上,服务端口是 8775。

nova 通过 nova.conf 配置文件中参数 enabled_apis 决定是否启用 nova-api-metadata。

neutron-metadata-agent

nova-api-metadata 在控制节点上,走 OpenStack 内部管理网络,instance 是无法通过 http://controller_ip:8775 直接访问 metadata service 的,因为网络不通。

那怎么办呢?

答案是:借助 neutron-metadata-agent。

neutron-metadata-agent 运行在网络节点上。instance 先将 metadata 请求发给 neutron-metadata-agent,neutron-metadata-agent 再将请求转发到 nova-api-metadata。

应用

##################################1  instance 从 DHCP 拿地址失败
Starting network...
udhcpc (v1.20.1) started
Sending discover...
Sending discover...
Sending discover...
Usage: /sbin/cirros-dhcpc <up|down>
No lease, failing
WARN: /etc/rc3.d/S40-network failed
cirros-ds 'net' up at 184.33
##################################2
checking http://169.254.169.254/2009-04-04/instance-id
failed 1/20: up 184.51. request failed
failed 2/20: up 186.79. request failed
failed 3/20: up 188.86. request failed
failed 4/20: up 191.01. request failed
failed 5/20: up 193.08. request failed
failed 6/20: up 195.15. request failed
failed 7/20: up 197.30. request failed
failed 8/20: up 199.36. request failed
failed 9/20: up 201.43. request failed
failed 10/20: up 203.58. request failed
failed 11/20: up 205.65. request failed
failed 12/20: up 207.72. request failed
failed 13/20: up 209.87. request failed
failed 14/20: up 211.93. request failed
failed 15/20: up 214.01. request failed
failed 16/20: up 216.19. request failed
failed 17/20: up 218.26. request failed
failed 18/20: up 220.33. request failed
failed 19/20: up 222.52. request failed
failed 20/20: up 224.58. request failed
failed to read iid from metadata. tried 20
no results found for mode=net. up 226.66. searched: nocloud configdrive ec2

场景

将 ssh public key 添加到 instance

  • (1) 在 Project -> Compute -> Access & Security 中创建 Key Pair。
  • (2) 启动实例时,选择创建的 key pair
  • (3) instance 启动后,可以看到 public key 已经保存到 .ssh/authorized_keys 中了