查看和维护虚拟机元数据

每个虚拟机 (VM) 都将其元数据存储在元数据服务器上。您可以以键值对 (KVP) 的形式在 Google Distributed Cloud (GDC) 气隙设备虚拟机上添加、移除和查看元数据。

您可以使用元数据键值对来存储有助于您识别虚拟机的信息,例如服务器名称。您可以从虚拟机外部和内部访问元数据,并使用元数据在不同系统之间传递信息。

准备工作

如需使用 gdcloud 命令行界面 (CLI) 命令,请确保您已下载、安装并配置 gdcloud CLI。GDC 隔网设备的全部命令都使用 gdcloudkubectl CLI,并且需要操作系统 (OS) 环境。

获取 kubeconfig 文件路径

如需针对管理 API 服务器运行命令,请确保您拥有以下资源:

  1. 找到管理 API 服务器名称,或向平台管理员 (PA) 询问服务器名称。

  2. 登录并生成管理 API 服务器的 kubeconfig 文件(如果您还没有)。

  3. 使用该路径替换这些说明中的 MANAGEMENT_API_SERVER{"</var>"}}

请求权限和访问权限

如需执行本页面中列出的任务,您必须具有 Project VirtualMachine Admin 角色。按照相应步骤验证或让项目 IAM 管理员在虚拟机所在项目的命名空间中分配项目 VirtualMachine 管理员 (project-vm-admin) 角色。

对于使用 GDC 控制台或 gdcloud CLI 的虚拟机操作,请让您的项目 IAM 管理员为您分配“Project VirtualMachine Admin”角色和“Project Viewer”角色 (project-viewer)。

添加或移除元数据

本部分介绍了如何向现有虚拟机实例添加元数据以及从中移除元数据。 您可以使用元数据来存储要添加到虚拟机中的任意键值对。例如,您可能需要添加和管理自己的自定义元数据,以标识不同的环境,例如 testproduction

添加元数据

gdcloud

  • 向特定虚拟机实例添加元数据。您必须在命令中添加 --metadata--metadata-from-file 标志。如果您的使用情形需要,您也可以在同一命令中添加这两个标志:

    gdcloud compute instances add-metadata VM_NAME
        [--project=PROJECT]
        [--metadata=KEY=KEY_VALUE,[,KEY=KEY_VALUE,...]]
        [--metadata-from-file=KEY=LOCAL_FILE_PATH,]
    

    替换以下内容:

    • VM_NAME:虚拟机实例的名称。
    • PROJECT:虚拟机所在项目的名称。此值为可选值。
    • KEY:元数据对的键。
    • KEY_VALUE:元数据对的值。
    • LOCAL_FILE_PATH:来自本地文件的元数据对的值。

API

如需使用 API 添加元数据,您必须使用 STS 令牌。

  1. 使用 gdcloud CLI 生成 STS 令牌:

    gdcloud auth print-identity-token --audiences="https://metadata.ORG_SUFFIX"
    

    ORG_SUFFIX 替换为组织后缀。 例如,如果组织控制台网址为 https://console.example-org.com,则 ORG_SUFFIXexample-org.com

    输出类似于以下内容:

    STS-Bearer-QPN1nX6GVdoRKCpRx7FD-61gh6RAvWfM6sqjU2knw9n6RFn1jR2n4i1z1irH2HrMLf0tC3hqNaetYzoOBQ6hI2eS7-58_ZZGCMc_oARuX_T9Wmtwe4xlaIS97aDdu9KETEs0akoVYEsmFsWCu2Cu5pdiwjzSuWnRCMZwq9g8BmnPSck1Auf7rOfM7o2FoGE_lbLFZK4C8TCPdloDZAXYcLeNAQ
    
  2. 向特定虚拟机实例添加元数据:

    curl -X POST "https://metadata.ORG_SUFFIX/virtual-machines/metadata/v1/projects/PROJECT/vm/VM_NAME" \
    -H "Authorization: Bearer STS_TOKEN \
    -H "Content-Type: application/json" \
    -d "{"metadata": {"items": [{"key": "test-key", "value": "test-value"}]}}"
    

    替换以下内容:

    • ORG_SUFFIX:组织后缀。例如,如果组织控制台网址为 https://console.example-org.com,则 ORG_SUFFIXexample-org.com
    • VM_NAME:虚拟机实例的名称。
    • PROJECT:虚拟机所在项目的名称。此值为可选值。
    • STS_TOKEN:通过 gdcloud CLI 生成的 STS 令牌。

移除元数据

gdcloud

  • 从特定虚拟机实例中移除元数据。如果您要移除所有元数据条目,请使用 --all 标志。您必须在命令中使用 --all--keys 标志:

    gdcloud compute instances remove-metadata VM_NAME
        [--project=PROJECT]
        [--keys=KEY,[KEY,...]]
        [--all]
    

    替换以下内容:

    • VM_NAME:虚拟机实例的名称。
    • PROJECT:虚拟机所在项目的名称。此值为可选值。
    • KEY:元数据对的键字符串。

API

如需使用 API 移除元数据,您必须使用 STS 令牌。

  1. 使用 gdcloud CLI 生成 STS 令牌:

    gdcloud auth print-identity-token --audiences="https://metadata.ORG_SUFFIX"
    

    ORG_SUFFIX 替换为组织后缀。 例如,如果组织控制台网址为 https://console.example-org.com,则 ORG_SUFFIXexample-org.com

    输出类似于以下内容:

    STS-Bearer-QPN1nX6GVdoRKCpRx7FD-61gh6RAvWfM6sqjU2knw9n6RFn1jR2n4i1z1irH2HrMLf0tC3hqNaetYzoOBQ6hI2eS7-58_ZZGCMc_oARuX_T9Wmtwe4xlaIS97aDdu9KETEs0akoVYEsmFsWCu2Cu5pdiwjzSuWnRCMZwq9g8BmnPSck1Auf7rOfM7o2FoGE_lbLFZK4C8TCPdloDZAXYcLeNAQ
    
  2. 从特定虚拟机实例中移除元数据:

    curl -X POST "https://metadata.ORG_SUFFIX/virtual-machines/metadata/v1/projects/PROJECT/vm/VM_NAME" \
    -H "Authorization: Bearer STS_TOKEN" \
    -H "Content-Type: application/json" \
    -d "{"metadata": {"items": [{"key": "test-key", "value": "test-value"}]}}"
    

    替换以下内容:

    • ORG_SUFFIX:组织后缀。例如,如果组织控制台网址为 https://console.example-org.com,则 ORG_SUFFIXexample-org.com
    • VM_NAME:虚拟机实例的名称。
    • PROJECT:虚拟机所在项目的名称。
    • STS_TOKEN:通过 gdcloud CLI 生成的 STS 令牌。

查询元数据

gdcloud

  • 列出所有虚拟机实例元数据以查看元数据详情:

    gdcloud compute instances describe VM_NAME
        [--project=PROJECT]
    

    替换以下内容:

    • VM_NAME:虚拟机实例的名称。
    • PROJECT:虚拟机所在项目的名称。此值为可选值。

    输出类似于以下内容:

    ...
    metadata:
      items:
      - key: Key-1
        value: val12
      - key: key2
        value:
          lksdjfhk-user1
    

API

  1. 使用 gdcloud CLI 生成 STS 令牌:

    gdcloud auth print-identity-token --audiences="https://metadata.ORG_SUFFIX"
    

    ORG_SUFFIX 替换为组织后缀。

    输出类似于以下内容:

    STS-Bearer-QPN1nX6GVdoRKCpRx7FD-61gh6RAvWfM6sqjU2knw9n6RFn1jR2n4i1z1irH2HrMLf0tC3hqNaetYzoOBQ6hI2eS7-58_ZZGCMc_oARuX_T9Wmtwe4xlaIS97aDdu9KETEs0akoVYEsmFsWCu2Cu5pdiwjzSuWnRCMZwq9g8BmnPSck1Auf7rOfM7o2FoGE_lbLFZK4C8TCPdloDZAXYcLeNAQ
    
  2. 列出所有虚拟机实例元数据以查看元数据详情:

    curl "https://metadata.ORG_SUFFIX/virtual-machines/metadata/v1/projects/PROJECT/vm/VM_NAME" \
    -H "Authorization: Bearer STS_TOKEN" \
    -H "Content-Type: application/json"
    

    替换以下内容:

    • ORG_SUFFIX:组织后缀。例如,如果组织控制台网址为 https://console.example-org.com,则 ORG_SUFFIXexample-org.com
    • VM_NAME:虚拟机实例的名称。
    • PROJECT:虚拟机所在项目的名称。此值为可选值。
    • STS_TOKEN:通过 gdcloud CLI 生成的 STS 令牌。

    输出类似于以下内容:

    ...
    metadata:
      items:
      - key: Key-1
        value: val12
      - key: key2
        value:
          lksdjfhk-user1
    

从虚拟机内查询元数据

您可以在虚拟机内查询虚拟机元数据,而无需连接到元数据服务器。为此,请使用 curl 命令,并将适用的元数据键附加到元数据网址。

查询单个 KVP

从虚拟机内查询单个 KVP:

curl "http://metadata.google.internal/computeMetadata/v1/instance/attributes/KEY" -H "Metadata-Flavor: Google"

KEY 替换为您要查询的元数据对的键。

查询所有具有值的 KVP 对

从虚拟机内部查询具有键值的所有 KVP 对:

curl "http://metadata.google.internal/computeMetadata/v1/instance/attributes/?recursive=true" -H "Metadata-Flavor: Google"

查询所有没有值的元数据键

从没有键值的虚拟机内查询所有元数据键:

curl "http://metadata.google.internal/computeMetadata/v1/instance/attributes/?recursive=false" -H "Metadata-Flavor: Google"