在共用虛擬私有雲主機專案中設定連接器

如果貴機構使用共用虛擬私有雲,您可以在服務專案或主專案中設定 Serverless VPC Access 連接器。本指南說明如何在主機專案中設定連接器。

如要在服務專案中設定連接器,請參閱「在服務專案中設定連接器」。如要瞭解各項方法的優點,請參閱「連線至共用虛擬私有雲網路」。

事前準備

  1. 檢查目前使用的帳戶是否具備身分與存取權管理 (IAM) 角色。有效帳戶必須在主專案中具備下列角色:

  2. 在偏好的環境中選取主專案。

控制台

  1. 前往 Google Cloud 控制台資訊主頁。

    前往 Google Cloud 控制台資訊主頁

  2. 在資訊主頁頂端的選單列中,按一下專案下拉式選單,然後選取主專案。

gcloud

在 gcloud CLI 中,將預設專案設為主機專案,方法是在終端機中執行下列指令:

gcloud config set project HOST_PROJECT_ID

更改下列內容:

  • HOST_PROJECT_ID:共用虛擬私有雲主專案的 ID

建立 Serverless VPC Access 連接器

如要向虛擬私有雲網路傳送要求並接收相應的回應,您必須建立無伺服器虛擬私有雲存取連接器。您可以使用 Google Cloud 控制台、Google Cloud CLI 或 Terraform 建立連接器:

主控台

  1. 為專案啟用 Serverless VPC Access API。

    啟用 API

  2. 前往「Serverless VPC Access」(無伺服器虛擬私人雲端存取) 總覽頁面。

    前往「Serverless VPC Access」(無伺服器虛擬私人雲端存取) 頁面

  3. 按一下 [Create connector] (建立連接器)

  4. 在「Name」(名稱) 欄位中,輸入連接器的名稱。名稱必須符合 Compute Engine 命名慣例,且長度不得超過 21 個字元。連字號 (-) 算兩個字元。

  5. 在「Region」(區域) 欄位中,選取連接器的區域。這必須與無伺服器服務的地區相符。

    如果服務位於 us-centraleurope-west 區域,請使用 us-central1europe-west1

  6. 在「Network」(網路) 欄位中,選取要附加連接器的虛擬私人雲端網路。

  7. 按一下「子網路」下拉式選單:

    選取未使用的 /28 子網路。

    • 子網路只能供連接器使用。其他資源 (例如 VM、Private Service Connect 或負載平衡器) 無法使用這些 IP 位址。
    • 如要確認子網路未用於 Private Service Connect 或 Cloud Load Balancing,請在 gcloud CLI 中執行下列指令,檢查子網路 purpose 是否為 PRIVATE
      gcloud compute networks subnets describe SUBNET_NAME
      
      SUBNET_NAME 替換為子網路名稱。
  8. (選用) 如要設定縮放選項,進一步控管連接器,請按一下「顯示縮放設定」,顯示縮放表單。

    1. 設定連接器的執行個體數量下限和上限,或使用預設值 (下限為 2,上限為 10)。隨著流量增加,連接器會擴充至指定上限,但流量減少時,連接器不會縮減。你必須使用介於 210 之間的值,且 MIN 值必須小於 MAX 值。
    2. 在「Instance Type」(執行個體類型) 下拉式選單中,選擇要用於連接器的機器類型,或使用預設的 e2-micro。選擇執行個體類型時,請注意右側的費用側邊欄,其中會顯示頻寬和費用預估。
  9. 點選「建立」

  10. 若連接器可供使用,其名稱旁邊會顯示一個綠色勾號。

gcloud

  1. gcloud 元件更新到最新版本:

    gcloud components update
    
  2. 為專案啟用 Serverless VPC Access API:

    gcloud services enable vpcaccess.googleapis.com
    
  3. 建立無伺服器虛擬私有雲存取連接器:

    gcloud compute networks vpc-access connectors create CONNECTOR_NAME \
    --region=REGION \
    --subnet=SUBNET \
    --subnet-project=HOST_PROJECT_ID \
    # Optional: specify minimum and maximum instance values between 2 and 10, default is 2 min, 10 max.
    --min-instances=MIN \
    --max-instances=MAX \
    # Optional: specify machine type, default is e2-micro
    --machine-type=MACHINE_TYPE

    更改下列內容:

    • CONNECTOR_NAME:連接器名稱。名稱必須遵循 Compute Engine 命名慣例,且長度不得超過 21 個字元。連字號 (-) 算兩個字元。
    • REGION:連接器的區域;這必須與無伺服器服務的區域相符。如果服務位於 us-centraleurope-west 區域,請使用 us-central1europe-west1
    • SUBNET:未使用的 /28 子網路名稱。
      • 子網路只能供連接器使用。其他資源 (例如 VM、Private Service Connect 或負載平衡器) 無法使用這些 IP 位址。
      • 如要確認子網路未用於 Private Service Connect 或 Cloud Load Balancing,請執行下列 gcloud CLI 指令,檢查子網路 purpose 是否為 PRIVATE
        gcloud compute networks subnets describe SUBNET_NAME
        
        取代下列項目:
        • SUBNET_NAME:子網路名稱
    • HOST_PROJECT_ID:主專案的 ID
    • MIN:連接器使用的執行個體數量下限。請使用介於 29 之間的整數。預設為 2 步。如要瞭解連接器資源調度,請參閱「輸送量和資源調度」。
    • MAX:連接器使用的執行個體數量上限。請使用介於 310 之間的整數。預設為 10 步。如果流量需要,連接器會擴充至 [MAX] 個執行個體,但不會縮減。如要瞭解連接器資源調度,請參閱「輸送量和資源調度」。
    • MACHINE_TYPEf1-microe2-microe2-standard-4。如要瞭解連接器輸送量 (包括機器類型和資源調度),請參閱「輸送量和資源調度」。

    如要瞭解詳情和選用引數,請參閱 gcloud 參考資料

  4. 先驗證您的連接器是否處於 READY 狀態,然後再使用:

    gcloud compute networks vpc-access connectors describe CONNECTOR_NAME \
    --region=REGION

    更改下列內容:

    • CONNECTOR_NAME:連接器名稱,也就是您在上一個步驟中指定的名稱
    • REGION:連接器所在的區域,也就是您在上一個步驟中指定的區域

    輸出內容應包含 state: READY 這一行。

Terraform

您可以使用 Terraform 資源啟用 vpcaccess.googleapis.com API。

resource "google_project_service" "vpcaccess-api" {
  project = var.project_id # Replace this with your project ID in quotes
  service = "vpcaccess.googleapis.com"
}

您可以使用 Terraform 模組建立虛擬私有雲網路和子網路,然後建立連接器。

module "test-vpc-module" {
  source       = "terraform-google-modules/network/google"
  version      = "~> 10.0"
  project_id   = var.project_id # Replace this with your project ID in quotes
  network_name = "my-serverless-network"
  mtu          = 1460

  subnets = [
    {
      subnet_name   = "serverless-subnet"
      subnet_ip     = "10.10.10.0/28"
      subnet_region = "us-central1"
    }
  ]
}

module "serverless-connector" {
  source     = "terraform-google-modules/network/google//modules/vpc-serverless-connector-beta"
  version    = "~> 10.0"
  project_id = var.project_id
  vpc_connectors = [{
    name        = "central-serverless"
    region      = "us-central1"
    subnet_name = module.test-vpc-module.subnets["us-central1/serverless-subnet"].name
    # host_project_id = var.host_project_id # Specify a host_project_id for shared VPC
    machine_type  = "e2-standard-4"
    min_instances = 2
    max_instances = 7
    }
    # Uncomment to specify an ip_cidr_range
    #   , {
    #     name          = "central-serverless2"
    #     region        = "us-central1"
    #     network       = module.test-vpc-module.network_name
    #     ip_cidr_range = "10.10.11.0/28"
    #     subnet_name   = null
    #     machine_type  = "e2-standard-4"
    #     min_instances = 2
    #   max_instances = 7 }
  ]
  depends_on = [
    google_project_service.vpcaccess-api
  ]
}

提供連接器存取權

將主專案的「無伺服器虛擬私有雲存取使用者」身分與存取權管理角色授予部署 App Engine 服務的主體,以提供連接器存取權。

主控台

  1. 開啟 IAM 頁面。

    前往身分與存取權管理頁面

  2. 按一下專案下拉式選單,然後選取主專案。

  3. 按一下「新增」

  4. 在「New principals」(新增主體) 欄位中,新增部署 App Engine 服務的主體。

  5. 在「角色」欄位中,選取「無伺服器虛擬私有雲存取使用者」

  6. 按一下 [儲存]

gcloud

在終端機中執行下列指令:

gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
--member=PRINCIPAL \
--role=roles/vpcaccess.user

更改下列內容:

  • HOST_PROJECT_ID:共用虛擬私有雲主專案的 ID
  • PRINCIPAL:部署 App Engine 服務的主體。進一步瞭解 --member 旗標

讓連接器可供探索

如要查看連結器,主體必須在主專案和服務專案中都具備特定檢視角色。如要讓主體在 Google Cloud 控制台或終端機中查看可用連線器時,看到您的連線器,請為主體新增 IAM 角色,這些主體會部署 App Engine 服務。

在主專案中授予 IAM 角色

在主專案中,將無伺服器虛擬私有雲存取檢視者 (vpcaccess.viewer)角色授予部署 App Engine 服務的主體。

主控台

  1. 開啟 IAM 頁面。

    前往身分與存取權管理頁面

  2. 按一下專案下拉式選單,然後選取主專案。

  3. 按一下「新增」

  4. 在「New principals」(新增主體) 欄位中,輸入應可從服務專案查看連接器的主要電子郵件地址。您可以在這個欄位中輸入多個電子郵件地址。

  5. 在「角色」欄位中,選取「無伺服器虛擬私有雲存取檢視者」

  6. 按一下 [儲存]

gcloud

在終端機中執行下列指令:

gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
--member=PRINCIPAL \
--role=roles/vpcaccess.viewer

更改下列內容:

  • HOST_PROJECT_ID:共用虛擬私有雲主專案的 ID
  • PRINCIPAL:部署 App Engine 服務的主體。進一步瞭解 --member 旗標

在服務專案中授予 IAM 角色

在服務專案中,將Compute Network Viewer (compute.networkViewer) 角色授予部署 App Engine 服務的主體。

主控台

  1. 開啟 IAM 頁面。

    前往身分與存取權管理頁面

  2. 按一下專案下拉式選單,然後選取服務專案。

  3. 按一下「新增」

  4. 在「New principals」(新增主體) 欄位中,輸入應可從服務專案查看連接器的主要電子郵件地址。您可以在這個欄位中輸入多個電子郵件地址。

  5. 在「角色」欄位中,選取「Compute 網路檢視者」

  6. 按一下 [儲存]

gcloud

在終端機中執行下列指令:

gcloud projects add-iam-policy-binding SERVICE_PROJECT_ID \
--member=PRINCIPAL \
--role=roles/compute.networkViewer

更改下列內容:

  • SERVICE_PROJECT_ID:服務專案的 ID
  • PRINCIPAL:部署 App Engine 服務的主體。進一步瞭解 --member 旗標

將服務設定為使用連接器

針對需要存取共用 VPC 的每個 App Engine 服務,您都必須為該服務指定連接器。下列步驟說明如何將服務設定為使用連接器。

  1. 停用 URL Fetch 預設值,並停止明確使用 urlfetch 程式庫。無伺服器虛擬私有雲存取與網址擷取服務不相容。

  2. vpc_access_connector 新增至服務的 app.yaml 檔案:

    vpc_access_connector:
    name: projects/HOST_PROJECT_ID/locations/REGION/connectors/CONNECTOR_NAME
    

    更改下列內容:

    • HOST_PROJECT_ID:共用虛擬私有雲主專案的 ID
    • REGION:連接器的區域
    • CONNECTOR_NAME:連接器名稱
  3. 部署服務:

    gcloud app deploy

部署後,服務就能將要求傳送至共用虛擬私有雲網路,並接收相應的回應。

後續步驟