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

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

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

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

  • 每个区域最多 100 个公共 IP 地址
  • 每个防火墙表最多 300 条防火墙规则
  • 每个区域最多 128000 个并发连接,吞吐量最高 2 Gbps
  • TCP、UDP 和 ICMP 协议

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

准备工作

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

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

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

  • 符合 RFC 1918 作为专用地址范围的要求。
  • 不与任何其他 VMware Engine 地址范围(例如,用于管理设备或 NSX-T 片段的地址范围)重叠。
  • 不与向 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. 点击创建以创建新政策。如果您想修改现有网络政策,请点击行末的更多 图标,然后选择修改

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

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

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

  6. 点击创建

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

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 地址块。
  • LOCATIONglobal(适用于旧版网络)或标准网络的区域

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
  • LOCATIONglobal(适用于旧版网络)或标准网络的区域
  • 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)

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

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

控制台

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

    前往“网络政策”页面

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

  3. 互联网访问权限切换为已停用

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

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

gcloud

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

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

请替换以下内容:

  • NETWORK_POLICY_NAME:此网络政策的名称
  • LOCATIONglobal(适用于旧版网络)或标准网络的区域

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
  • LOCATIONglobal(适用于旧版网络)或标准网络的区域
  • 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)

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

您可以选择通过本地连接来定向来自 VMware Engine 中工作负载虚拟机的互联网绑定流量。系统根据以下各项的状态定向流量:

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

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

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

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

控制台

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

    前往“网络政策”页面

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

  3. 公共 IP 切换为已停用

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

  5. 点击保存

  6. 如果使用旧版 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:此网络政策的名称
  • LOCATIONglobal(适用于旧版网络)或标准网络的区域

如果使用旧版 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_access 和 external_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

若要在项目中通过本地连接或 VPC 路由互联网流量,必须启用 VPC Service Controls。

启用 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 网络:使用 gcloud services vpc-peerings disable-vpc-service-controls 命令,在 VPC 网络与 VMware Engine 之间的 VPC 对等互连连接上停用 VPC Service Controls:

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

后续步骤