别名 IP 范围概览

通过 Google Cloud Platform (GCP) 别名 IP 范围,您可以将内部 IP 地址范围作为别名分配给虚拟机 (VM) 的网络接口。如果您有多项服务在一台虚拟机上运行,并且希望为每项服务分配一个不同的 IP 地址,则此功能十分有用。别名 IP 范围也可与 GKE Pod 配合使用。

概览

如果您仅有一项服务在一台虚拟机上运行,则可以使用接口的主要 IP 地址指代该服务。如果您有多项服务在一台虚拟机上运行,您可能希望为每项服务分配一个不同的内部 IP 地址。可以使用别名 IP 范围实现这一目标。

子网主要和次要 CIDR 范围

所有子网都具有主要 CIDR 范围,也就是用于定义子网的内部 IP 地址范围。每个虚拟机实例均从该范围内获取其主要内部 IP 地址。您还可以从该主要范围分配别名 IP 范围,或者向子网添加次要范围,并从次要范围分配别名 IP 范围。使用别名 IP 范围时,次要子网范围并非必需。这些次要子网范围仅用于提供一种组织工具。

虚拟机网络接口中定义的别名 IP 范围

使用 IP 别名,您可以配置多个内部 IP 地址来表示托管在虚拟机中的容器或应用,而无需定义单独的网络接口。您可以从子网的主要或次要范围分配虚拟机别名 IP 范围。

配置别名 IP 范围介绍了设置具有次要范围的子网并将别名 IP 地址分配给虚拟机的命令。

下图提供了虚拟机主要接口上的主要和次要 CIDR 范围和虚拟机别名 IP 范围的基本说明:

主要和次要 CIDR 范围和虚拟机别名 IP 范围(点击可放大)
主要和次要 CIDR 范围和虚拟机别名 IP 范围(点击可放大)
  • 主要 CIDR 范围 10.1.0.0/16 配置为子网的一部分。
  • 次要 CIDR 范围 10.2.0.0/20 配置为子网的一部分。
  • 虚拟机主要 IP 10.1.0.2 分配自主要 CIDR 范围 10.1.0.0/16,而别名 IP 范围 10.2.1.0/24 则从次要 CIDR 范围 10.2.0.0/20 分配给虚拟机。
  • 别名 IP 范围中的地址用作虚拟机中托管的容器的 IP 地址。

别名 IP 范围的主要优势

配置了别名 IP 范围时,GCP 将自动安装 VPC 网络路由,以便为主要网络接口的子网获得主要和别名 IP 范围。容器编排器不需要为这些路由指定 VPC 网络连接。这可以简化路由流量并管理您的容器。您不需要按照别名 IP 范围关键属性中所述执行客户机内配置。

在 GCP 分配容器 IP 地址时,GCP 中的验证流程会确保容器 Pod 地址不与虚拟机 IP 地址冲突。

配置别名 IP 地址时,会针对流量执行反欺骗检查,确保离开虚拟机的流量使用虚拟机 IP 地址和 pod IP 地址作为来源地址。反欺骗检查可验证虚拟机未发送具有任意来源 IP 地址的流量。与 IP 别名相比,为容器网络使用静态路由属于一种不太安全的方法,因为它需要在容器宿主虚拟机上禁用防欺骗检查(启用 IP 转发时,防欺骗检查会被禁用)。

别名 IP 范围在 GCP 虚拟网络内可路由,无需额外的路由。您不必为每个 IP 别名添加路由,也不必考虑路由配额。

别名 IP 地址可以通过 Cloud Router 发布到通过 VPN 或互连连接的本地部署网络。

从次要 CIDR 范围分配别名 IP 范围具有一定的优势。由于分配时所使用的范围与主要 IP 地址所使用的范围彼此分离,因此您可以将基础架构(虚拟机)与服务(容器)分离开来。在为基础架构和服务配置不同的地址空间时,可以独立于虚拟机主要 IP 地址的防火墙控制,为虚拟机别名 IP 地址另行设置防火墙控制。例如,您可以允许针对某些容器 pod 的流量,并拒绝针对虚拟机主要 IP 地址的类似流量。

GCP 中的容器架构

考虑这样一种情景:您希望在 GCP 的基础之上配置容器化服务。您需要创建用于托管服务的虚拟机,此外还要创建容器。

在这样的情景中,您希望在容器与通过 VPN 连接的本地部署位置之间路由流量。但是,您不希望用户能通过 VPN 访问主要虚拟机 IP 地址。要创建此配置,容器 IP 范围(而非虚拟机主要 IP 范围)需要可通过 VPN 进行路由。在创建虚拟机时,您还希望能自动分配用于容器的 IP 地址池。

要创建此配置,请执行以下操作:

  • 在创建子网时,进行如下配置:
    • 配置一个主要 CIDR 范围,例如 10.128.0.0/16
    • 配置一个次要 CIDR 范围,例如 172.16.0.0/16
  • 使用实例模板创建虚拟机,并自动分配以下各项:
    • 10.128.0.0/16 范围内的主要 IP
    • 次要 CIDR 172.16.0.0/16 空间内的别名范围 /24,以便您可以为虚拟机上的每个 pod 分配 /24 次要 CIDR 范围内的 IP
  • 创建两条防火墙规则
    • 一条规则拒绝来自本地部署的流量通过 VPN 传递到子网主要 CIDR 范围。
    • 一条规则允许来自本地部署的流量通过 VPN 传递到子网次要 CIDR 范围。

示例:配置使用别名 IP 范围的容器

使用别名 IP 范围,可以从次要 CIDR 范围分配容器 IP 地址,并将其配置为托管容器的虚拟机中的别名 IP 地址。

配置使用别名 IP 地址的容器(点击可放大)
配置使用别名 IP 地址的容器(点击可放大)

要创建上图所示配置,请执行以下操作:

  1. 创建一个子网,其 CIDR 范围为 10.128.0.0/16,从此范围内分配虚拟机 IP 地址;其次要 CIDR 范围为仅供容器使用的 172.16.0.0/20,该范围将配置为托管容器的虚拟机中的别名 IP 范围:

    gcloud compute networks subnets create subnet-a \
        --network network-a \
        --range 10.128.0.0/16 \
        --secondary-range container-range=172.16.0.0/20
    
  2. 创建虚拟机,使用范围 10.128.0.0/16 内的主要 IP 和虚拟机中的容器要使用的次要 CIDR 范围 172.16.0.0/20 内的别名 IP 范围 172.16.0.0/24:

    gcloud compute instances create vm1 [...] \
        --network-interface subnet=subnet-a,aliases=container-range:172.16.0.0/24
    gcloud compute instances create vm2 [...] \
        --network-interface subnet=subnet-a,aliases=container-range:172.16.1.0/24
    
  3. 容器 IP 地址在 GCP 中配置为别名 IP 地址。在此设置中,主要和别名 IP 均可通过 VPN 隧道访问。如果配置了 Cloud Router 路由器,则它会自动通告次要子网范围 172.16.0.0/20。如需详细了解如何将 VPN 与 Cloud Router 路由器搭配使用,请参阅使用动态路由创建 VPN 隧道

如需详细了解用于创建此配置的命令,请参阅配置别名 IP 地址和范围

示例:在单个虚拟机实例中配置多个别名 IP 范围

别名 IP 范围允许您管理在虚拟机内运行的应用(包括利用容器)的 IP 分配情况。

在您的部署中,某些容器可以在不同虚拟机之间迁移,某些容器则不能进行这样的迁移。可迁移的容器可以使用 /32 范围进行配置,以便轻松地单独迁移这些容器。不可迁移的容器可以使用更大的范围进行配置,因为这些容器将保持在一起。

在这些类型的部署中,每个虚拟机实例可能需要多个别名 IP 范围,例如,对于不可迁移容器为 /27,对于可迁移容器为多个 /32。

配置使用多个别名 IP 范围的虚拟机(点击可放大)
配置使用多个别名 IP 范围的虚拟机(点击可放大)

要配置此示例,请使用以下 gcloud 命令:

gcloud compute networks create vpc1 --subnet-mode custom
gcloud compute networks subnets create subnet1 --region us-central1 --network vpc1 --range 10.128.0.0/16 --secondary-range secondaryrange1=172.16.0.0/20
gcloud compute instances create vm1 --zone us-central1-a --network-interface "subnet=subnet1,aliases=secondaryrange1:172.16.0.0/27;secondaryrange1:172.16.1.0/32"
gcloud compute instances create vm2 --zone us-central1-a --network-interface "subnet=subnet1,aliases=secondaryrange1:172.16.0.32/27;secondaryrange1:172.16.1.1/32"

自动模式 VPC 网络和子网中的别名 IP 地址

在自动模式的 VPC 网络中,每个区域都具有一个子网。每个此类自动创建的子网都具有主要 CIDR 范围,但没有次要范围。要为自动模式 VPC 网络使用别名 IP,可以从自动创建的子网的主要 CIDR 范围中分配别名 IP 范围,也可以向自动创建的子网添加次要范围,并从新的次要范围分配别名 IP 范围。

此外,您还可以创建新的子网,使其具有自动模式 VPC 网络中的次要范围,只要其范围与 10.128.0.0/9 没有重叠即可。随后,您可以在这个新子网中创建虚拟机实例,并从该子网上的任意范围分配别名 IP 范围。

若要为子网添加次要范围,请参阅向现有子网添加次要 CIDR 范围

自定义模式网络和子网中的别名 IP 地址

自定义模式网络存在以下特点:

  • 所有子网均为手动创建
  • 强制要求具备一个主要 CIDR 范围。
  • 您可以选择创建次要 CIDR 范围。

别名 IP 范围的关键属性

以下属性适用于在虚拟机内配置的别名 IP 范围:

  • 从虚拟机操作系统的角度来看,主要 IP 地址和默认网关通常使用 DHCP 进行分配。别名 IP 地址可以在虚拟机操作系统(通常是 Linux 或 Windows)中手动配置,也可以使用脚本配置。
  • 接口的主要 IP 地址和别名 IP 范围必须分配自配置为属于相同子网的 CIDR 范围。请注意以下要求:
    • 主要 IP 地址必须分配自 CIDR 主要范围。
    • 别名 IP 范围可以分配自主要 CIDR 范围,也可以分配自相同子网的次要 CIDR 范围。
    • 对于虚拟机网络接口,别名 IP 必须来自为主要网络接口提供 IP 地址的同一子网资源。您无法从其他子网资源中选择主要 CIDR 范围或次要 CIDR 范围。
    • 主要 IP 地址可以由用户配置成使用静态专用 IP 地址,也可以由系统自动分配临时静态 IP 地址。
    • 别名 IP 范围是可选的,不会自动添加。可以在创建或修改实例期间配置别名 IP 范围。
    • 可以将别名 IP 范围配置为明确的 CIDR 范围(例如 10.128.1.0/24)、单个 IP 地址(例如 10.128.7.29)或网络掩码 (/24)。可以完整地指定别名 IP 范围,也可以通过指定网络掩码自动分配 IP 范围。
    • 由于 VPC 网络中的所有子网共享一个默认网关,因此一个接口内的所有别名 IP 地址与主要 IP 地址共享相同的默认网关。
一个接口中的别名 IP 与主要 IP 地址共享相同的默认网关(点击可放大)
一个接口中的别名 IP 与主要 IP 地址共享相同的默认网关(点击可放大)

使用别名 IP 地址的 DNS

GCP 会自动为每个虚拟机实例主要接口的主要 IP 配置内部 DNS。这会将实例主机名与主要接口的主要 IP 地址相关联。但是,针对该主机名执行的 DNS 查找仅适用于包含主要接口的网络。

GCP 不会自动将其他任何 IP 地址与主机名相关联。GCP 不会将主要接口上的别名 IP 地址与主机名相关联,也不会将次要接口的任何 IP 地址与主机名相关联。

您可以手动配置 DNS 以关联其他 IP 地址。

防火墙

别名 IP 地址不支持防火墙来源标记。在防火墙规则中配置来源标记时,来源标记与虚拟机主要 IP 地址匹配,但不匹配别名 IP 地址。可使用来源范围来允许或拒绝来自 IP 别名地址的入站流量。

静态路由

在静态路由中,下一跳 IP 地址必须是虚拟机实例的主要 IP 地址。下一跳 IP 地址不支持用作别名 IP 地址。

VPC 网络对等互连

VPC 网络对等互连允许您对等互连两个 VPC 网络,从而使两个网络中的虚拟机之间可以通过内部专用 IP 地址进行通信。

在一个对等互连网络中,虚拟机实例可以访问子网的主要 IP 地址范围和次要 IP 地址范围。

对等互连网络间的子网重叠检查可以确保主要和次要范围不与任何对等互连的范围重叠。

网络对等互连场景中的 IP 别名(点击可放大)
网络对等互连场景中的 IP 别名(点击可放大)

后续步骤

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

发送以下问题的反馈:

此网页