更新到 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
仅显示在 NetworkInterface
,NetworkInterfaceReference
和 NetworkInterfacePrototype
模式 (及其密切相关的 BareMetalNetworkInterface
模式) 中,但这些模式在 VPC API 中广泛使用。 因此,尽管不兼容的更改仅限于
primary_ipv4_address
属性,但许多操作都受到了影响。 请参阅 已更改的操作 以获取完整列表。
迁移安全组关联的使用
作为 2021-02-23
发行版 的一部分,提供了安全组目标方法,并且不推荐使用特定于网络接口的原始方法。 API V 2022-03-29
将除去对那些不推荐使用的方法的支持。 如 示例 中所示,安全组目标方法包含不推荐使用的方法的功能。 安全组目标还允许安全组与其他
VPC 资源 (例如端点网关和负载均衡器) 相关联。
不推荐使用的 GET
和 PUT
方法返回 NetworkInterface
响应模式,但新的 GET
和 PUT
方法返回 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} |