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
相关推荐
12. **服务组件的API**:OpenStack每个核心组件通常都有相应的API服务,如Nova-api提供计算服务API、Nova-api-metadata提供元数据服务、Nova-Scheduler负责调度等。 13. **云平台的硬件和软件依赖**:OpenStack云...
- `nova-api-metadata`: 提供实例的元数据服务,通常在多主机模式下与nova-network一起使用。 - `nova-compute`: 创建和销毁虚拟机实例,通过Hypervisor API与虚拟化技术如XenAPI、libvirt(KVM/QEMU)或VMware API...
对于OpenStack中的网络服务组件,如Neutron的L3、DHCP和Metadata代理程序,也要进行高可用配置,并且需要组织和管理相关网络资源。 ### 6. HAProxy节点服务器 HAProxy是一个高性能的负载均衡器,用于分配客户端...
- `cinder metadata-*`:设置或删除卷的元数据,包括显示、更新全部元数据等。 - `cinder migrate`:迁移卷到新的主机,支持数据迁移和不中断服务的迁移。 - `cinder qos-*`:QoS(服务质量)相关命令,用于关联...
### OpenStack网络管理知识点详解 #### 一、Linux网络虚拟化基础 在深入探讨OpenStack的网络管理之前,我们先来了解一下Linux网络虚拟化的基础知识。Linux网络虚拟化是指在单个物理服务器上创建多个独立的虚拟网络...
- Nova-api-metadata:提供虚拟机实例元数据访问。 - Nova-compute:负责虚拟机的启动、调度和运行。 - Nova-placement-api:用于管理资源放置,如虚拟机分配到物理主机。 - Nova-conductor:负责管理和协调Nova...
- **neutron-metadata-agent**: 元数据代理,为虚拟机实例提供元数据服务。 - **neutron-plugin**: 网络插件,实现了具体的网络逻辑,例如Open vSwitch、Linux Bridge等。 ##### 2. 创建虚拟机实例的流程 - **...
Mysql 是一个数据库管理系统,在 OpenStack 中用于存储 metadata。这里安装 Mysql 服务,并配置 Mysql 服务。 Rabbitmq 服务安装: Rabbitmq 是一个消息队列服务,在 OpenStack 中用于实现消息队列。这里安装 ...
### OpenStack API 知识点详解 #### 一、OpenStack API 概述 OpenStack 是一个开源的云计算管理平台项目,它提供了一系列用于构建和管理云环境的服务。OpenStack API 是实现这些服务之间交互的核心组件之一。通过 ...
那么,为什么instance c1能够成功获取metadata呢? 这背后的机制是OpenStack自动在instance的路由表中添加了一条特殊路由,使得对169.254.169.254的任何请求都会被转发到特定的IP,例如这里提到的17.17.17.1。这个...
+ 维护编辑 metadata_agent 配置:metadata_agent config-set --flag <flag> 块存储常用命令 块存储是 OpenStack 的一种核心服务,负责块存储的管理。下面是块存储常用命令: * 查询类: + 查看块存储服务及...
然后按照Ceph的安装指南,依次在所有存储节点上部署Ceph守护进程,包括OSD(Object Storage Daemon)、Mon(Monitor)和MDS(Metadata Server)。 - **IP规划**:确保每个节点有明确的管理IP、存储IP和对外服务IP...
sudo apt-get install -y neutron-server neutron-plugin-ml2 neutron-linuxbridge-agent neutron-dhcp-agent neutron-metadata-agent ``` 配置Neutron的网络拓扑、物理网络桥接、DHCP代理等。 ### 配置计算节点 ...
- `metadata-items`: 每个实例允许的元数据项数量。 - `ram`: 每个租户允许的实例RAM(以MB为单位)。 - `security-group-rules`: 每个安全组允许的规则数量。 - `security-groups`: 每个租户允许的安全组数量。...
这些组件是实现网络功能的关键部分,例如,***.***.***.***地址通常用于启动时的metadata服务,为实例提供附加的配置信息。部署时还需考虑磁盘性能、UserData的配置和错误处理等问题。 在OpenStack的实战操作过程中...
Metadata Service 是 OpenStack 中的关键组件,它为实例(instance)提供了获取元数据(metadata)的能力。这些元数据通常包括配置信息、用户数据等,对于实例的初始化和自定义配置至关重要。下面我们将深入探讨 ...
总的来说,OpenStack 中 instance 获取 metadata 的过程是一个涉及多个组件协作的过程,包括 nova-api-metadata、neutron-metadata-agent 和 neutron-ns-metadata-proxy,以及 l3-agent 或 dhcp-agent。理解这一过程...
在OpenStack环境中,实例(instance)获取metadata是一个关键的过程,它涉及到网络配置和服务协同工作,以便实例能够获取必要的配置信息,如元数据(metadata)。在本案例中,我们将深入探讨这个过程,特别是在一个...
### Mirantis OpenStack 7.0 文件格式参考 #### 概述 Mirantis OpenStack 7.0 文件格式参考文档提供了详细的配置文件说明,这些文件是用于部署和管理基于OpenStack环境的关键组成部分。该文档主要面向熟悉网络和云...
### OpenStack API 大全解析 #### 一、概述 OpenStack API大全是关于OpenStack最新版本API的全面文档,该文档提供了详细的API接口描述、使用方法及注意事项,旨在帮助开发者更好地利用OpenStack构建和管理云环境。...