IBM Cloud Docs
更新到 2022-03-29 版本 (网络接口,安全组)

更新到 2022-03-29 版本 (网络接口,安全组)

正如 版本中所描述的,VPC API 的大多数更改都与早期版本完全兼容,因此无论客户端请求的 API 版本如何,所有客户端都可以使用这些更改。 但是,VPC API 的 2022-03-29 发行版需要在支持保留 IP 地址功能方面进行不兼容的更改:

  • IP 地址现在建模为对象 (资源),而不是字符串。
  • 现在,安全组必须与目标相关联,而不是与网络接口相关联。

如果客户机继续指定 VPC API 的 V 2022-03-28 或更低版本,那么不需要进行任何更改,但这些客户机仍无法从保留的 IP 地址中完全受益。 有关保留地址的更多信息,请参阅 管理 IP 地址

即使您不打算使用保留的 IP 地址,为避免客户端功能出现倒退,请在客户端指定 2022-03-29 或更高版本之前阅读并遵循 需要采取的行动 部分。

VPC 实例元数据 API 尚不支持保留 IP 地址。 使用元数据 API 的客户机不需要更改即可使用 V 2022-03-29 或更高版本。

需要采取的行动

在客户端指定 2022-03-29 或更高版本之前,请按照以下步骤操作,以避免客户端功能出现倒退。

迁移 IP 地址的使用

在将客户端迁移到 2022-03-29 或更高版本的 API 之前,请检查代码中是否使用了 primary_ipv4_address 属性。 如 示例 所示,从版本 2022-03-29 开始,primary_ipv4_address 字符串属性被 primary_ip 对象属性取代,后者包括一个 address 子属性。 因此,您需要以适合编程语言的方式将 primary_ipv4_address 的所有实例更改为 primary_ip.address

虽然 primary_ipv4_address 仅显示在 NetworkInterfaceNetworkInterfaceReferenceNetworkInterfacePrototype 模式 (及其密切相关的 BareMetalNetworkInterface 模式) 中,但这些模式在 VPC API 中广泛使用。 因此,尽管不兼容的更改仅限于 primary_ipv4_address 属性,但许多操作都受到了影响。 请参阅 已更改的操作 以获取完整列表。

迁移安全组关联的使用

作为 2021-02-23 发行版 的一部分,提供了安全组目标方法,并且不推荐使用特定于网络接口的原始方法。 API V 2022-03-29 将除去对那些不推荐使用的方法的支持。 如 示例 中所示,安全组目标方法包含不推荐使用的方法的功能。 安全组目标还允许安全组与其他 VPC 资源 (例如端点网关和负载均衡器) 相关联。

不推荐使用的 GETPUT 方法返回 NetworkInterface 响应模式,但新的 GETPUT 方法返回 NetworkInterfaceReference 响应模式。 如果客户机正在访问 NetworkInterfaceReference 中的属性以外的属性,那么客户机需要调用 GET /instances/{instance_id}/network_interfaces/{id} 以单独检索这些属性。

此外,如果客户机先前正在访问 GET /security_groups 返回的 network_interfaces[] 属性,那么需要改为访问 targets[] 属性。 如果您的客户机在访问 network_interfaces[] 中的属性时超出了 NetworkInterfaceReference 中的属性,那么您的客户机需要调用 GET /instances/{instance_id}/network_interfaces/{id} 以单独检索这些属性。

示例

这些示例比较 2022-03-29 版本化更改前后的差异。

IP 地址示例

以下示例比较了如何在 2022-03-29 版本化更改之前和之后发出 POST /instances 调用以在其主网络接口上供应具有特定 IP 地址的实例,以及如何检索该 IP 地址。

指定 API 版本 2022-03-28 或更低版本:

curl -X POST \
  "$vpc_api_endpoint/v1/instances?version=2022-03-28&generation=2" \
  -H "Authorization: Bearer $iam_token" \
  -d '{
        "image": {"id": "'"$image_id"'"},
        "keys": [{"id": "'"$key_id"'"}],
        "primary_network_interface": {
          "primary_ipv4_address": "10.240.0.5",
          "subnet": {"id": "'"$subnet_id"'"}
        },
        "zone": {"name": "'"$zone"'"}
      }'

要检索地址:

curl -X GET \
  "$vpc_api_endpoint/v1/instances/$instance_id?version=2022-03-28&generation=2" \
  -H "Authorization: Bearer $iam_token" | jq '.primary_network_interface.primary_ipv4_address'

指定 API V 2022-03-29 或更高版本:

curl -X POST \
  "$vpc_api_endpoint/v1/instances?version=2022-03-29&generation=2" \
  -H "Authorization: Bearer $iam_token" \
  -d '{
        "image": {"id": "'"$image_id"'"},
        "keys": [{"id": "'"$key_id"'"}],
        "primary_network_interface": {
          "primary_ip": {
            "address": "10.240.0.5"
          },
          "subnet": {"id": "'"$subnet_id"'"}
        },
        "zone": {"name": "'"$zone"'"}
      }'

要检索地址:

curl -X GET \
  "$vpc_api_endpoint/v1/instances/$instance_id?version=2022-03-29&generation=2" \
  -H "Authorization: Bearer $iam_token" | jq '.primary_network_interface.primary_ip.address'

以下示例比较了如何在 2022-03-29 版本化更改前后对具有特定 IP 地址的现有实例进行 POST /instances/{id}/network_interface 调用以创建新的网络接口,以及如何检索地址。

指定 API 版本 2022-03-28 或更低版本:

curl -X POST \
  "$vpc_api_endpoint/v1/instances/$instance_id/network_interfaces?version=2022-03-28&generation=2" \
  -H "Authorization: Bearer $iam_token" \
  -d '{
        "primary_ipv4_address": "10.240.0.5",
        "subnet": {"id": "'"$subnet_id"'"}
      }'

要检索地址:

curl -X GET \
  "$vpc_api_endpoint/v1/instances/$instance_id/network_interfaces/$network_interface_id?version=2022-03-28&generation=2" \
  -H "Authorization: Bearer $iam_token" | jq '.primary_ipv4_address'

指定 API V 2022-03-29 或更高版本:

curl -X POST \
  "$vpc_api_endpoint/v1/instances/$instance_id/network_interfaces?version=2022-03-29&generation=2" \
  -H "Authorization: Bearer $iam_token" \
  -d '{
        "primary_ip":
          {
           "address": "10.240.0.5"
          },
        "subnet": {"id": "'"$subnet_id"'"}
      }'

要检索地址:

curl -X GET \
  "$vpc_api_endpoint/v1/instances/$instance_id/network_interfaces/$network_interface_id?version=2022-03-29&generation=2" \
  -H "Authorization: Bearer $iam_token" | jq '.primary_ip.address'

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

安全组关联示例

以下示例比较如何在 2022-03-29 版本化更改之前和之后将网络接口放入安全组中。

指定 API 版本 2022-03-28 或更低版本:

curl -X PUT \
  "$vpc_api_endpoint/v1/security_groups/$security_group_id/network_interfaces/$id?version=2022-03-28&generation=2" \
  -H "Authorization: Bearer $iam_token"

指定 API V 2022-03-29 或更高版本:

curl -X PUT \
  "$vpc_api_endpoint/v1/security_groups/$security_group_id/targets/$id?version=2022-03-29&generation=2" \
  -H "Authorization: Bearer $iam_token"

以下示例比较如何在 2022-03-29 版本化更改之前和之后从安全组中除去网络接口。

指定 API 版本 2022-03-28 或更低版本:

curl -X DELETE \
  "$vpc_api_endpoint/v1/security_groups/$security_group_id/network_interfaces/$id?version=2022-03-28&generation=2" \
  -H "Authorization: Bearer $iam_token"

指定 API V 2022-03-29 或更高版本:

curl -X DELETE \
  "$vpc_api_endpoint/v1/security_groups/$security_group_id/targets/$id?version=2022-03-29&generation=2" \
  -H "Authorization: Bearer $iam_token"

已更改的操作

IP 地址

下表列出了请求体、响应体或两者中 primary_ipv4_address 变为 primary_ip 的操作。 句点 (.) 指示在顶级响应模式中已将 primary_ipv4_address 更改为 primary_ip

已更改属性的操作列表。
方法 路径 已更改的请求属性 已更改的响应属性
GET /bare_metal_servers .bare_metal_servers[].network_interfaces[], .bare_metal_servers[].primary_network_interface
POST /bare_metal_servers .network_interfaces[], primary_network_interface .network_interfaces[], .primary_network_interface
GET /bare_metal_servers/{id} .network_interfaces[], .primary_network_interface
PATCH /bare_metal_servers/{id} .network_interfaces[], .primary_network_interface
GET /bare_metal_servers/{id}/network_interfaces .network_interfaces[]
POST /bare_metal_servers/{id}/network_interfaces . .
GET /bare_metal_servers/{bare_metal_server_id}/network_interfaces/{id} .
GET /bare_metal_servers/{bare_metal_server_id}/network_interfaces/{id}/floating_ips .floating_ips[].target
GET /bare_metal_servers/{bare_metal_server_id}/network_interfaces/{network_interface_id}/floating_ips/{id} .target
PUT /bare_metal_servers/{bare_metal_server_id}/network_interfaces/{network_interface_id}/floating_ips/{id} .target
GET /floating_ips .floating_ips[].target
POST /floating_ips .target
GET /floating_ips/{id} .
PATCH /floating_ips/{id} .
GET /instance/templates .templates[].network_interfaces[], .templates[].primary_network_interface
POST /instance/templates .network_interfaces[], primary_network_interface .network_interfaces[], .primary_network_interface
GET /instance/templates/{id} .network_interfaces[], .primary_network_interface
PATCH /instance/templates/{id} .network_interfaces[], .primary_network_interface
GET /instances .instances[].network_interfaces[], .instances[].primary_network_interface
POST /instances .network_interfaces[], primary_network_interface .network_interfaces[], .primary_network_interface
GET /instances/{id} .network_interfaces[], .primary_network_interface
PATCH /instances/{id} .network_interfaces[], .primary_network_interface
GET /instances/{id}/network_interfaces .network_interfaces[]
POST /instances/{id}/network_interfaces . .
GET /instances/{instance_id}/network_interfaces/{id} .
GET /instances/{instance_id}/network_interfaces/{id}/floating_ips .floating_ips[].target
GET /instances/{instance_id}/network_interfaces/{network_interface_id}/floating_ips/{id} .target
PUT /instances/{instance_id}/network_interfaces/{network_interface_id}/floating_ips/{id} .target
GET /vpcs/{id}/default_security_group .network_interfaces[]

安全组关联

下表列出了在完成到安全组目标的迁移过程中除去的方法或属性。

已删除的方法或属性列表。
方法 路径 已更改的请求属性 已更改的响应属性
GET /security_groups .security_groups[].network_interfaces
GET /security_groups/{id}/network_interfaces
DELETE /security_groups/{security_group_id}/network_interfaces/{id}
GET /security_groups/{security_group_id}/network_interfaces/{id}
PUT /security_groups/{security_group_id}/network_interfaces/{id}