配置别名 IP 范围

本文档介绍如何使用 Google Cloud Platform Console 和 gcloud 命令行工具来配置别名 IP 地址和别名 IP 范围。在执行这些命令之前,请查看别名 IP 概览页面。

限制

子网

  • 每个子网最多允许拥有五个次要 IP 范围。
  • 您不能同时添加和移除次要范围。添加和移除步骤必须分开执行。
  • 次要范围不支持 CIDR 扩展。

虚拟机实例

  • 所有虚拟机网络接口都支持别名 IP 范围。对于主要网络接口上的别名 IP 范围,系统会自动配置路由,但不会为次要接口自动配置。如果您有多个网络接口,则必须为其他接口配置政策路由
  • 一个虚拟机实例虚拟接口最多可以分配 10 个别名 IP 范围。
  • 可以添加或删除别名 IP 范围,但不能对其进行更新。
  • 如果从一台虚拟机中移除一个别名 IP 范围并将其分配给另一台虚拟机,该转变可能需要一分钟时间才能完成。
  • 别名 IP 地址不支持防火墙来源标记。也就是说,在防火墙规则中配置来源标记时,来源标记与虚拟机主要 IP 地址匹配,但与别名 IP 地址不匹配。可使用来源范围来允许或拒绝来自别名 IP 地址的入站流量。
  • 内部 DNS 将虚拟机名称解析为其主要 IP。别名 IP 的其他名称不会自动配置,但可以手动添加。

VPC 网络

  • 一个 VPC 网络中的所有虚拟机总共可以拥有多达 7000 个别名 IP 范围。
  • 同时添加或移除大量别名 IP 范围可能需要很长时间。例如,添加或删除 7000 个别名 IP 范围可能需要长达 10 分钟时间。
  • 如果存在次要子网范围,则无法删除自动模式 VPC 网络。
  • 在静态路由中,下一个跃点 IP 地址必须是虚拟机的主要 IP 地址。系统不支持将别名 IP 地址用作下一个跃点 IP 地址。
  • 系统不支持 IPv6 地址。
  • 只有 VPC 网络中支持别名 IP 范围,旧版网络不提供该支持。要确定您的网络类型,请列出您的网络。VPC 网络具有 customauto 模式。旧版网络具有 legacy 模式。

子网命令

虚拟机别名 IP 范围必须分配自虚拟机所在子网所拥有的范围。所有子网都有一个主要范围,这是定义子网的内部 IP 地址的标准范围。子网也可能具有内部 IP 地址的一个或多个次要 IP 范围。您可以从子网的主要或次要范围分配别名 IP 范围。

您必须为每个次要范围指定一个对子网唯一的名称。为虚拟机分配别名 IP 范围时,次要范围名称会告知 GCP 从哪个子网范围分配别名 IP。

所有主要和次要范围在 VPC 网络中的所有子网间都必须唯一,并且在通过 VPC 网络对等互连、VPN 或互连连接的任何网络中也必须唯一。

本部分介绍如何创建具有次要范围的子网、如何向现有子网添加次要范围,以及如何从子网中移除次要范围。在子网具有您想要使用的范围之后,请参阅虚拟机实例命令,了解有关将一个范围分配给虚拟机的说明。

创建具有一个或多个次要 CIDR 范围的子网

该命令假定您已经有 VPC 网络。如果还没有,请先创建一个 VPC 网络。

无论您是为虚拟机的主要接口还是某个次要接口创建子网,此命令都是相同的。

如果为别名 IP 分配使用次要范围,您就可以将用于虚拟机中托管的服务的 IP 空间分离出来,从而更轻松地创建防火墙规则,仅允许访问虚拟机上运行的服务,禁止访问虚拟机的主要 IP 地址。

Console

  1. 转到 Google Cloud Platform Console 中的“VPC 网络”页面。
    转到“VPC 网络”页面
  2. 点击现有网络的名称。
  3. 点击添加子网
  4. 为新子网输入一个名称
  5. 指定区域
  6. 以 CIDR 表示法输入 IP 地址范围。(示例:10.65.61.0/24)
  7. 点击创建次要 IP 范围
  8. 输入一个子网范围名称
  9. 以 CIDR 表示法输入次要 IP 范围。(示例:10.9.0.0/24)
  10. 要添加额外的次要 IP 范围,请针对每个范围点击添加 IP 范围,然后提供名称和范围。
  11. 点击添加

gcloud

gcloud compute networks subnets create s1 \
    --network [NETWORK_NAME] \
    --region [REGION] \
    --range 10.65.61.0/24 \
    --secondary-range [RANGE_NAME]=[RANGE_CIDR][,[RANGE_NAME]=[RANGE_CIDR]...]

其中:

  • [NETWORK_NAME] 是您要在其中创建子网的网络的名称。
  • [REGION] 是您正在其中创建子网的区域。
  • [RANGE_NAME]=[RANGE_CIDR] 是从中获取别名 IP 范围的次要范围的名称,以及别名 IP 范围本身。例如:range1=10.9.0.0/24

如需查看完整的语法,请参阅 gcloud 文档

向现有子网添加次要 CIDR 范围

此过程假定您有一个要使用的子网,但您需要添加一个或多个次要范围。

无论您是为虚拟机的主要接口还是某个次要接口创建子网,此命令都是相同的。

如果为别名 IP 分配使用次要范围,那么就可以更轻松地创建防火墙规则来允许访问虚拟机上运行的服务,并禁止访问虚拟机的主要 IP 地址。

Console

使用 gcloud 命令。

gcloud

gcloud compute networks subnets update [SUBNET_NAME] \
    --region [REGION] \
    --add-secondary-ranges [RANGE_NAME]=[RANGE_CIDR],[[RANGE_NAME]=[RANGE_CIDR],...]

其中:

  • [SUBNET_NAME] 是您要在其中添加次要范围的子网的名称。
  • [REGION] 是您正在其中创建子网的区域。
  • [RANGE_NAME]=[RANGE_CIDR] 是从中获取别名 IP 范围的次要范围的名称,以及别名 IP 范围本身。例如:range1=10.9.0.0/24

如需查看完整的语法,请参阅 gcloud 文档

从子网中移除次要 CIDR 范围

Console

使用 gcloud 命令。

gcloud

gcloud compute networks subnets update [SUBNET_NAME] \
    --region [REGION] \
    --remove-secondary-ranges [RANGE_NAME],[[RANGE_NAME],...]

其中:

  • [SUBNET_NAME] 是您要从中移除次要范围的子网的名称。
  • [REGION] 是您正在其中创建子网的区域。
  • [RANGE_NAME] 是从中获取别名 IP 范围的次要范围的名称,以及别名 IP 范围本身。例如:range1=10.9.0.0/24

如需查看完整的语法,请参阅 gcloud 文档

具有单个接口的虚拟机的虚拟机实例命令

这些命令展示了如何创建具有别名 IP 范围的实例,向现有虚拟机实例添加一个或多个别名 IP 范围,或从现有虚拟机实例中移除一个或多个范围。

在主要 CIDR 范围内创建具有别名 IP 范围的虚拟机

如果要从子网的主要范围分配别名 IP 范围,请按此过程操作。您不能选择已被 VPC 网络上的其他资源使用的范围,即便是部分使用也不行。

如果您希望实例的主要接口和别名 IP 地址在相同范围内,请按以下过程操作。

Console

  1. 转到 Google Cloud Platform Console 中的“虚拟机实例”页面。
    转到“虚拟机实例”页面
  2. 点击创建实例
  3. 为新实例输入名称
  4. 指定地区
  5. 点击管理、安全、磁盘、网络、单独租用
  6. 点击网络标签页。
  7. 点击网络接口部分主要接口旁边的“修改”(铅笔图标)按钮。
  8. 点击显示别名 IP 范围
  9. 子网范围设置保留为主要
  10. 以 CIDR 表示法输入别名 IP 范围。此范围必须是主要范围中未使用的子范围。
  11. 点击创建

gcloud

gcloud compute instances create vm1 \
    --zone [ZONE] \
    --network-interface "subnet=[SUBNET_NAME],aliases=[RANGE_CIDR][;[RANGE_CIDR];...]"

其中:

  • [ZONE] 是包含实例的地区。
  • [SUBNET_NAME] 是您要从中移除次要范围的子网的名称。
  • [RANGE_CIDR] 是主要子网中要分配给接口的 IP 范围。该范围可以是特定范围 (192.168.100.0/24)、单个 IP 地址 (192.168.100.1),也可以是 CIDR 格式的网络掩码 (/24)。如果 IP 范围仅由网络掩码指定,则 IP 分配器会选择一个使用指定网络掩码的可用范围,并将其分配给该网络接口。要指定多个范围,请用英文分号 (;) 分隔各个范围。

如需查看完整的语法,请参阅 gcloud 文档

在次要 CIDR 范围内创建具有别名 IP 范围的虚拟机

如果要分配取自子网次要范围的别名 IP 范围,请按以下过程操作。将别名 IP 范围与子网的主要范围分开,可以更轻松地创建防火墙规则来允许访问虚拟机上运行的服务,但不允许访问虚拟机的主要 IP 地址。

Console

  1. 转到 Google Cloud Platform Console 中的“虚拟机实例”页面。
    转到“虚拟机实例”页面
  2. 点击创建实例
  3. 为新实例输入名称
  4. 指定地区
  5. 点击管理、安全、磁盘、网络、单独租用
  6. 点击网络标签页。
  7. 点击网络接口部分主要接口旁边的“修改”(铅笔图标)按钮。
  8. 点击显示别名 IP 范围
  9. 选择具有次要范围的子网
  10. 子网范围下,选择您要使用的次要 IP 范围
  11. 以 CIDR 表示法输入别名 IP 范围。此范围必须是次要 IP 范围中未使用的子范围。
  12. 点击创建

gcloud

gcloud compute instances create vm3 \
    --zone [ZONE] \
    --network-interface subnet=[SUBNET_NAME],aliases=[RANGE_NAME]:[RANGE_CIDR]
 

其中:

  • [ZONE] 是包含该实例的地区。
  • [SUBNET_NAME] 是包含该实例的子网的名称。
  • [RANGE_NAME] 是要从中获取别名 IP 范围的子网次要范围的名称。
  • [RANGE_CIDR] 是分配给该接口的 IP 范围。该范围可以是特定范围 (192.168.100.0/24)、单个 IP 地址 (192.168.100.1),也可以是 CIDR 格式的网络掩码 (/24)。如果 IP 范围仅由网络掩码指定,则 IP 分配器会选择一个使用指定网络掩码的可用范围,并将其分配给该网络接口。

如需查看完整的语法,请参阅 gcloud 文档

向现有实例添加别名 IP 范围

您可以向正在运行的实例添加别名 IP 范围。

Console

  1. 转到 Google Cloud Platform Console 中的“虚拟机实例”页面。
    转到“虚拟机实例”页面
  2. 点击现有实例的名称。
  3. 点击修改
  4. 点击网络接口 nic0(或您要修改的网络接口)。
  5. 点击显示别名 IP 范围
  6. 点击添加别名 IP 范围
  7. 指定子网 CIDR 范围。
  8. 输入别名 IP 范围。
  9. 点击完成
  10. 点击保存

gcloud

gcloud compute instances network-interfaces update [INSTANCE_NAME] \
    --zone [ZONE] \
    [--network-interface [NETWORK_INTERFACE]; default="nic0"]
    --aliases "[RANGE_NAME]:[RANGE_CIDR];[[RANGE_NAME]:[RANGE_CIDR],...]"
  • [ZONE] 是包含该实例的地区。
  • [RANGE_NAME] 是要从中获取别名 IP 范围的子网次要范围的名称。如果您要从子网的主要范围中分配范围,请省略此值。
  • [RANGE_CIDR] 是分配给该接口的 IP 范围。该范围可以是特定范围 (192.168.100.0/24)、单个 IP 地址 (192.168.100.1),也可以是 CIDR 格式的网络掩码 (/24)。如果 IP 范围仅由网络掩码指定,则 IP 分配器会选择一个使用指定网络掩码的可用范围,并将其分配给该网络接口。

如需查看完整的语法,请参阅 gcloud 文档

修改现有实例的别名 IP 范围

您可以向现有实例添加更多别名 IP 范围,也可以移除一个或多个范围。

  • 要添加范围,请运行如下命令并指定全部现有和全部新的别名 IP 范围。用英文分号分隔各对。示例:--aliases "[CURRENT_RANGE_NAME]:[CURRRENT_RANGE_CIDR];[NEW_RANGE_NAME]:[NEW_RANGE_CIDR]"

  • 要移除范围,请运行该命令,仅需指定要保留的别名 IP 范围。如果将范围与次要范围分隔开来,则必须指定次要范围的名称。CIDR 范围可以是特定范围 (192.168.100.0/24),也可以是单个 IP 地址 (192.168.100.1)。示例:--aliases "[RANGE_NAME]:[RANGE_CIDR];[RANGE_CIDR]"

  • 要移除所有范围,请运行该命令并指定 --alias 标志,但使用英文引号提供空白输入。示例:--aliases ""

  • 您不能在同一个 gcloud 命令中添加和移除范围。要使用 gcloud 命令行界面移除某些范围并添加另一些范围,请先运行该命令移除不需要的范围,然后再次运行该命令添加所需的范围。

Console

  1. 转到 Google Cloud Platform Console 中的“虚拟机实例”页面。
    转到“虚拟机实例”页面
  2. 点击现有实例的名称。
  3. 点击修改
  4. 点击网络接口 nic0(或您要修改的网络接口)。
  5. 点击显示别名 IP 范围
  6. 要添加别名 IP 范围,请点击添加别名 IP 范围
  7. 要移除别名 IP 范围,请点击相应别名 IP 范围旁边的 X
  8. 点击完成
  9. 点击保存

gcloud

gcloud compute instances network-interfaces update [INSTANCE_NAME] \
    --zone [ZONE] \
    --aliases "[RANGES_TO_RETAIN];[[NEW_RANGE_NAME]:[NEW_RANGE_CIDR];...]"
  • [ZONE] 是包含该实例的地区。
  • [RANGES_TO_RETAIN] 是您要保留的现有范围,格式是 [CURRENT_RANGE_NAME]:[CURRRENT_RANGE_CIDR]。如果您为没有范围的实例添加范围,这些值将为空。如果您从实例中移除所有范围,则整个 --alias 字段将为空。
  • [NEW_RANGE_NAME] 是要从中获取新别名 IP 范围的子网次要范围的名称。如果您要从子网的主要范围中分配范围,请省略此值。
  • [NEW_RANGE_CIDR] 是分配给该接口的 IP 范围。该范围可以是特定范围 (192.168.100.0/24)、单个 IP 地址 (192.168.100.1),也可以是 CIDR 格式的网络掩码 (/24)。如果 IP 范围仅由网络掩码指定,则 IP 分配器会选择一个使用指定网络掩码的可用范围,并将其分配给该网络接口。

如需查看完整的语法,请参阅 gcloud 文档

具有多个接口的虚拟机的虚拟机实例命令

创建具有多个接口和别名 IP 地址的虚拟机

本示例创建两个网络,每个网络都有一个子网,此外还会创建一台具有两个网络中的接口的虚拟机。如果您已经有两个 VPC 网络,则可以跳到“创建虚拟机实例”步骤。

Console

创建第一个网络和子网:

  1. 转到 Google Cloud Platform Console 中的“VPC 网络”页面。
    转到“VPC 网络”页面
  2. 点击创建 VPC 网络
  3. 输入 my-network1 作为名称
  4. 子网创建模式设置为 Custom,指定 my-subnet1 作为子网名称
  5. 指定一个区域
  6. IP 地址范围设置为 172.16.1.0/24
  7. 点击创建次要 IP 范围
  8. 子网范围名称设置为 range1
  9. 次要 IP 范围设置为 10.1.0.0/16
  10. 点击完成
  11. 点击创建

创建第二个网络和子网:

  1. 转到 Google Cloud Platform Console 中的“VPC 网络”页面。
    转到“VPC 网络”页面
  2. 点击创建 VPC 网络
  3. 输入 my-network2 作为名称
  4. 子网创建模式设置为 Custom,指定 my-subnet2 作为子网名称
  5. 指定与第一个网络和子网相同的区域
  6. IP 地址范围设置为 172.16.2.0/24
  7. 点击创建次要 IP 范围
  8. 子网范围名称设置为 range2
  9. 次要 IP 范围设置为 10.2.0.0/16
  10. 点击完成
  11. 点击创建

创建一台具有两个网络中的接口的虚拟机:

  1. 转到 Google Cloud Platform Console 中的“虚拟机实例”页面。
    转到“虚拟机实例”页面
  2. 点击创建实例
  3. 将地区设置为您创建子网的区域。
  4. 点击管理、安全、磁盘、网络、单独租用
  5. 点击网络
  6. 点击第一个网络接口。
  7. 网络设置为 my-network1
  8. 子网设置为 my-subnet1
  9. 点击显示别名 IP 范围
  10. 点击添加别名 IP 范围
  11. 子网范围设置为 Primary
  12. 别名 IP 范围设置为 /32
  13. 点击添加 IP 范围
  14. 子网范围设置为 range1
  15. 别名 IP 范围设置为 /24
  16. 点击完成
  17. 点击添加网络接口
  18. 选择 my-network2
  19. 子网设置为 my-subnet2
  20. 点击显示别名 IP 范围
  21. 点击添加别名 IP 范围
  22. 子网范围设置为 Primary
  23. 别名 IP 范围设置为 /32
  24. 点击添加 IP 范围
  25. 子网范围设置为 range2
  26. 输入 /24 作为别名 IP 范围
  27. 点击完成
  28. 点击创建

gcloud

  1. 创建第一个网络:

    gcloud compute networks create my-network1 --subnet-mode CUSTOM
    
  2. 添加子网:

    gcloud compute networks subnets create my-subnet1 \
        --network my-network1 \
        --range 172.16.1.0/24 \
        --secondary-range range1=10.1.0.0/16
    
  3. 创建第二个网络:

    gcloud compute networks create my-network2 --subnet-mode CUSTOM
    
  4. 添加子网:

    gcloud compute networks subnets create my-subnet2 \
        --network my-network2 \
        --range 172.16.2.0/24 \
        --secondary-range range2=10.2.0.0/16
    
  5. 创建一台具有两个网络中的接口的虚拟机。列出的第一个网络接口(my-subnet1 中的接口)是主要接口:

    gcloud compute instances create multi-nic-alias-vm \
        --machine-type f1-micro \
        --network-interface "subnet=my-subnet1,aliases=/32;range1:/24" \
        --network-interface "subnet=my-subnet2,aliases=/32;range2:/24"
    
  6. 使用 display 命令查看接口及其地址:

    gcloud compute instances describe multi-nic-alias-vm
    
    ...
    networkInterfaces:
    - ...
      aliasIpRanges:
      - ipCidrRange: 172.16.1.2/32
      - ipCidrRange: 10.1.0.0/24
        subnetworkRangeName: range1
      name: nic0
      network: .../networks/my-network1
      networkIP: 172.16.1.3
      subnetwork: .../subnetworks/my-subnet1
      ...
    - ...
      aliasIpRanges:
      - ipCidrRange: 172.16.2.2/32
      - ipCidrRange: 10.2.0.0/24
        subnetworkRangeName: range2
      name: nic1
      network: .../networks/my-network2
      networkIP: 172.16.2.3
      subnetwork: .../subnetworks/my-subnet2
      

向具有多个接口的虚拟机添加别名 IP 地址

Console

  1. 转到 Google Cloud Platform Console 中的“虚拟机实例”页面。
    转到“虚拟机实例”页面
  2. 点击现有实例的名称。
  3. 点击修改
  4. 点击网络接口 nic0(或您要向其添加别名 IP 范围的网络接口)。
  5. 点击显示别名 IP 范围
  6. 点击添加别名 IP 范围
  7. 指定子网范围
  8. 输入一个别名 IP 范围。
  9. 点击完成
  10. 点击保存

gcloud

对于主要接口执行以下命令:

gcloud compute instances network-interfaces update multi-nic-alias-vm \
    --aliases "range1:10.1.0.0/24;172.16.1.2/32;/32"

对于次要接口执行以下命令:

gcloud compute instances network-interfaces update multi-nic-alias-vm \
    --aliases "range2:10.2.0.0/24;172.16.2.2/32;/32" \
    --network-interface nic1

从具有多个接口的虚拟机中移除别名 IP 范围

Console

  1. 转到 Google Cloud Platform Console 中的“虚拟机实例”页面。
    转到“虚拟机实例”页面
  2. 点击现有实例的名称。
  3. 点击修改
  4. 点击网络接口 nic0(或您要向其添加别名 IP 范围的网络接口)。
  5. 点击显示别名 IP 范围
  6. 点击您要移除的别名 IP 范围旁边的 X
  7. 点击完成
  8. 点击保存

gcloud

对于主要接口执行以下命令:

gcloud compute instances network-interfaces update multi-nic-alias-vm \
    --aliases ""

对于次要接口执行以下命令:

gcloud compute instances network-interfaces update multi-nic-alias-vm \
    --aliases "" \
    --network-interface nic1

问题排查

无法创建具有别名 IP 的虚拟机实例

  1. 验证网络是否属于 VPC 网络。旧版网络不支持别名 IP。

    gcloud compute networks list --filter="name=[NETWORK_NAME]"
    

    网络 MODE 应该是“auto”或“custom”。

  2. 如果指定了子网范围名称,请验证以下内容:

    gcloud compute networks subnets describe [SUBNET_NAME] --region=[REGION]
    
    • 该子网拥有使用相应名称的次要范围
    • 所请求的别名 IP 范围在该次要范围内;或者如果使用网络掩码,则验证其是否小于主要范围。
  3. 如果未指定子网范围名称,验证所请求的别名 IP 范围是否在主要子网范围内;或者如果使用网络掩码,则验证其是否小于主要范围。

无法连接到别名 IP

  1. 验证防火墙规则。

    1. 列出所有防火墙规则:

      gcloud compute firewall-rules list --format=json
      
    2. 验证是否允许向别名 IP 传入或从中传出流量。

    3. 如有必要,添加防火墙规则以允许 ping 别名 IP:

      gcloud compute firewall-rules create [FIREWALL_NAME1] \
        --network [NETWORK_NAME] --priority 0 --source-ranges [ALIAS_IP] \
        --allow icmp
      
      gcloud compute firewall-rules create [FIREWALL_NAME2] \
        --network [NETWORK_NAME] --priority 0 --direction out \
        --destination-ranges [ALIAS_IP] --allow icmp
      
  2. 确保虚拟机将 IP 别名范围识别为本地。在 Debian 等 Linux 发行版上,通常可以按如下方式执行此操作。

    1. 连接到实例并运行以下命令:

      ip route show table local
      

      输出应该包含以下内容:

      local [ALIAS_IP_RANGE] dev eth0  proto 66  scope host
      
    2. 如果本地路由不存在,则使用以下命令进行配置:

      ip route add to local [ALIAS_IP_RANGE] dev eth0 proto 66
      

未列出我的次要 IP 范围

次要 IP 范围未作为常规子网列出。为了表明已创建子网次要 IP 范围,请使用 gcloud compute networks subnets describe 命令。

  1. 创建子网。

    gcloud compute networks subnets create my-subnet \
        --region us-central1 \
        --network my-network \
        --range 10.9.0.0/16 \
        --secondary-range secondaryrange1=172.16.0.0/12
    
    Created [https://www.googleapis.com/compute/v1/projects/google.com:my-project/regions/us-central1/subnetworks/my-subnet].
    NAME       REGION       NETWORK     RANGE
    my-subnet  us-central1  my-network  10.9.0.0/16
    
  2. 列出子网。

    gcloud compute networks subnets list
    
    NAME       REGION       NETWORK     RANGE
    my-subnet  us-central1  my-network  10.9.0.0/16
    
  3. 获取子网的详细信息以查看次要范围。

    gcloud compute networks subnets describe my-subnet --region us-central1
    
    ...
    ipCidrRange: 10.9.0.0/16
    ...
    secondaryIpRanges:
    - ipCidrRange: 172.16.0.0/12
      rangeName: secondaryrange1
    ...
    

指定的子网次要范围不存在

创建虚拟机时,如果出现次要范围不存在的错误,请确保以下几点:

  • 该子网拥有使用指定名称的次要范围。
  • 您是在具有次要范围的子网内创建虚拟机。

通过运行以下命令可以看到此错误:

  1. 创建一个具有次要范围的子网。

    gcloud compute networks subnets create my-subnet \
        --region us-central1 \
        --network my-network \
        --range 10.9.0.0/16 \
        --secondary-range secondaryrange1=172.16.0.0/12
    
    Created [https://www.googleapis.com/compute/v1/projects/google.com:my-project/regions/us-central1/subnetworks/my-subnet].
    NAME       REGION       NETWORK     RANGE
    my-subnet  us-central1  my-network  10.9.0.0/16
    
  2. 在另一个网络(如默认网络)中创建一个实例,而不是在新创建的子网中创建实例。

    gcloud compute instances create instance-1 \
        --zone us-central1-a \
        --network default
    
    Created [https://www.googleapis.com/compute/v1/projects/google.com:my-project/zones/us-central1-a/instances/instance-1].
    NAME        ZONE           MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP    STATUS
    instance-1  us-central1-a  n1-standard-1               10.128.0.2     47.82.96.9  RUNNING
    
  3. 尝试从第 1 步创建的子网中分配一个别名 IP 范围。该命令将失败,因为次要范围与该实例位于不同的子网中。

    gcloud compute instances network-interfaces update instance-1 \
        --zone us-central1-a \
        --aliases secondaryrange1:172.16.0.10/32
    
    ERROR: (gcloud.compute.instances.network-interfaces.update) HTTPError 400: Invalid value for field 'resource.aliasIpRanges[0].subnetworkRangeName': 'secondaryrange'. The specified subnetwork secondary range does not exist.
    
  4. 创建另一个实例,该实例的接口位于第 1 步创建的子网中。

    gcloud compute instances create instance-2 \
        --zone us-central1-a \
        --network-interface subnet=my-subnet
    
    Created [https://www.googleapis.com/compute/v1/projects/google.com:my-project/zones/us-central1-a/instances/instance-2].
    NAME        ZONE           MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP    STATUS
    instance-2  us-central1-a  n1-standard-1               10.9.0.2     38.74.204.89  RUNNING
    
  5. 为该接口添加一个别名 IP 范围。这次该命令可以成功执行,因为该接口与次要范围位于同一个子网中。

    gcloud compute instances network-interfaces update instance-2 \
        --zone us-central1-a \
        --aliases secondaryrange1:172.16.0.10/32
    
    Updating network interface [nic0] of instance [instance-2]...done.
    

无法在同一个请求中添加和移除次要 IP 范围。

目前不支持在同一条命令中添加和移除子网次要 IP 范围。如果在同一条 gcloud 命令中既添加又移除次要范围,该命令将保留现有范围,不对其进行任何修改。

要添加和移除范围,请分别运行以下两条命令。

gcloud compute networks subnets update [SUBNET_NAME] \
    --add-secondary-ranges [RANGE_NAME]=[RANGE_CIDR],[[RANGE_NAME]=[RANGE_CIDR],...]
gcloud compute networks subnets update  [SUBNET_NAME] \
    --remove-secondary-ranges [RANGE_NAME],[[RANGE_NAME],...]

要详细了解此命令,请使用 gcloud compute networks subnets update --help

无法同时添加和移除别名 IP 范围

目前不支持在同一请求中添加和移除虚拟机别名 IP 范围。

用于更新别名 IP 范围的 gcloud 命令不会保留现有范围,因此如果省略范围,系统会将请求解读为删除该范围。

例如,如果当前虚拟机的别名范围为 10.9.27.0/24,并且新请求的范围为 /24,则运行请求 /24 的命令时会被系统拒绝,因为此命令将解释为移除 10.9.27.0/24 并添加 /24。在添加新范围之前,必须明确移除现有范围。

示例:

  1. 创建别名 IP 范围。

    gcloud compute instances create vm --network-interface "subnet=s1,aliases=10.9.27.0/24"
    
  2. 尝试添加 /24 而不指定现有范围。以下为错误结果。

    gcloud compute instances network-interfaces update vm --aliases "/24"
    ERROR: (gcloud.compute.instances.network-interfaces.update) HTTPError 400: Invalid value for field 'resource.aliasIpRanges': ''. Cannot simultaneously add and remove alias IP ranges.
    
  3. 更新虚拟机,使其没有别名 IP 范围。

    gcloud compute instances network-interfaces update vm --aliases ""
    Updating network interface [nic0] of instance [vm]...done.
    
  4. 添加新的别名 IP 范围。

    gcloud compute instances network-interfaces update vm --aliases "/24"
    Updating network interface [nic0] of instance [vm]...done.
    

如需详细了解此命令,请使用 gcloud compute instances network-interfaces update --help

防火墙规则来源标记和来源服务帐号

防火墙来源服务帐号和来源标记仅会扩展到匹配实例的主要网络 IP,不适用于匹配实例的别名 IP。因此,基于来源标记的防火墙规则不会影响来自实例别名 IP 地址的流量。别名 IP 地址可以作为来源或目的地范围添加到防火墙规则中。

具有多个接口和别名 IP 范围的虚拟机的问题

请参阅多个接口的问题排查

后续步骤

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页