為工作負載 VM 設定網路連線能力

您可以為 Google Cloud VMware Engine 中的 VMware 工作負載,依區域設定網路連線服務。您可以使用 Google Cloud的網際網路邊緣或內部連線,將工作負載 VM 的網際網路流量導向網際網路。

可存取網際網路的工作負載 VM 也可以使用私人 Google 存取權存取 Google Cloud服務。使用 Private Google Access 存取 Google Cloud 服務時,資料會保留在 Google Cloud 網路中,不會傳送到網際網路。

網際網路存取網路服務支援下列項目:

  • 每個區域最多可使用 100 個公開 IP 位址
  • 每個防火牆資料表最多可設定 300 個防火牆規則
  • 每個區域最多 128k 個並行連線,處理量最高可達 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 上的程式碼範例

設定網際網路存取服務

您可以建立或更新網路政策,允許工作負載 VM 存取網際網路。

根據預設,網路存取網路服務會停用。

在某個區域啟用網際網路存取服務

主控台

如要在某個區域啟用網際網路存取服務,請按照下列步驟操作:

  1. 在 Google Cloud 控制台中,前往「Network policies」頁面。

    前往「網路政策」頁面

  2. 按一下「選取專案」,然後選取包含要啟用網際網路存取服務的 VMware Engine 網路的機構、資料夾或專案。

  3. 按一下「建立」建立新政策。如要編輯現有網路政策,請按一下資料列末端的「更多」圖示 ,然後選取「編輯」

  4. 填寫網路政策的詳細資料,包括選擇政策適用的網路和區域。

  5. 將「網際網路存取」切換至「已啟用」,並視需要啟用「外部 IP 位址服務」

  6. 在「Edge Services 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 區塊。
  • 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 控制台中,前往「Network policies」頁面。

    前往「網路政策」頁面

  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:這個網路政策的名稱
  • 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 中的工作負載 VM 直接傳送網際網路流量。系統會根據下列項目的狀態,將流量導向至適當的目標:

  • 來自內部部署的預設路徑 (0.0.0.0/0) 廣告
  • VMware Engine 公開 IP 服務
  • VMware Engine 網路連線服務
  • 在虛擬私有雲網路和 VMware Engine 之間的虛擬私有雲對等互連連線上設定 VPC Service Controls

啟用透過地端連線轉送網際網路流量

如要透過內部連線從工作負載 VM 存取網際網路,您必須完成兩個步驟:

  1. 透過內部部署連線 (Cloud VPN 或 Cloud Interconnect) 宣告內部部署的預設路徑 (0.0.0.0/0)。檢查 Cloud VPN 閘道或 Cloud Router,找出內部部署 VPN 連線終止的位置。
  2. 停用 VMware Engine 網路的網際網路存取權和公開 IP 服務。

主控台

  1. 在 Google Cloud 控制台中,前往「Network policies」頁面。

    前往「網路政策」頁面

  2. 按一下「選取專案」,然後選取包含要啟用網路存取服務的 VMware Engine 網路的機構、資料夾或專案。

  3. 在對應相關網路政策的資料列中,按一下「更多」圖示

  4. 將「公開 IP」切換為「停用」

  5. 將「網路存取」切換為「停用」

  6. 按一下 [儲存]

  7. 如果使用舊版 VMware Engine 網路:請使用 gcloud services vpc-peerings enable-vpc-service-controls 指令,在 VPC 網路與 VMware Engine 之間的 VPC 對等互連連線中啟用 VPC 服務控管

    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 服務控管

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 服務控管

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 服務控管

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

啟用 VPC Service Controls 是透過內部部署連線或專案中的 VPC 路由網際網路流量的必要條件。

啟用 VPC Service Controls 後, Google Cloud 會在服務供應商虛擬私有雲網路 (在本例中為與 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 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

後續步驟