为工作负载虚拟机配置互联网访问权限

您可以针对每个区域为 Google Cloud VMware Engine 中的 VMware 工作负载配置互联网访问网络服务。您可以使用 Google Cloud 的互联网边缘或通过本地连接定向来自 VMware 工作负载虚拟机的互联网绑定流量。 Google Cloud

VMware Engine 提供以下方法来为工作负载虚拟机配置互联网访问权限:

可以访问互联网的工作负载虚拟机还可以使用专用 Google 访问通道访问 Google Cloud 服务。 使用专用 Google 访问通道访问 Google Cloud 服务的操作会保留在 Google Cloud 网络中,且不会退出互联网。 Google Cloud Google Cloud

互联网访问网络服务支持:

  • 每个区域最多 100 个公共 IP 地址
  • 每个网络政策最多 100 条外部访问规则
  • 每个区域的吞吐量最高 2 Gbps
  • TCP、UDP 和 ICMP 协议

互联网访问网络服务不支持应用层网关 (ALG) 功能。

准备工作

如需更改您的私有云的互联网访问设置,您必须对 VMware Engine 拥有管理员访问权限

如需启用互联网访问权限,您需要一个边缘服务 CIDR 地址范围。当您启用互联网访问权限或公共 IP 网络服务时,会在服务租户上下文中部署网关。

使用边缘服务 CIDR 地址范围来访问 VMware Engine 互联网和公共 IP 网关。地址范围必须满足以下要求:

  • 符合 RFC 1918 作为专用地址范围的要求。
  • 不与任何其他 VMware Engine 地址范围(例如,用于管理设备或 NSX 片段的地址范围)重叠。
  • 不与向 VMware Engine 通告的任何地址范围(例如,用于虚拟私有云 (VPC) 网络子网或本地网络的地址范围)重叠。
  • 指定一个具有 26 个子网掩码位( /26)的 IP 地址范围。

Google Cloud CLI 和 API 要求

如需使用 gcloud 命令行工具或 API 管理 VMware Engine 资源,我们建议您按下文所述配置工具。

gcloud

  1. 设置默认项目 ID:

    gcloud config set project PROJECT_ID
    
  2. 设置默认地区和区域:

    gcloud config set compute/region REGION
    
    gcloud config set compute/zone ZONE
    

如需详细了解 gcloud vmware 工具, 请参阅 Cloud SDK 参考文档

API

本文档集中的 API 示例使用 cURL 命令行工具来查询 API。cURL 请求中需要有效的访问令牌。获取有效访问令牌的方法有很多种:以下步骤使用 gcloud 工具生成访问令牌:

  1. 登录到 Google Cloud:

    gcloud auth login
    
  2. 生成访问令牌并导出到 TOKEN:

    export TOKEN=`gcloud auth print-access-token`
    
  3. 验证 TOKEN 是否已正确设置:

    echo $TOKEN
    

现在,在对 API 的请求中使用授权令牌。例如:

curl -X GET -H "Authorization: Bearer \"$TOKEN\"" -H "Content-Type: application/json; charset=utf-8" https://vmwareengine.googleapis.com/v1/projects/PROJECT_ID/locations

Python

本文档中的 Python 代码示例使用 VMware Engine 库与 API 进行通信。为了能够使用此方法,需要安装该库并配置应用默认凭证

  1. 下载并安装 Python 库:

    pip install google-cloud-vmwareengine
    
  2. 通过在 shell 中执行以下命令来配置 ADC 信息:

    gcloud auth application-default login
    

    或者,使用服务账号密钥文件:

    export GOOGLE_APPLICATION_CREDENTIALS="FILE_PATH"
    

如需详细了解该库,请访问参考页面或查看GitHub 上的代码示例

配置互联网访问服务

如需为工作负载虚拟机提供互联网访问权限,请创建或更新网络政策。

默认情况下,互联网访问网络服务处于停用状态。

在区域中启用互联网访问服务

控制台

如需在区域中启用互联网访问服务,请执行以下操作:

  1. 在 Google Cloud 控制台中,前往网络政策 页面。

    前往“网络政策”页面

  2. 点击选择项目 ,然后选择包含您要为其启用互联网访问服务的 VMware Engine 网络的组织、文件夹或项目。

  3. 点击创建 以创建新政策。如需修改现有网络政策,请点击行末的更多 图标,然后选择修改

  4. 填写网络政策的详细信息,包括选择政策适用的网络和区域。

  5. 互联网访问 切换为已启用 ,并根据需要启用外部 IP 地址服务

  6. 边缘服务 CIDR 字段中,输入在寻址 VMware Engine 互联网网关时要使用的地址范围( /26 地址范围)。

  7. 点击创建

操作完成后,通常在几分钟后,服务的状态会变为已启用

gcloud

使用 gcloud 工具运行以下命令以创建网络政策:

gcloud vmware network-policies create NETWORK_POLICY_NAME \
    --vmware-engine-network projects/PROJECT_ID/locations/LOCATIONS/vmwareEngineNetworks/NETWORK_ID \
    --edge-services-cidr=IP_RANGE \
    --location=LOCATION \
    --internet-access

请替换以下内容:

  • NETWORK_POLICY_NAME:此网络政策的名称。
  • NETWORK_ID:应用此网络政策的网络
  • IP_RANGE:用于互联网访问网关和外部 IP 访问网关的 CIDR 范围(采用 CIDR 表示法)。必须提供带有“/26”前缀的 RFC 1918 CIDR 地址块。
  • LOCATION:对于旧版网络,为 global;对于标准网络,为区域

API

curl -X POST -H "Authorization: Bearer TOKEN"  -H "Content-Type: application/json; charset=utf-8" https://vmwareengine.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/networkPolicies?networkPolicyId=NETWORK_POLICY_NAME

'{
  "vmwareEngineNetwork":"projects/PROJECT_ID/locations/LOCATION/vmwareEngineNetworks/NETWORK_ID",
  "edgeServiceCidr":"IP_RANGE",
  "internetAccess": {
    "enabled": true
   },
   "externalIp": {
     "enabled": true
   }
}'

请替换以下内容:

  • NETWORK_POLICY_NAME:此网络政策的名称。必须采用 REGION-default 格式。
  • PROJECT_ID:此请求的项目 ID
  • LOCATION:对于旧版网络,为 global;对于标准网络,为区域
  • IP_RANGE:用于互联网访问网关和外部 IP 访问网关的 CIDR 范围(采用 CIDR 表示法)。必须提供带有“/26”前缀的 RFC 1918 CIDR 地址块。
  • NETWORK_ID:此网络政策的网络

Python

from google.api_core import operation
from google.cloud import vmwareengine_v1


def create_network_policy(
    project_id: str,
    region: str,
    ip_range: str,
    internet_access: bool,
    external_ip: bool,
) -> operation.Operation:
    """
    Creates a new network policy in a given network.

    Args:
        project_id: name of the project you want to use.
        region: name of the region you want to use. I.e. "us-central1"
        ip_range: the CIDR range to use for internet access and external IP access gateways,
            in CIDR notation. An RFC 1918 CIDR block with a "/26" suffix is required.
        internet_access: should internet access be allowed.
        external_ip: should external IP addresses be assigned.

    Returns:
        An operation object representing the started operation. You can call its .result() method to wait for
        it to finish.

    Raises:
        ValueError if the provided ip_range doesn't end with /26.
    """
    if not ip_range.endswith("/26"):
        raise ValueError(
            "The ip_range needs to be an RFC 1918 CIDR block with a '/26' suffix"
        )

    network_policy = vmwareengine_v1.NetworkPolicy()
    network_policy.vmware_engine_network = f"projects/{project_id}/locations/{region}/vmwareEngineNetworks/{region}-default"
    network_policy.edge_services_cidr = ip_range
    network_policy.internet_access.enabled = internet_access
    network_policy.external_ip.enabled = external_ip

    request = vmwareengine_v1.CreateNetworkPolicyRequest()
    request.network_policy = network_policy
    request.parent = f"projects/{project_id}/locations/{region}"
    request.network_policy_id = f"{region}-default"

    client = vmwareengine_v1.VmwareEngineClient()
    return client.create_network_policy(request)

HCX 移动优化网络 (MON) 指南

如果您使用 HCX 和移动优化网络 (MON) 迁移虚拟机,则需要特定的路由配置来确保互联网连接。

如果您已为第 2 层扩展 (L2E) 片段启用 MON,VMware Engine 不会自动向其互联网服务通告已迁移虚拟机的路由。为确保这些虚拟机可以访问互联网,您必须在第 1 层路由器上启用静态路由重新分发到 BGP。

此步骤是通告已启用 MON 的片段的路由所必需的,这些路由允许它们通过 VMware Engine 环境路由互联网流量。如果没有此配置,这些片段上的虚拟机将无法访问公共互联网。

在区域中停用互联网访问服务

如需停用某个区域的互联网访问服务,请执行以下操作:

控制台

  1. 在 Google Cloud 控制台中,前往网络政策 页面。

    前往“网络政策”页面

  2. 点击选择项目 ,然后选择包含您要为其停用互联网访问服务的 VMware Engine 网络的组织、文件夹或项目。

  3. 在与相关网络政策对应的行中,点击 更多 图标。

  4. 互联网访问 切换为已停用

    • 您必须先停用公共 IP 服务,然后才能停用互联网访问权限。
    • 您必须先删除所有已分配的公共 IP 地址和指向站点的 VPN 网关,然后才能停用公共 IP 服务。
  5. 点击保存

操作完成后,通常在几分钟后,服务的状态会变为已停用

gcloud

使用 gcloud 工具运行以下命令以更新网络政策:

gcloud vmware network-policies update NETWORK_POLICY_NAME \
  --no-internet-access \
  --location LOCATION

请替换以下内容:

  • NETWORK_POLICY_NAME:此网络政策的名称
  • LOCATION:对于旧版网络,为 global;对于标准网络,为区域

API

curl -X PATCH -H "Authorization: Bearer TOKEN"  -H "Content-Type: application/json; charset=utf-8" https://vmwareengine.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/networkPolicies/NETWORK_POLICY_NAME?updateMask=internetAccess.enabled,externalIp.enabled -d "{
  "internetAccess": {
    "enabled": false
 },
  "externalIp": {
    "enabled": false
   }
}"

请替换以下内容:

  • PROJECT_ID:此请求的项目 ID
  • LOCATION:对于旧版网络,为 global;对于标准网络,为区域
  • NETWORK_POLICY_NAME:此网络政策的名称

Python

from google.api_core import operation
from google.cloud import vmwareengine_v1


def update_network_policy(
    project_id: str, region: str, internet_access: bool, external_ip: bool
) -> operation.Operation:
    """
    Updates a network policy in a given network.

    Args:
        project_id: name of the project you want to use.
        region: name of the region you want to use. I.e. "us-central1".
        internet_access: should internet access be allowed.
        external_ip: should external IP addresses be assigned.

    Returns:
        An operation object representing the started operation. You can call its .result() method to wait for
        it to finish.
    """

    client = vmwareengine_v1.VmwareEngineClient()
    request = vmwareengine_v1.UpdateNetworkPolicyRequest()
    request.update_mask = "internetAccess.enabled,externalIp.enabled"
    network_policy = vmwareengine_v1.NetworkPolicy()
    network_policy.name = (
        f"projects/{project_id}/locations/{region}/networkPolicies/{region}-default"
    )
    network_policy.vmware_engine_network = f"projects/{project_id}/locations/{region}/vmwareEngineNetworks/{region}-default"
    network_policy.internet_access.enabled = internet_access
    network_policy.external_ip.enabled = external_ip

    request.network_policy = network_policy

    return client.update_network_policy(request)

在您的项目中使用 VPC 来进行工作负载互联网访问

您可以选择通过项目中的 VPC 来定向来自 VMware Engine 中工作负载虚拟机的互联网绑定流量。此选项仅适用于与您的 VPC 网络对等互连的标准 VMware Engine 网络。

如需通过项目中的 VPC 从工作负载虚拟机访问互联网,您必须完成以下步骤:

  1. 在 VPC 中配置互联网访问权限。
    • 如果您使用 Cloud NAT :确保 Cloud NAT 配置为向 VPC 网络中的资源提供互联网访问权限。 由于 Cloud NAT 直接提供互联网连接,因此不需要 0.0.0.0/0 的特定路由。
    • 如果您不使用 Cloud NAT:确保您的 VPC 中有一条目标为 0.0.0.0/0 的路由,该路由将流量定向到提供互联网访问权限的 下一跃点,例如基于实例的 防火墙或代理。此外,您必须配置 VPC 网络对等互连以交换自定义路由。更新对等互连连接以从 VPC 导出自定义路由,并向其导入自定义路由。
  2. 按照在区域中停用互联网访问服务中的步骤,停用 VMware Engine 网络的互联网访问和公共 IP 服务。

完成这些步骤后,来自工作负载虚拟机的互联网绑定流量将通过对等互连连接路由到您的 VPC 网络,并使用在那里配置的互联网访问解决方案。

如需了解详情,请参阅使用 VPC 为工作负载虚拟机配置互联网访问权限

使用本地连接来进行工作负载互联网访问

您可以选择通过本地连接来定向来自 VMware Engine 中工作负载虚拟机的互联网绑定流量。VMware Engine 如何定向流量取决于以下状态:

  • 来自本地的默认路由 (0.0.0.0/0) 通告
  • VMware Engine 公共 IP 服务
  • VMware Engine 互联网访问服务
  • 针对您的 VPC 网络和 VMware Engine 之间的 VPC 对等互连连接的 VPC Service Controls(仅限旧版 VMware Engine 网络)

启用“通过本地连接路由互联网流量”功能

如需通过本地连接从工作负载虚拟机访问互联网,您必须完成两个步骤:

  1. 通过本地连接(Cloud VPN 或 Cloud Interconnect)从本地通告默认路由 (0.0.0.0/0)。检查 Cloud VPN 网关或 Cloud Router,其中与 VPN 的本地连接终止。
  2. 停用 VMware Engine 网络的互联网访问和公共 IP 服务。

控制台

  1. 在 Google Cloud 控制台中,前往网络政策 页面。

    前往“网络政策”页面

  2. 点击选择项目 ,然后选择包含您要为其启用互联网访问服务的 VMware Engine 网络的组织、文件夹或项目。

  3. 在与相关网络政策对应的行中,点击 更多 图标。

  4. 公共 IP 切换为已停用

  5. 互联网访问 切换为已停用

  6. 点击保存

  7. 如果使用旧版 VMware Engine 网络:使用gcloud services vpc-peerings enable-vpc-service-controls命令,在您的 VPC 网络与 VMware Engine 之间的 VPC 对等互连连接上启用VPC Service Controls

    gcloud services vpc-peerings enable-vpc-service-controls \
       --network=VPC_NETWORK \
       --service=servicenetworking.googleapis.com

gcloud

使用 gcloud 工具运行以下命令以更新网络政策:

gcloud vmware network-policies update NETWORK_POLICY_NAME \
  --no-internet-access \
  --no-external-ip-address \
  --location LOCATION

请替换以下内容:

  • NETWORK_POLICY_NAME:此网络政策的名称
  • LOCATION:对于旧版网络,为 global;对于标准网络,为区域

如果使用旧版 VMware Engine 网络:使用 gcloud services vpc-peerings enable-vpc-service-controls 命令,在 VPC 网络与 VMware Engine 之间的 VPC 对等互连连接上启用 VPC Service Controls

gcloud services vpc-peerings enable-vpc-service-controls \
   --network=VPC_NETWORK \
   --service=servicenetworking.googleapis.com

API

curl -X PATCH -H "Authorization: Bearer TOKEN"  -H "Content-Type: application/json; charset=utf-8" https://vmwareengine.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/networkPolicies/NETWORK_POLICY_NAME?updateMask=internetAccess.enabled,externalIp.enabled

"{
  "internetAccess: {
    "enabled": false
   },
  "externalIp: {
    "enabled": false
   }
}"

如果使用旧版 VMware Engine 网络:使用 gcloud services vpc-peerings enable-vpc-service-controls 命令,在 VPC 网络与 VMware Engine 之间的 VPC 对等互连连接上启用 VPC Service Controls

gcloud services vpc-peerings enable-vpc-service-controls \
   --network=VPC_NETWORK_NAME \
   --service=servicenetworking.googleapis.com

Python

internet_accessexternal_ip 设置为 False

from google.api_core import operation
from google.cloud import vmwareengine_v1


def update_network_policy(
    project_id: str, region: str, internet_access: bool, external_ip: bool
) -> operation.Operation:
    """
    Updates a network policy in a given network.

    Args:
        project_id: name of the project you want to use.
        region: name of the region you want to use. I.e. "us-central1".
        internet_access: should internet access be allowed.
        external_ip: should external IP addresses be assigned.

    Returns:
        An operation object representing the started operation. You can call its .result() method to wait for
        it to finish.
    """

    client = vmwareengine_v1.VmwareEngineClient()
    request = vmwareengine_v1.UpdateNetworkPolicyRequest()
    request.update_mask = "internetAccess.enabled,externalIp.enabled"
    network_policy = vmwareengine_v1.NetworkPolicy()
    network_policy.name = (
        f"projects/{project_id}/locations/{region}/networkPolicies/{region}-default"
    )
    network_policy.vmware_engine_network = f"projects/{project_id}/locations/{region}/vmwareEngineNetworks/{region}-default"
    network_policy.internet_access.enabled = internet_access
    network_policy.external_ip.enabled = external_ip

    request.network_policy = network_policy

    return client.update_network_policy(request)

如果使用旧版 VMware Engine 网络:使用 gcloud services vpc-peerings enable-vpc-service-controls 命令,在 VPC 网络与 VMware Engine 之间的 VPC 对等互连连接上启用 VPC Service Controls

gcloud services vpc-peerings enable-vpc-service-controls \
   --network=VPC_NETWORK \
   --service=servicenetworking.googleapis.com

如果使用旧版 Google Cloud VMware Engine 网络,您必须启用 VPC Service Controls,才能通过本地连接或项目中的 VPC 路由旧版 VEN 互联网访问。此要求仅适用于旧版 Google Cloud VMware Engine 网络,而不适用于标准 VEN。

启用 VPC Service Controls 后, Google Cloud 会在服务提供方 VPC 网络(在本例中,为与 VMware Engine 对等互连的服务租户项目)中进行以下路由更改:

  • 移除 IPv4 默认路由(目的地为 0.0.0.0/0,下一个跃点为默认互联网网关)。
  • 开始使用 VPC 对等互连默认路由转发互联网流量。

示例:

如需为当前项目上名为“my-network”的网络启用 VPC Service Controls 对等互连,请使用 gcloud services vpc-peerings enable-vpc-service-controls 命令

    gcloud services vpc-peerings enable-vpc-service-controls \
        --network=my-network \
        --service=servicenetworking.googleapis.com

停用“通过本地连接路由互联网流量”功能

如需停用“通过本地连接路由来自工作负载虚拟机的互联网流量”功能,请停止通告默认路由 (0.0.0.0/0),并对 VPC 对等互连连接停用 VPC Service Controls。

如果使用旧版 VMware Engine 网络:如需在 VPC 网络与 VMware Engine 之间的 VPC 对等互连连接上停用 VPC Service Controls,请使用 gcloud services vpc-peerings disable-vpc-service-controls 命令

gcloud services vpc-peerings disable-vpc-service-controls \
    --network=VPC_NETWORK_NAME \
    --service=servicenetworking.googleapis.com

后续步骤