虚拟机元数据简介


每个虚拟机 (VM) 实例都将其元数据存储在元数据服务器上。您的虚拟机可自动获得对元数据服务器 API 的访问权限,而无需任何额外的授权。元数据以 key:value 对的形式存储。

系统提供一组默认的元数据键以供在 Compute Engine 上运行的虚拟机使用。如需查看这些默认元数据键的列表,请参阅默认元数据值。您也可以在单个虚拟机或项目中使用自己的自定义元数据键。如需了解详情,请参阅设置自定义元数据

设置默认或自定义元数据条目后,您便可以查看该虚拟机或项目的元数据信息。如需查看元数据,请参阅查询虚拟机元数据

使用虚拟机元数据

以下部分介绍了您可以使用元数据条目来管理虚拟机的几种场景。

启动和关停脚本

元数据服务器在与启动和关停脚本结合使用时会特别有用,因为您可以使用元数据服务器以编程方式获取虚拟机的专属信息,而无需额外的授权。

例如,您可以编写一个启动脚本来获取虚拟机外部 IP 地址的元数据 key:value 对,并在您的脚本中使用该 IP 地址来设置数据库。由于每个虚拟机的默认元数据键都相同,因此您可以重复使用您的脚本,而无需针对每个虚拟机更新该脚本。这有助于您为应用创建更加可靠的代码。

宿主机维护

元数据服务器通过 scheduling/ 元数据目录条目和 maintenance-event 特性提供有关虚拟机调度选项的信息。您可以使用这些元数据值在维护事件即将发生时通知您,以便您为该事件准备好环境。如需了解详情,请参阅获取实时迁移通知

客户机特性

客户机特性是指应用在虚拟机上运行期间可写入的特定类型的自定义元数据。客户机特性仅适用于需要少量不常更改的数据的用例,如需详细了解客户机特性,请参阅设置和查询客户机特性

元数据安全注意事项

当您发出从元数据服务器获取信息的请求时,您的请求和后续元数据响应永远不会传到运行虚拟机的物理宿主机以外。

不过,任何可以查询元数据网址的进程都可以访问元数据服务器中的所有值。这包括您写入该服务器的任何自定义元数据值。Google 建议您谨慎将敏感值写入元数据服务器或运行第三方进程。

限制

  • 元数据服务器会自动拒绝任何包含 X-Forwarded-For 标头的请求。此标头通常表示该请求是代理的,可能不是由已获授权的用户发出的请求。出于安全考虑,所有此类请求都会遭到拒绝。

  • 请注意,使用 curl 命令在服务器中检索元数据时,请求路径不支持某些编码字符。编码字符仅在查询路径中受支持。

    例如,以下请求可能无法正常运行:

    curl "http://metadata.google.internal/computeMetadata/v1/VM/service-accounts/123456789-compute%40developer.gserviceaccount.com/?query_path=https%3A%2F%2Flocalhost%3A8200%2Fexample%2Fquery&another_param=true" -H "Metadata-Flavor: Google"

    为使此请求能够正常运行,您必须将请求路径中不受支持的编码字符 (%40) 替换为等效的受支持值 (@)。

    curl "http://metadata.google.internal/computeMetadata/v1/VM/service-accounts/1234567898-compute@developer.gserviceaccount.com/?query_path=https%3A%2F%2Flocalhost%3A8200%2Fexample%2Fquery&another_param=true" -H "Metadata-Flavor: Google"

    下表汇总了请求路径不支持的编码字符。

    编码字符 接受的值
    %21
    
    !
    %24
    
    $
    %27
    
    '
    %28
    
    (
    %29
    
    )
    %2A
    
    *
    %2C
    
    ,
    %40
    
    @

元数据请求的组成部分

下表总结了元数据查询请求的主要部分。

组件 说明
根网址

所有元数据值都会定义为以下根网址下面的子路径:


http://metadata.google.internal/computeMetadata/v1
请求标头

您的所有请求中都必须包含以下标头:


Metadata-Flavor: Google

此标头表明请求是为了检索元数据值而发出的(而非由不安全的来源意外发出),并且允许元数据服务器返回您请求的数据。如果您不提供此标头,则元数据服务器会拒绝您的请求。

后续步骤