IBM Cloud Docs
从实例中读取元数据

从实例中读取元数据

最常见的情况是,你想从运行中的实例中收集元数据,并用它来引导另一个虚拟服务器实例。 其他时候,您可能需要收集有关网络附件或卷宗附件的信息。 查看启用元数据服务、创建实例身份访问令牌和检索元数据的一般程序和分步说明。

访问实例元数据的一般程序

表 1 介绍了访问元数据的步骤。 该信息提供了每个步骤的上下文,并链接到用于完成该步骤的特定信息。 在实际环境中,步骤 3-5 更有可能由实例的初始化软件在启动时或使用 cloud-init 启动。

获取元数据的一般程序
步骤 上下文 已调用服务 用户操作
1 IBM Cloud VPC UI,CLI 和 API 元数据服务默认为禁用。 您可以通过控制台、CLI 或 API 在现有实例上启用元数据服务。 客户用户数据是在创建实例时指定的。
2 IBM Cloud
通过正常启动操作登录实例。
3 VPC 实例 元数据服务 运行 curl 命令,调用元数据令牌服务 获取实例身份访问令牌
4 VPC 实例 元数据服务 运行 curl 命令,调用元数据服务 检索实例信息。 将传递来自上一步的令牌并返回元数据。
5 VPC 实例
解析上一步中返回的 JSON 以获取用户数据。

用于从实例访问元数据的端到端过程

在控制台中找到正在运行的实例并启用元数据服务

  1. IBM Cloud 控制台中,单击导航菜单图标菜单图标 > 基础架构 VPC 图标 > 计算 > 虚拟服务器实例

  2. 在列表中找到正在运行的实例。 单击实例名称,显示其详细信息。 在“概览”选项卡上,滚动到“高级配置”详细信息,然后单击切换按钮启用元数据服务。

  3. 如果实例已有浮动 IP 地址(显示在 "网络 "选项卡上),则使用该地址建立与服务器的安全连接。 如果没有浮动 IP 地址,请为其分配一个。 有关详细信息,请参阅创建虚拟服务器实例主题中的 下一步

通过 CLI 查找运行中的实例并启用元数据服务

  1. 登录 IBM Cloud CLI。

  2. 使用 ibmcloud is instances 命令查找正在运行的实例,该命令会列出区域内可用的实例。

    $ ibmcloud is instances
    Listing instances in all resource groups and region us-south under account Test Account as user test.user@ibm.com...
    ID                                          Name                    Status    Reserved IP    Floating IP      Profile    Image                                VPC                         Zone         Confidential Compute Mode   Enable Secure Boot   Resource group   Reservation Name   Cluster Network ID   Cluster Network Name   Cluster Network Attachments   
    0717_9c55d9d2-0685-4300-b475-49eb1b8c1faf   my-virtual-server-1     running   10.240.0.6     -                bx2-2x8    ibm-ubuntu-24-04-2-minimal-amd64-1   my-test-vpc                 us-south-1   disabled                    false                defaults         -                  -                    -                      -   
    0727_ed12480a-40a4-41a0-98e3-6dfac8b25ad6   my-virtual-server-2     running   10.240.64.11   169.47.94.48     bx2-2x8    ibm-ubuntu-24-04-6-minimal-amd64-3   my-test-vpc                 us-south-2   disabled                    false                defaults         -                  -                    -                      -   
    0727_d7ff31ef-75ed-42c6-b0fb-a5837a63d722   my-virtual-server-3     running   10.240.64.12   52.116.204.232   bx2-2x8    ibm-redhat-9-2-minimal-amd64-5       my-test-vpc                 us-south-2   disabled                    false                defaults         -                  -                    -                      -   
    

    元数据服务在所有库存和定制映像以及 CPU 概要文件上都受支持。

  3. 运行 ibmcloud is instance 命令确认元数据服务是否已启用。 下面的示例显示了 false 的值。

    $ ibmcloud is instance 0727_ed12480a-40a4-41a0-98e3-6dfac8b25ad6
    Getting instance 0727_ed12480a-40a4-41a0-98e3-6dfac8b25ad6 under account Test Account as user test.user@ibm.com...
    
    ID                                    0727_ed12480a-40a4-41a0-98e3-6dfac8b25ad6   
    Name                                  my-virtual-server-2   
    CRN                                   crn:v1:bluemix:public:is:us-south-2:a/a1234567::instance:0727_ed12480a-40a4-41a0-98e3-6dfac8b25ad6   
    Status                                running   
    Availability policy on host failure   restart   
    Confidential Compute Mode             disabled   
    Enable Secure Boot                    false   
    Startable                             true   
    Profile                               bx2-2x8   
    Architecture                          amd64   
    vCPU Manufacturer                     intel   
    vCPUs                                 2   
    Memory(GiB)                           8   
    Bandwidth(Mbps)                       4000   
    Volume bandwidth(Mbps)                1000   
    Network bandwidth(Mbps)               3000   
    Lifecycle Reasons                     Code   Message      
                                          -      -      
    
    Lifecycle State                       stable   
    Metadata service                      Enabled   Protocol   Response hop limit      
                                          false     http       1      
    
    Image                                 ID                                          Name      
                                          r006-aa2af291-45b3-4f18-801c-8b7985e928f7   ibm-ubuntu-24-04-6-minimal-amd64-3      
    
    Numa Count                            1   
    VPC                                   ID                                          Name      
                                          r006-01030e3c-2663-4f7d-ac55-651929dafe37   my-test-vpc      
    
    Zone                                  us-south-2   
    Resource group                        ID                                 Name      
                                          6edefe513d934fdd872e78ee6a8e73ef   defaults      
    
    Created                               2025-03-06T19:24:02+00:00   
    Network Attachments                   Interface   Name   ID                                          Subnet         Subnet ID                                   Floating IP    VNI                                         Reserved IP      
                                          Primary     eth0   0727-a3ff4d3e-be95-4a52-8025-b55b3c3285ea   my-subnet-01   0727-f24237f5-bdf0-4b94-ab4c-167a44b8bcb5   169.47.94.48   0727-dda9244a-64b9-421b-87e9-70549a70b4c3   10.240.64.11      
    
    Boot volume                           ID                                          Name                                Attachment ID                               Attachment name      
                                          r006-9afd6e01-0466-4e7b-a38b-75bf39469a42   eat-client-poc-boot-1741289020000   0727-241f39a8-3573-4ebc-b512-33508eb970c9   undaunted-starved-slander-galleria      
    
    Reservation Affinity Policy           automatic   
    Reservation Affinity Pool             -   
    Reservation                           -   
    Health State                          ok   
    
  4. 运行带有 --metadata-service true 选项的 ibmcloud is instance-update 命令,启用元数据服务。

    $ ibmcloud is instance-update  0727_ed12480a-40a4-41a0-98e3-6dfac8b25ad6 --metadata-service true
    Updating instance 0727_ed12480a-40a4-41a0-98e3-6dfac8b25ad6 under account Test Account as user test.user@ibm.com...
    
    ID                                    0727_ed12480a-40a4-41a0-98e3-6dfac8b25ad6   
    Name                                  my-virtual-server-2   
    CRN                                   crn:v1:bluemix:public:is:us-south-2:a/a1234567::instance:0727_ed12480a-40a4-41a0-98e3-6dfac8b25ad6   
    Status                                running   
    Availability policy on host failure   restart   
    Confidential Compute Mode             disabled   
    Enable Secure Boot                    false   
    Startable                             true   
    Profile                               bx2-2x8   
    Architecture                          amd64   
    vCPU Manufacturer                     intel   
    vCPUs                                 2   
    Memory(GiB)                           8   
    Bandwidth(Mbps)                       4000   
    Volume bandwidth(Mbps)                1000   
    Network bandwidth(Mbps)               3000   
    Lifecycle Reasons                     Code   Message      
                                          -      -      
    
    Lifecycle State                       stable   
    Metadata service                      Enabled   Protocol   Response hop limit      
                                          true      http       1      
    
    Image                                 ID                                          Name      
                                          r006-aa2af291-45b3-4f18-801c-8b7985e928f7   ibm-ubuntu-24-04-6-minimal-amd64-3      
    
    Numa Count                            1   
    VPC                                   ID                                          Name      
                                          r006-01030e3c-2663-4f7d-ac55-651929dafe37   my-test-vpc      
    
    Zone                                  us-south-2   
    Resource group                        ID                                 Name      
                                          6edefe513d934fdd872e78ee6a8e73ef   defaults      
    
    Created                               2025-03-06T19:24:02+00:00   
    Network Attachments                   Interface   Name   ID                                          Subnet              Subnet ID                                   Floating IP    VNI                                         Reserved IP      
                                          Primary     eth0   0727-a3ff4d3e-be95-4a52-8025-b55b3c3285ea   my-subnet-01   0727-f24237f5-bdf0-4b94-ab4c-167a44b8bcb5   169.47.94.48   0727-dda9244a-64b9-421b-87e9-70549a70b4c3   10.240.64.11      
    
    Boot volume                           ID                                          Name                                Attachment ID                               Attachment name      
                                          r006-9afd6e01-0466-4e7b-a38b-75bf39469a42   eat-client-poc-boot-1741289020000   0727-241f39a8-3573-4ebc-b512-33508eb970c9   undaunted-starved-slander-galleria      
    
    Reservation Affinity Policy           automatic   
    Reservation Affinity Pool             -   
    Reservation                           -   
    Health State                          ok
    
  5. 如果实例已有浮动 IP 地址,则使用该地址建立与服务器的安全连接。 如果没有浮动 IP 地址,请为其分配一个。 有关详细信息,请参阅创建虚拟服务器实例主题中的 下一步

使用 API 查找运行中的实例并启用元数据服务

  1. 通过 列出区域中可用的实例 来找到正在运行的实例。 从回复中选择实例 ID。

    curl -X GET "$vpc_api_endpoint/v1/instances?version=2025-05-13&generation=2" -H "Authorization: Bearer $iam_token"
    
  2. 读取所选实例的信息,以确认元数据服务是否已启用。

    curl -X GET "$vpc_api_endpoint/v1/instances/0727_ed12480a-40a4-41a0-98e3-6dfac8b25ad6?version=2025-05-13&generation=2" -H "Authorization: Bearer $iam_token"
    

    API 响应在 metadata_service 部分显示 "enabled": false

    {
     "availability_policy": {
         "host_failure": "restart",
         "host_maintenance": null
     },
     "bandwidth": 4000,
     "boot_volume_attachment": {
         "device": {
             "id": "0727-241f39a8-3573-4ebc-b512-33508eb970c9-mzpzd"
         },
         "href": "https://us-south.iaas.cloud.ibm.com/v1/instances/0727_ed12480a-40a4-41a0-98e3-6dfac8b25ad6/volume_attachments/0727-241f39a8-3573-4ebc-b512-33508eb970c9",
         "id": "0727-241f39a8-3573-4ebc-b512-33508eb970c9",
         "name": "undaunted-starved-slander-galleria",
         "volume": {
             "crn": "crn:v1:bluemix:public:is:us-south-2:a/a1234567::volume:r006-9afd6e01-0466-4e7b-a38b-75bf39469a42",
             "href": "https://us-south.iaas.cloud.ibm.com/v1/volumes/r006-9afd6e01-0466-4e7b-a38b-75bf39469a42",
             "id": "r006-9afd6e01-0466-4e7b-a38b-75bf39469a42",
             "name": "eat-client-poc-boot-1741289020000",
             "resource_type": "volume"
         }
     },
     "confidential_compute_mode": "disabled",
     "created_at": "2025-03-06T19:24:02.000Z",
     "crn": "crn:v1:bluemix:public:is:us-south-2:a/a1234567::instance:0727_ed12480a-40a4-41a0-98e3-6dfac8b25ad6",
     "disks": [],
     "enable_secure_boot": false,
     "health_reasons": [],
     "health_state": "ok",
     "href": "https://us-south.iaas.cloud.ibm.com/v1/instances/0727_ed12480a-40a4-41a0-98e3-6dfac8b25ad6",
     "id": "0727_ed12480a-40a4-41a0-98e3-6dfac8b25ad6",
     "image": {
         "crn": "crn:v1:bluemix:public:is:us-south:a/a1234567::image:r006-aa2af291-45b3-4f18-801c-8b7985e928f7",
         "href": "https://us-south.iaas.cloud.ibm.com/v1/images/r006-aa2af291-45b3-4f18-801c-8b7985e928f7",
         "id": "r006-aa2af291-45b3-4f18-801c-8b7985e928f7",
         "name": "ibm-ubuntu-24-04-6-minimal-amd64-3",
         "resource_type": "image"
     },
     "lifecycle_reasons": [],
     "lifecycle_state": "stable",
     "memory": 8,
     "metadata_service": {
         "enabled": false,
         "protocol": "http",
         "response_hop_limit": 1
     }
     .
     .
     .
    }
    
  3. 通过请求实例启用元数据服务。PATCH /instances 请求来启用元数据服务。

    curl -X PATCH "$vpc_api_endpoint/v1/instances/0727_ed12480a-40a4-41a0-98e3-6dfac8b25ad6?version=2025-05-13&generation=2" \
    -H "Authorization: Bearer $iam_token" \
    -d '{
         "metadata_service": {
            "enabled": true,
            "protocol": "http",
            "response_hop_limit": 1
            }
        }`    
    
  4. 如果实例已有浮动 IP 地址,则使用该地址建立与服务器的安全连接。 如果没有浮动 IP 地址,请为其分配一个。 有关详细信息,请参阅 登录实例

建立与虚拟服务器实例的安全连接

Linux

下面的示例显示了连接到基于 Linux 的服务器实例的命令语法。

ssh -i <path to your private key file> <default-user-account>@<floating ip address>

Windows

Windows 用户访问和使用元数据服务有额外要求。 有关详细信息,请参阅 设置 Windows 服务器以使用元数据服务

如果服务器运行的是 Windows 操作系统,请使用 RDP 客户端与其连接。

有关更多信息,请参阅连接到 Linux 实例连接到 Windows 实例

从元数据服务中收集信息

从虚拟服务器实例向身份 API 发出请求,以检索实例身份令牌。 指定令牌的有效期。 例如,您可以指定 3600 秒(1 小时)。

export instance_identity_token=`curl -X PUT "http://api.metadata.cloud.ibm.com/instance_identity/v1/token?version=2022-03-01"\
  -H "Metadata-Flavor: ibm"\
  -H "Accept: application/json"\
  -d '{
        "expires_in": 3600
      }' | jq -r '(.access_token)'`

响应会提供实例身份访问令牌。 解析器会将其保存到 .access_token 文件中。

jq jq 可能不会预装在创建实例时可用的所有 VPC 映像 。 在使用前,您可能需要安装 jq 或使用您选择的其他解析器。

读取初始化信息

获得身份令牌后,现在就可以向元数据服务发出 API 请求,以收集初始化信息:

curl -X GET "http://api.metadata.cloud.ibm.com/metadata/v1/instance/initialization?version=2024-11-12"\
   -H "Accept: application/json"\
   -H "Authorization: Bearer $instance_identity_token"\
   | jq -r

API 响应包含诸如 SSH 密钥和用户数据等信息,这些信息是在虚拟服务器配置时指定的。 如果配置了密码,那么还会返回该信息。 您可以使用此信息启动新的虚拟服务器实例。

检索实例信息

发送 GET "/metadata/v1/instance" 请求,检索实例的详细信息。

curl -X GET "$vpc_metadata_api_endpoint/metadata/v1/instance?version=2025-04-22" -H "Authorization: Bearer $instance_identity_token"

响应会列出实例的所有详细信息,包括网络接口、计算配置文件和卷附件。

{
  "boot_volume_attachment": {
    "id": "a8a15363-a6f7-4f01-af60-715e85b28141",
    "name": "my-boot-volume-attachment",
    "volume": {
      "crn": "crn:[...]",
      "id": "49c5d61b-41e7-4c01-9b7a-1a97366c6916",
      "name": "my-boot-volume"
    }
  },
  "created_at": "2021-10-19T16:11:57Z",
  "crn": "crn:[...]",
  "disks": [],
  "id": "eb1b7391-2ca2-4ab5-84a8-b92157a633b0",
  "image": {
    "crn": "crn:[...]",
    "id": "9aaf3bcb-dcd7-4de7-bb60-24e39ff9d366",
    "name": "my-image"
  },
  "memory": 8,
  "name": "my-instance",
  "network_interfaces": [
    {
      "id": "7ca88dfb-8962-469d-b1de-1dd56f4c3275",
      "name": "my-network-interface",
      "primary_ipv4_address": "10.0.0.32",
      "resource_type": "network_interface",
      "subnet": {
        "crn": "crn:[...]",
        "id": "bea6a632-5e13-42a4-b4b8-31dc877abfe4",
        "name": "my-subnet",
        "resource_type": "subnet"
      }
    }
  ],
  "primary_network_interface": {
    "id": "7ca88dfb-8962-469d-b1de-1dd56f4c3275",
    "name": "my-network-interface",
    "primary_ipv4_address": "10.0.0.32",
    "resource_type": "network_interface",
    "subnet": {
      "crn": "crn:[...]",
      "id": "bea6a632-5e13-42a4-b4b8-31dc877abfe4",
      "name": "my-subnet",
      "resource_type": "subnet"
    }
  },
  "profile": {
    "name": "bx2-2x8"
  },
  "resource_type": "instance",
  "vcpu": {
    "architecture": "amd64",
    "count": 2
  },
  "volume_attachments": [
    {
      "id": "a8a15363-a6f7-4f01-af60-715e85b28141",
      "name": "my-boot-volume-attachment",
      "volume": {
        "crn": "crn:[...]",
        "id": "49c5d61b-41e7-4c01-9b7a-1a97366c6916",
        "name": "my-boot-volume"
      }
    },
    {
      "id": "e77125cb-4df0-4988-a878-531ae0ae0b70",
      "name": "my-volume-attachment-1",
      "volume": {
        "crn": "crn:[...]",
        "id": "2cc091f5-4d46-48f3-99b7-3527ae3f4392",
        "name": "my-data-volume"
      }
    }
  ],
  "volume_bandwidth_qos_mode": "weighted",
  "vpc": {
    "crn": "crn:[...]",
    "id": "f0aae929-7047-46d1-92e1-9102b07a7f6f",
    "name": "my-vpc",
    "resource_type": "vpc"
  },
  "zone": {
    "name": "us-south-1"
  }
}
  1. 使用其他 API 方法获取更多有关实例的信息,如卷和网络附件,或收集有关 SSH 密钥、放置组或虚拟网络接口的信息。 有关详细信息,请参阅 元数据服务 API 参考资料和 元数据服务信息摘要

下表列出了 API GET 请求的更多方法,您可以使用这些方法获取有关实例的特定信息。

元数据 URI
API 端点 描述
/metadata/v1/instance/cluster_network_attachments 集群网络附件列表
/metadata/v1/instance/cluster_network_attachments/{id} 读取群集网络附件
/metadata/v1/instance/network_attachments 列出网络附件
/metadata/v1/instance/network_attachments/{id} 检索网络附件
/metadata/v1/instance/network_interfaces 列出实例所有网络接口的元数据。
/metadata/v1/instance/network_interfaces/{id} 按 ID 检索网络接口的元数据。
/metadata/v1/instance/volume_attachments 列出实例所有卷附件的元数据。
/metadata/v1/instance/volume_attachment/{id} 按 ID 检索卷附件的元数据。

后续步骤

将可信概要文件用于实例,并生成从实例身份访问令牌到其他启用 IAM 的服务的 IAM 令牌。 请参阅 使用可信概要文件来调用启用 IAM 的服务