使用 Private Service Connect 發布服務

服務生產者可以使用 Private Service Connect,透過虛擬私有雲網路中的內部 IP 位址發布服務。服務發布後,服務消費者就能使用消費者虛擬私有雲網路中的內部 IP 位址存取服務。

本指南說明如何使用 Private Service Connect 發布服務。如要發布服務,請按照下列步驟操作:

Private Service Connect 提供兩種連線至已發布服務的方法:

這幾種端點類型需要略有不同的製作人設定。詳情請參閱「功能和相容性」。

角色

下列 IAM 角色提供執行本指南中工作所需的權限。

事前準備

  • 如要瞭解發布服務的相關資訊 (包括限制),請參閱「關於已發布的服務」。

  • 決定服務是否應可供所有專案存取,或是否要控管可存取服務的專案

  • 決定這項服務要支援端點、後端,還是兩者皆支援。如要進一步瞭解端點和後端,請參閱 Private Service Connect 類型

    如要進一步瞭解服務設定需求,請參閱「功能和相容性」。

  • 決定是否要為服務設定網域名稱,這會自動為服務消費者端點設定 DNS。如果您設定了網域名稱,發布服務的 IAM 主體必須在 Google Search Console 中驗證自己擁有該網域的擁有者權限。如果您設定網域名稱,但您並非網域擁有者,則無法發布服務。如要驗證擁有權,請前往 Google Search Console

    您在服務連結中指定的網域名稱,可以是您驗證的網域子網域。舉例來說,您可以驗證 example.com,然後建立服務附件,網域名稱為 us-west1.p.example.com

  • 決定服務是否要使用 PROXY 通訊協定,提供消費者連線的詳細資料。如果您打算使用 PROXY 通訊協定,請確認目標服務類型和服務的後端網頁伺服器軟體都支援該通訊協定。如要瞭解支援 PROXY 通訊協定的目標服務類型,請參閱「功能和相容性」。

建立目標服務

如要代管服務,請在服務生產端虛擬私有雲網路中建立下列其中一個目標服務:

如要瞭解各目標服務支援的設定,請參閱「功能和相容性」。

每個服務附件只能與單一目標服務建立關聯。您無法將多個服務附件與同一個目標服務建立關聯。

目標服務的 IP 版本 (IPv4 或 IPv6) 會影響哪些消費者可以連線至您發布的服務。詳情請參閱「IP 版本轉換」。

如果是區域性內部 Proxy 網路負載平衡器,後端可以位於Google Cloud、其他雲端、內部部署環境,或這些位置的任意組合。

您也可以發布在 Google Kubernetes Engine 內部直通網路負載平衡器上代管的服務。這項設定 (包括負載平衡器和服務附件設定) 說明請參閱 GKE 說明文件中的「使用 Private Service Connect 建立內部直通式網路負載平衡器」。

為 Private Service Connect 建立子網路

建立一或多個專屬子網路,以搭配 Private Service Connect 使用。您必須在與服務負載平衡器相同的區域中建立子網路。

如果您使用 Google Cloud 控制台發布服務,可以在該程序中建立子網路。

您可以在共用虛擬私有雲主專案中建立 Private Service Connect 子網路。

您無法將一般子網路轉換為 Private Service Connect 子網路。

您建立的子網路 IP 堆疊類型必須與負載平衡器轉送規則的 IP 版本相容:

  • 如要使用 IPv4 轉送規則,請建立僅限 IPv4 或雙重堆疊的子網路。
  • 如要使用 IPv6 轉送規則,請建立具有內部 IPv6 位址範圍的雙重堆疊子網路。
  • 如果您使用雙重堆疊子網路,系統會使用 IPv4 或 IPv6 位址範圍,但不會同時使用兩者。

Private Service Connect 不支援使用僅支援 IPv6 的子網路 (預先發布版) 做為 NAT 子網路。

如要為現有服務提供更多 IP 位址,請參閱「從已發布的服務新增或移除子網路」。

主控台

  1. 在 Google Cloud 控制台中,前往「VPC networks」(虛擬私有雲網路) 頁面。

    前往「VPC networks」(虛擬私有雲網路)

  2. 按一下虛擬私有雲網路的名稱,顯示其「VPC network details」(虛擬私有雲網路詳細資料) 頁面。

  3. 點選「子網路」

  4. 按一下 [Add subnet] (新增子網路)。在顯示的面板中,執行下列操作:

    1. 提供「Name」(名稱)
    2. 選擇一個 [Region] (地區)
    3. 在「用途」部分,選取「Private Service Connect」
    4. 選取 IP 堆疊類型
    5. 輸入 IPv4 範圍。例如:10.10.10.0/24
    6. 如要建立雙重堆疊子網路,請將「IPv6 存取權類型」設為「內部」
    7. 按一下「新增」

gcloud

使用 gcloud compute networks subnets create 指令

  • 如要建立僅支援 IPv4 的 Private Service Connect 子網路,請按照下列步驟操作:

    gcloud compute networks subnets create SUBNET_NAME \
        --network=NETWORK_NAME \
        --region=REGION \
        --range=SUBNET_RANGE \
        --purpose=PRIVATE_SERVICE_CONNECT
    
  • 如要建立雙堆疊 Private Service Connect 子網路,請執行下列操作:

    gcloud compute networks subnets create SUBNET_NAME \
        --network=NETWORK_NAME \
        --region=REGION \
        --stack-type=IPV4_IPV6 \
        --ipv6-access-type=INTERNAL \
        --range=SUBNET_RANGE \
        --purpose=PRIVATE_SERVICE_CONNECT
    

更改下列內容:

  • SUBNET_NAME:要指派給子網路的名稱。

  • NETWORK_NAME:新子網路的虛擬私有雲名稱。

  • REGION:新子網路的區域。這個區域必須與您發布的服務位於同一個區域。

  • SUBNET_RANGE:用於子網路的 IPv4 位址範圍,例如 10.10.10.0/24

API

subnetworks.insert 方法發出 POST 要求。

  • 如要建立僅支援 IPv4 的 Private Service Connect 子網路,請按照下列步驟操作:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks
    
    {
      "ipCidrRange": "SUBNET_RANGE",
      "name": "SUBNET_NAME",
      "network": "projects/PROJECT_ID/global/networks/NETWORK_NAME",
      "purpose": "PRIVATE_SERVICE_CONNECT",
    }
    
  • 如要建立雙堆疊 Private Service Connect 子網路,請執行下列操作:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks
    
    {
      "ipCidrRange": "SUBNET_RANGE",
      "name": "SUBNET_NAME",
      "network": "projects/PROJECT_ID/global/networks/NETWORK_NAME",
      "purpose": "PRIVATE_SERVICE_CONNECT",
      "stackType": "IPV4_IPV6",
      "ipv6AccessType": "INTERNAL"
    }
    

更改下列內容:

  • PROJECT_ID:子網路的專案。

  • REGION:新子網路的區域。這個區域必須與您發布的服務位於同一個區域。

  • SUBNET_RANGE:用於子網路的 IPv4 位址範圍。例如:10.10.10.0/24

  • SUBNET_NAME:要指派給子網路的名稱。

  • NETWORK_NAME:新子網路的虛擬私有雲網路名稱。

設定防火牆規則

設定防火牆規則,允許端點/後端與服務附件之間的流量。用戶端要求來源位置取決於 Private Service Connect 類型。

Private Service Connect 類型 用戶端流量的 IP 位址範圍 詳細資料
端點 (根據轉送規則) 與這項服務相關聯的 Private Service Connect 子網路 IP 位址範圍。 如果您使用預設網路,預先填入的 default-allow-internal 規則會允許這類流量,除非有優先順序較高的規則封鎖流量。
後端 (以全域外部應用程式負載平衡器為準)
  • 130.211.0.0/22
  • 35.191.0.0/16
Google Front End (GFE) 導入了全域外部應用程式負載平衡器,並使用這些 IP 位址範圍。

如果防火牆設定尚未允許來自適當端點類型的流量,請設定防火牆規則來允許。

以下範例設定可讓您建立虛擬私有雲防火牆規則,允許來自用戶端 IP 位址範圍的流量傳送至生產者服務負載平衡器中的後端 VM。這項設定假設後端 VM 已設定網路標記

ingress 規則範例:

gcloud compute firewall-rules create NAME \
    --network=NETWORK_NAME \
    --direction=ingress \
    --action=allow \
    --target-tags=TAG \
    --source-ranges=CLIENT_IP_RANGES_LIST \
    --rules=RULES_LIST

更改下列內容:

  • NAME:防火牆規則的名稱。

  • NETWORK_NAME:包含服務和 Private Service Connect 子網路的網路。

  • TAG:套用至生產者服務負載平衡器中後端 VM 的目標標記。

  • CLIENT_IP_RANGES_LIST:用戶端流量的來源 IP 位址範圍。詳情請參閱上表。

  • RULES_LIST:以半形逗號分隔的通訊協定和目的地通訊埠清單,規則會套用至這些項目。例如:tcp,udp

輸出規則範例:

gcloud compute firewall-rules create NAME \
    --network=NETWORK_NAME \
    --direction=egress \
    --action=allow \
    --target-tags=TAG \
    --destination-ranges=CLIENT_IP_RANGES_LIST \
    --rules=RULES_LIST

更改下列內容:

  • NAME:防火牆規則的名稱。

  • NETWORK_NAME:包含服務和 Private Service Connect 子網路的網路。

  • TAG:套用至生產者服務負載平衡器中後端 VM 的目標標記。

  • CLIENT_IP_RANGES_LIST:用戶端流量的來源 IP 位址範圍。詳情請參閱上表。

  • RULES_LIST:以半形逗號分隔的通訊協定和目的地通訊埠清單,規則會套用至這些項目。例如:tcp,udp

如要進一步瞭解如何設定虛擬私有雲防火牆規則,請參閱虛擬私有雲防火牆規則。如要設定階層式防火牆規則來允許這類流量,請參閱「階層式防火牆政策」。

發布服務

如要發布服務,請建立服務連結。你可以透過下列兩種方式提供服務:

在服務負載平衡器所在的地區中建立服務附件。

每個服務連結可指向一或多個 Private Service Connect 子網路,但 Private Service Connect 子網路無法用於多個服務連結。

如要查看消費者連線資訊,請在支援的服務上啟用 PROXY 通訊協定。只有在目標服務類型 (已知問題) 和服務的後端網頁伺服器軟體都支援 PROXY 通訊協定時,才啟用這項通訊協定。如要瞭解支援 PROXY 通訊協定的目標服務類型,請參閱「功能和相容性」。如要進一步瞭解 PROXY 通訊協定,請參閱「消費者連線資訊」。

本節說明如何發布以負載平衡器為基礎的服務。如要瞭解如何建立參照 Secure Web Proxy 執行個體的服務連結,請參閱「將 Secure Web Proxy 部署為 Private Service Connect 服務連結」。

發布具有自動核准功能的服務

請按照這些操作說明發布服務,並自動允許任何消費者連線至這項服務。如要明確核准消費者連線,請參閱發布具有明確核准功能的服務

發布服務時,您會建立服務連結。服務消費者會使用服務連結詳細資料連線至您的服務。

發布服務時,如果選擇自動核准,傳播連線數量限制會套用至連線至服務連結的每個消費者專案。

如要發布使用跨區域內部應用程式負載平衡器 (預先發布版) 的服務,請使用 Google Cloud CLI 或傳送 API 要求。

主控台

  1. 前往 Google Cloud 控制台的「Private Service Connect」頁面。

    前往 Private Service Connect

  2. 按一下「已發布的服務」分頁標籤。

  3. 按一下「發布服務」

  4. 在「目標詳細資料」部分中,選取「負載平衡器」

  5. 選取負載平衡器類型。

  6. 選取負責託管要發布服務的內部負載平衡器。「網路和區域」欄位會填入所選內部負載平衡器的詳細資料。

    服務專案管理員可以選取具有共用虛擬私人雲端網路 IP 位址的內部負載平衡器。詳情請參閱「共用虛擬私有雲」。

  7. 如果系統提示,請選取要發布的服務所關聯的轉送規則

  8. 在「服務名稱」部分,輸入服務連結的名稱。

  9. 為服務選取一或多個 Private Service Connect 子網路。系統會從所選內部負載平衡器的虛擬私有雲網路填入子網路清單,包括透過共用虛擬私有雲與服務專案共用的子網路。

    如果服務連結使用內部負載平衡器,且 IP 位址來自共用虛擬私有雲網路,您必須從相同的共用虛擬私有雲網路選取共用子網路。

    如要新增子網路,可以按照以下步驟操作:

    1. 按一下「保留新的子網路」
    2. 輸入子網路的「名稱」和「說明」 (選填)。
    3. 選取子網路的「區域」
    4. 選取 IP 堆疊類型
    5. 輸入要用於子網路的「IPv4 範圍」,然後按一下「新增」
  10. 如要查看消費者連線資訊,請選取「使用 Proxy 通訊協定」

  11. 選取「自動接受所有連線」

  12. 如要停用連線協調功能,請取消勾選「啟用連線協調功能」核取方塊。

  13. 選用:按一下「進階設定」,然後執行下列操作:

    1. 如要設定網域名稱,請輸入網域名稱,包括結尾的半形句號。

      建議的網域名稱格式為 REGION.p.DOMAIN.

      您必須擁有網域名稱,詳情請參閱「DNS 設定」。

    2. 輸入 NCC 傳播連線數量限制。如未指定,預設值為 250

  14. 按一下「新增服務」

gcloud

使用 gcloud compute service-attachments create 指令

gcloud compute service-attachments create ATTACHMENT_NAME \
    --region=ATTACHMENT_REGION \
    --target-service=TARGET_SERVICE \
    --connection-preference=ACCEPT_AUTOMATIC \
    --nat-subnets=PSC_SUBNET_LIST \
    [ --propagated-connection-limit=PROPAGATED_CONNECTION_LIMIT ] \
    [ --enable-proxy-protocol ] \
    [ --domain-names=DOMAIN_NAME ]

更改下列內容:

  • ATTACHMENT_NAME:要指派給服務附件的名稱。

  • ATTACHMENT_REGION:新服務附件的區域。這必須與目標轉送規則的 IP 位址位於相同地區。

  • TARGET_SERVICE:與您發布的服務相關聯的轉送規則 URI。

    • 如果是跨區域內部應用程式負載平衡器,請使用下列格式:projects/PROJECT_ID/global/forwardingRules/RULE_NAME
    • 如要使用其他製作人轉送規則,請採用下列格式: projects/PROJECT_ID/regions/RULE_REGION/forwardingRules/RULE_NAME

    服務專案管理員可以指定內部負載平衡器的轉送規則,該規則具有共用虛擬私有雲端網路的 IP 位址。詳情請參閱「共用虛擬私有雲」。

  • PSC_SUBNET_LIST:以半形逗號分隔的清單,列出要用於這項服務附件的一或多個子網路名稱。

    如果您要建立服務附件,並使用來自共用虛擬私有雲網路的 IP 位址設定轉送規則,請使用來自相同共用虛擬私有雲網路的共用子網路。針對每個共用子網路,指定完整資源 URI,例如 --nat-subnets=projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET

  • PROPAGATED_CONNECTION_LIMIT:每個專案的傳播連線限制。預設值為 250

  • DOMAIN_NAME:服務的 DNS 網域名稱,包括結尾的半形句號。建議格式:REGION.p.DOMAIN.

    詳情請參閱「DNS 設定」。

API

serviceAttachments.insert 方法發出 POST 要求。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/ATTACHMENT_REGION/serviceAttachments
{
  "name": "ATTACHMENT_NAME",
  "connectionPreference": "ACCEPT_AUTOMATIC",
  "targetService": "TARGET_SERVICE",
  "enableProxyProtocol": false,
  "natSubnets": [
    "PSC_SUBNET_1_URI",
    "PSC_SUBNET_2_URI"
  ],
  "propagatedConnectionLimit": "PROPAGATED_CONNECTION_LIMIT",
  "domainNames": [
    "DOMAIN_NAME"
  ]
}

更改下列內容:

  • PROJECT_ID:服務附件的專案。

  • ATTACHMENT_REGION:新服務附件的區域。這必須與目標轉送規則的 IP 位址位於相同地區。

  • ATTACHMENT_NAME:要指派給服務附件的名稱。

  • TARGET_SERVICE:與您發布的服務相關聯的轉送規則 URI。

    • 如果是跨區域內部應用程式負載平衡器,請使用下列格式:projects/PROJECT_ID/global/forwardingRules/RULE_NAME
    • 如要使用其他製作人轉送規則,請採用下列格式: projects/PROJECT_ID/regions/RULE_REGION/forwardingRules/RULE_NAME

    服務專案管理員可以指定內部負載平衡器的轉送規則,該規則具有共用虛擬私有雲端網路的 IP 位址。詳情請參閱「共用虛擬私有雲」。

  • PSC_SUBNET_1_URIPSC_SUBNET_2_URI:用於此服務連結的子網路 URI。您可以透過 URI 指定一或多個子網路。

    如果您要建立服務附件,並使用來自共用虛擬私有雲網路的 IP 位址設定轉送規則,請使用來自相同共用虛擬私有雲網路的共用子網路。

  • DOMAIN_NAME:服務的 DNS 網域名稱,包括結尾的半形句號。建議格式:REGION.p.DOMAIN.

    詳情請參閱「DNS 設定」。

  • PROPAGATED_CONNECTION_LIMIT:每個專案的傳播連線限制。預設值為 250

發布需要明確核准的服務

如要明確核准消費者,再允許他們連線至這項服務,請按照這些操作說明發布服務。如要自動核准消費者連線,請參閱「發布具有自動核准功能的服務」。

發布服務時,您會建立服務連結。服務消費者會使用服務連結詳細資料連線至您的服務。

每個服務連結都有消費者接受清單和消費者拒絕清單,用於判斷哪些端點可以連線至服務。服務連結可使用這些清單中的專案或網路,但不能同時使用兩者。系統不支援依資料夾指定消費者。

如果從根據專案接受消費者,改為根據電視網接受消費者,或反過來操作,請按照下列步驟進行:

  • 在單一作業中,取代所有已核准的專案或電視網。
  • 如要提供與先前相同的存取權,請確保新的接受和拒絕清單與先前的清單相同。

如果將專案或網路同時新增至接受清單和拒絕清單,系統會拒絕該專案或網路的連線要求。

如果消費者接受和拒絕清單參照專案,則傳播的連線限制會套用至消費者專案。如果您的消費者接受和拒絕清單參照虛擬私有雲網路,則傳播的連線限制會套用至消費者虛擬私有雲網路。

如要發布使用跨區域內部應用程式負載平衡器 (預先發布版) 的服務,請使用 Google Cloud CLI 或傳送 API 要求。

主控台

  1. 前往 Google Cloud 控制台的「Private Service Connect」頁面。

    前往 Private Service Connect

  2. 按一下「已發布的服務」分頁標籤。

  3. 按一下「發布服務」

  4. 在「目標詳細資料」部分中,選取「負載平衡器」

  5. 選取負載平衡器類型。

  6. 選取負責託管要發布服務的內部負載平衡器。「網路和區域」欄位會填入所選內部負載平衡器的詳細資料。

    服務專案管理員可以選取具有共用虛擬私人雲端網路 IP 位址的內部負載平衡器。詳情請參閱「共用虛擬私有雲」。

  7. 如果系統提示,請選取與要發布的服務相關聯的「轉送規則」

  8. 在「服務名稱」部分,輸入服務連結的名稱。

  9. 為服務選取一或多個 Private Service Connect 子網路。系統會從所選內部負載平衡器的虛擬私有雲網路填入子網路清單,包括透過共用虛擬私有雲與服務專案共用的子網路。

    如果服務連結使用內部負載平衡器,且 IP 位址來自共用虛擬私有雲網路,您必須從相同的共用虛擬私有雲網路選取共用子網路。

    如要新增子網路,可以按照以下步驟操作:

    1. 按一下「保留新的子網路」
    2. 輸入子網路的「名稱」和「說明」 (選填)。
    3. 選取子網路的「區域」
    4. 選取 IP 堆疊類型
    5. 輸入要用於子網路的「IPv4 範圍」,然後按一下「新增」
  10. 如要查看消費者連線資訊,請選取「使用 Proxy 通訊協定」

  11. 如要接受所選專案的連線,請選取「接受所選專案的連線」

    1. 針對要接受連線的每個專案,執行下列操作:
      1. 按一下「新增已接受的專案」,然後輸入下列資訊:
        • 您要接受連線的專案 ID 或專案編號。
        • 連線限制:指定可連線的端點數量上限 (來自指定專案)。
    2. 選用:如要明確拒絕特定專案的連線,請按一下「新增遭拒絕的專案」,然後輸入專案 ID 或專案編號。
  12. 如要接受所選網路的連線,請選取「接受所選網路的連線」

    1. 針對要接受連線的每個網路,執行下列操作:
      1. 按一下「新增接受的網路」,然後輸入下列資訊:
        • 您要接受連線的網路所屬父項專案的專案 ID 或專案編號。
        • 您要接受連線的網路名稱。
        • 連線限制:指定可連線的指定網路端點數量上限。
    2. 選用:如要明確拒絕來自特定網路的連線,請按一下「新增遭拒絕的網路」,然後輸入網路父項專案的 ID 或專案編號,以及網路名稱。
  13. 如要停用連線協調功能,請取消勾選「啟用連線協調功能」核取方塊。

  14. 選用:按一下「進階設定」,然後執行下列操作:

    1. 如要設定網域名稱,請輸入網域名稱,包括結尾的半形句號。

      建議的網域名稱格式為 REGION.p.DOMAIN.

      您必須擁有網域名稱,詳情請參閱「DNS 設定」。

    2. 輸入 NCC 傳播連線數量限制。如未指定,預設值為 250

  15. 按一下「新增服務」

gcloud

使用 gcloud compute service-attachments create 指令

gcloud compute service-attachments create ATTACHMENT_NAME \
    --region=ATTACHMENT_REGION \
    --target-service=TARGET_SERVICE \
    --connection-preference=ACCEPT_MANUAL \
    --consumer-accept-list=ACCEPTED_PROJECT_OR_NETWORK_1=LIMIT_1,ACCEPTED_PROJECT_OR_NETWORK_2=LIMIT_2 \
    --consumer-reject-list=REJECTED_PROJECT_OR_NETWORK_1,REJECTED_PROJECT_OR_NETWORK_2 \
    --nat-subnets=PSC_SUBNET_LIST \
    [ --propagated-connection-limit=PROPAGATED_CONNECTION_LIMIT ] \
    [ --enable-proxy-protocol ] \
    [ --domain-names=DOMAIN_NAME ] \
    [ --reconcile-connections ]

更改下列內容:

  • ATTACHMENT_NAME:要指派給服務附件的名稱。

  • ATTACHMENT_REGION:新服務附件的區域。這必須與目標轉送規則的 IP 位址位於相同地區。

  • TARGET_SERVICE:與您發布的服務相關聯的轉送規則 URI。

    • 如果是跨區域內部應用程式負載平衡器,請使用下列格式:projects/PROJECT_ID/global/forwardingRules/RULE_NAME
    • 如要使用其他製作人轉送規則,請採用下列格式: projects/PROJECT_ID/regions/RULE_REGION/forwardingRules/RULE_NAME

    服務專案管理員可以指定內部負載平衡器的轉送規則,該規則具有共用虛擬私有雲端網路的 IP 位址。詳情請參閱「共用虛擬私有雲」。

  • ACCEPTED_PROJECT_OR_NETWORK_1ACCEPTED_PROJECT_OR_NETWORK_2:要接受的專案 ID、專案名稱或網路 URI。--consumer-accept-list 為選用項目,可包含一或多個專案或聯播網,但不能同時包含這兩種項目。

  • LIMIT_1LIMIT_2:專案或網路的連線限制。連線限制是指可連線至這項服務的消費者端點或後端數量。每個已接受的專案或網路都必須設定連線限制。

  • REJECTED_PROJECT_OR_NETWORK_1REJECTED_PROJECT_OR_NETWORK_2:要拒絕的專案 ID、專案名稱或網路 URI。--consumer-reject-list 為選用項目,可包含一或多個專案或網路,但不能同時包含這兩種項目。

  • PSC_SUBNET_LIST:以半形逗號分隔的清單,列出要用於這項服務附件的一或多個子網路名稱。

    如果您要建立服務附件,並使用來自共用虛擬私有雲網路的 IP 位址設定轉送規則,請使用來自相同共用虛擬私有雲網路的共用子網路。針對每個共用子網路,指定完整資源 URI,例如 --nat-subnets=projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET

  • PROPAGATED_CONNECTION_LIMIT傳播連線限制。預設值為 250

  • DOMAIN_NAME:服務的 DNS 網域名稱,包括結尾的半形句號。建議格式:REGION.p.DOMAIN.

    詳情請參閱「DNS 設定」。

API

serviceAttachments.insert 方法發出 POST 要求

  • 如要發布服務並根據專案明確核准消費者,請傳送下列要求:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/ATTACHMENT_REGION/serviceAttachments
    {
      "name": "ATTACHMENT_NAME",
      "region": "ATTACHMENT_REGION",
      "connectionPreference": "ACCEPT_MANUAL",
      "targetService": "TARGET_SERVICE",
      "enableProxyProtocol": false,
      "natSubnets": [
        "PSC_SUBNET_1_URI",
        "PSC_SUBNET_2_URI"
      ],
      "consumerRejectLists": [
        "REJECTED_PROJECT_1",
        "REJECTED_PROJECT_2"
      ],
      "consumerAcceptLists": [
        {
          "projectIdOrNum": "ACCEPTED_PROJECT_1",
          "connectionLimit": "LIMIT_1"
        },
        {
          "projectIdOrNum": "ACCEPTED_PROJECT_2",
          "connectionLimit": "LIMIT_2"
        }
      ],
      "propagatedConnectionLimit": "PROPAGATED_CONNECTION_LIMIT",
      "domainNames": [
        "DOMAIN_NAME"
      ]
    }
    

    更改下列內容:

    • PROJECT_ID:服務附件的專案。

    • ATTACHMENT_REGION:新服務附件的區域。這必須與目標轉送規則的 IP 位址位於相同地區。

    • ATTACHMENT_NAME:要指派給服務附件的名稱。

    • TARGET_SERVICE:與您發布的服務相關聯的轉送規則 URI。

      • 如果是跨區域內部應用程式負載平衡器,請使用下列格式:projects/PROJECT_ID/global/forwardingRules/RULE_NAME
      • 如要使用其他製作人轉送規則,請採用下列格式: projects/PROJECT_ID/regions/RULE_REGION/forwardingRules/RULE_NAME

      服務專案管理員可以指定內部負載平衡器的轉送規則,該規則具有共用虛擬私有雲端網路的 IP 位址。詳情請參閱「共用虛擬私有雲」。

    • PSC_SUBNET_1_URIPSC_SUBNET_2_URI:用於此服務連結的子網路 URI。您可以透過 URI 指定一或多個子網路。

      如果您要建立服務附件,並使用來自共用虛擬私有雲網路的 IP 位址設定轉送規則,請使用來自相同共用虛擬私有雲網路的共用子網路。

    • REJECTED_PROJECT_1REJECTED_PROJECT_2:要拒絕的專案 ID 或編號。consumerRejectLists 為選用項目,可包含一或多個專案。

    • ACCEPTED_PROJECT_1ACCEPTED_PROJECT_2:要接受的專案 ID 或編號。consumerAcceptLists 為選用項目,可包含一或多個專案。

    • LIMIT_1LIMIT_2:專案的連線限制。連線限制是指可連線至這項服務的消費者端點或後端數量。每個接受的專案都必須設定連線數上限。

    • DOMAIN_NAME:服務的 DNS 網域名稱,包括結尾的半形句號。建議格式:REGION.p.DOMAIN. 詳情請參閱DNS 設定
  • 如要發布服務並根據虛擬私有雲網路明確核准消費者,請傳送下列要求:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/ATTACHMENT_REGION/serviceAttachments
    {
      "name": "ATTACHMENT_NAME",
      "region": "ATTACHMENT_REGION",
      "connectionPreference": "ACCEPT_MANUAL",
      "targetService": "TARGET_SERVICE",
      "enableProxyProtocol": false,
      "natSubnets": [
        "PSC_SUBNET_1_URI",
        "PSC_SUBNET_2_URI"
      ],
      "consumerRejectLists": [
        "projects/REJECTED_PROJECT_ID_1/global/networks/REJECTED_NETWORK_1",
        "projects/REJECTED_PROJECT_ID_2/global/networks/REJECTED_NETWORK_2"
      ],
      "consumerAcceptLists": [
        {
          "networkUrl": "projects/ACCEPTED_PROJECT_ID_1/global/networks/ACCEPTED_NETWORK_1",
          "connectionLimit": "LIMIT_1"
        },
        {
          "networkUrl": "projects/ACCEPTED_PROJECT_ID_2/global/networks/ACCEPTED_NETWORK_2",
          "connectionLimit": "LIMIT_2"
        }
      ],
      "propagatedConnectionLimit": PROPAGATED_CONNECTION_LIMIT,
      "domainNames": [
        "DOMAIN_NAME"
      ]
    }
    

    更改下列內容:

    • REJECTED_PROJECT_ID_1REJECTED_PROJECT_ID_2:要拒絕的網路的父項專案 ID。consumerRejectLists 為選用項目,可包含一或多個聯播網。
    • REJECTED_NETWORK_1REJECTED_NETWORK_2:要拒絕的網路名稱。
    • ACCEPTED_PROJECT_ID_1ACCEPTED_PROJECT_ID_2:您要接受的網路的父項專案 ID。consumerAcceptLists 為選用項目,且可包含一或多個聯播網。
    • ACCEPTED_NETWORK_1ACCEPTED_NETWORK_2:您要接受的網路名稱。
    • LIMIT_1LIMIT_2:網路的連線限制。連線限制是指可連線至這項服務的消費者端點或後端數量。每個接受的專案都必須設定連線數上限。
    • DOMAIN_NAME:服務的 DNS 網域名稱,包括結尾的半形句號。建議格式:REGION.p.DOMAIN. 詳情請參閱DNS 設定
  • 如要發布已啟用連結對帳功能的服務,請傳送與先前要求類似的要求,但須包含下列欄位:

    {
      ...
      "reconcileConnections": true
      ...
    }
    

查看消費者連線資訊

如要瞭解如何使用 PROXY 通訊協定查看消費者連線資訊,請參閱「查看消費者連線資訊」。

管理已發布服務的存取要求

如果您發布的服務需要明確核准,可以接受或拒絕來自用戶端專案或網路的連線要求。詳情請參閱「管理已發布服務的存取要求」。

您也可以切換已發布服務的專案接受方式 (自動或明確)。詳情請參閱「變更已發布服務的連線偏好設定」。

在已發布的服務中新增或移除子網路

您可以從已發布的服務新增或移除子網路。詳情請參閱「從已發布的服務新增或移除子網路」。

列出已發布的服務

您可以列出所有服務。

控制台

  1. 前往 Google Cloud 控制台的「Private Service Connect」頁面。

    前往 Private Service Connect

  2. 按一下「已發布的服務」分頁標籤。

    系統會顯示 Private Service Connect 服務連結。

gcloud

使用 gcloud compute service-attachments list 指令

gcloud compute service-attachments list [--regions=REGION_LIST]

REGION_LIST 替換為以半形逗號分隔的一或多個區域清單,您要查看這些區域的服務附件。例如 us-central1us-west1,us-central1

API

如要查看特定或所有地區的所有服務附件,請對 serviceAttachments.list 方法傳送 GET 要求。

  • 查看區域中的所有服務附件:

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/serviceAttachments
    
  • 查看所有區域中的所有服務附件:

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/aggregated/serviceAttachments
    

    更改下列內容:

    • PROJECT_ID:服務附件的專案。

    • REGION:服務連結的區域。

    • ATTACHMENT_NAME:服務連結的名稱。

查看已發布服務的詳細資料

您可以查看已發布服務的設定詳細資料。 您可以在 Google Cloud 控制台中查看部分設定詳細資料,例如服務消費者連線至服務時所需的服務附件 URI。如要查看所有詳細資料,包括服務附件消費者的 pscConnectionId 值,請使用 Google Cloud CLI 或 API。

主控台

您可以查看已發布服務的詳細資料。「服務連結」欄位含有服務連結 URI。

  1. 前往 Google Cloud 控制台的「Private Service Connect」頁面。

    前往 Private Service Connect

  2. 按一下「已發布的服務」分頁標籤。

  3. 按一下要查看的服務。

gcloud

如要查看已發布服務的詳細資料,請使用 gcloud compute service-attachments describe 指令selfLink 欄位包含服務連結 URI。

gcloud compute service-attachments describe \
    ATTACHMENT_NAME --region=REGION

API

如要查看已發布服務的詳細資料,請將 GET 要求傳送至 serviceAttachments.get 方法selfLink 欄位包含服務連結 URI。

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/serviceAttachments/ATTACHMENT_NAME

更改下列內容:

  • PROJECT_ID:服務附件的專案。

  • REGION:服務連結的區域。

  • ATTACHMENT_NAME:服務連結的名稱。

刪除已發布的服務

即使服務連結有用戶連線,您也可以刪除已發布的服務。刪除發布的服務只會移除服務附件,相關聯的負載平衡器不會遭到刪除。刪除已發布的服務後,會發生下列情況:

主控台

  1. 前往 Google Cloud 控制台的「Private Service Connect」頁面。

    前往 Private Service Connect

  2. 按一下「已發布的服務」分頁標籤。

  3. 按一下要刪除的服務。

  4. 點選「刪除」。

gcloud

使用 gcloud compute service-attachments delete 指令

gcloud compute service-attachments delete \
    ATTACHMENT_NAME --region=REGION

API

serviceAttachments.delete 方法發出 DELETE 要求

DELETE https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/serviceAttachments/ATTACHMENT_NAME

更改下列內容:

  • PROJECT_ID:服務附件的專案。

  • REGION:服務連結的區域。

  • ATTACHMENT_NAME:服務連結的名稱。

已知問題

全域存取權的健康狀態檢查失敗

如果您使用內部直通式網路負載平衡器或內部通訊協定轉送 (目標執行個體) 發布服務,且服務是由使用全域存取權的端點存取,請務必在服務附件的負載平衡器上啟用全域存取權。否則健康狀態檢查可能無法正常運作,且不健康的後端可能會收到流量。

升級 Terraform 適用的 Google 供應商後,連線中斷

如果您使用 Terraform 的 Google 供應程式 (版本低於 4.76.0) 建立服務附件,請勿升級至 4.76.0 至 4.81.x 版。升級至 4.76.0 到 4.81.x 版後,執行 terraform apply 時,Terraform 可能會意外刪除並重新建立服務連結,以及關閉現有的 Private Service Connect 連線。重新建立的服務附件不會自動重新建立 Private Service Connect 連線。

如果您升級至 4.82.0 版,然後執行 terraform apply,服務附件不會遭到刪除,但 reconcile connections 設定會設為 true。如果先前設定為 false,部分 Private Service Connect 連線可能會關閉。

  • 升級至 Google 供應商 4.76.0 至 4.81.x 版。在這個情境中,terraform plan 的輸出內容包括:

    -/+ resource "google_compute_service_attachment" "SERVICE_NAME" {
      ...
            ~ reconcile_connections = false -> true # forces replacement
      ...
    

    請使用解決方法來避免這個問題。

  • 升級至 Google 供應商 4.82.0 版。在這個情境中,terraform plan 的輸出內容包括:

    ~ reconcile_connections = false -> true
    

    如果忽略這則警告並套用變更,Terraform 會更新服務附件,開啟連線協調功能。視連線狀態而定,從 false 變更為 true 可能會關閉部分現有連線。詳情請參閱「連結對帳」。

    請使用解決方法來避免這個問題。

解決方法

建議您將 Terraform 適用的 Google 供應程式升級至 4.82.0 以上版本。 這個版本可避免服務附件遭到意外刪除和重新建立。

如果無法立即升級,或是可以升級但不想讓 Terraform 變更連線對帳設定,請更新 Terraform 設定,明確設定連線對帳設定。

  1. 查看服務附件的詳細設定,並記下 reconcileConnections 設定。

    gcloud compute service-attachments describe SERVICE_NAME --region=REGION
    

    輸出內容包含 reconcileConnections 欄位,值可能為 true 或 false。

    reconcileConnections: false
    
  2. 更新 Terraform 設定檔,明確使用與服務附件相同的設定。

    resource "google_compute_service_attachment" "SERVICE_NAME" {
      ...
      reconcile_connections    = false
    }
    

    如需設定範例,請參閱 GitHub 上的「Service Attachment Reconcile Connections」。

使用 Proxy 通訊協定時發生 TLS 錯誤

如果您發布的服務已啟用 PROXY 通訊協定,但目標服務類型不支援 PROXY 通訊協定,消費者可以透過端點連線至您的服務。不過,流量不會透過連線傳輸,且工作負載會收到與 TLS 相關的錯誤。

如要解決這個問題,請更新服務附件,停用 PROXY 協定。

如要瞭解支援 PROXY 通訊協定的目標服務類型,請參閱「功能和相容性」。

疑難排解

更新服務附件時發生錯誤

更新服務附件時,如果看到下列錯誤訊息,表示接受清單或拒絕清單可能包含已刪除的專案:The resource PROJECT was not found

從服務附件設定中移除已刪除的專案,即可解決問題。

  1. 使用 gcloud compute service-attachments describe 指令顯示要修改的服務附件設定。

    • 如要以稍後可用於更新服務附件的格式輸出接受清單,請執行下列操作:

      gcloud compute service-attachments describe ATTACHMENT_NAME \
          --region=REGION --flatten="consumerAcceptLists[]" \
          --format="csv[no-heading,separator='='](consumerAcceptLists.projectIdOrNum,consumerAcceptLists.connectionLimit)" \
          | xargs | sed -e 's/ /,/g'
      

      接受清單輸出內容類似如下:

      PROJECT_1=LIMIT_1,PROJECT_2=LIMIT_2,PROJECT_3=LIMIT_3
      
    • 如要以日後可用於更新服務附件的格式輸出拒絕清單,請執行下列操作:

      gcloud compute service-attachments describe ATTACHMENT_NAME \
          --region=REGION \
          --format="value[delimiter=','](consumerRejectLists[])"
      

      拒絕清單輸出內容如下:

      PROJECT_1,PROJECT_2,PROJECT_3
      
  2. 編輯指令輸出內容,從接受清單和拒絕清單中移除所有已刪除的專案。

  3. 更新服務附件,移除已刪除的專案。

    • 如要更新接受清單,請按照下列步驟操作:

      gcloud compute service-attachments update ATTACHMENT_NAME \
          --region=REGION \
          --consumer-accept-list=UPDATED_ACCEPT_LIST
      
    • 如要更新拒絕名單,請按照下列步驟操作:

      gcloud compute service-attachments update ATTACHMENT_NAME \
          --region=REGION \
          --consumer-reject-list=UPDATED_REJECT_LIST
      

尚未建立連線

如果消費者已建立參照服務連結的端點或後端,但連線尚未建立,請檢查服務連結的連線狀態。連線狀態可能會顯示解決問題的步驟。

消費者連線逾時

如果消費者連線逾時,請檢查您的服務是否需要長時間執行的連線。Private Service Connect NAT 的 TCP 已建立連線閒置逾時為 20 分鐘。如果服務需要較長的逾時時間,您可能需要進行一些設定變更,確保連線不會逾時。詳情請參閱「NAT 規格」。

傳播連線錯誤

如要瞭解如何排解傳播連線問題,請參閱「排解 Private Service Connect 連線傳播錯誤」。

已發布的服務發生效能問題或連線逾時

如果已發布的服務發生效能問題或連線逾時,可能是因為封包遭到捨棄。您可以查看下列章節所述的指標,調查封包遺失情形。

消費者捨棄的封包

private_service_connect/producer/dropped_received_packets_count 指標會追蹤從端點或後端到已發布服務的封包,這些封包因端點或後端超出服務的連線數上限而遭到捨棄。

如果已發布的服務回報這項指標的值,請考慮下列解決方案:

  • 提高已發布服務的容量,例如新增更多虛擬機器 (VM) 執行個體或網路端點。
  • 請服務消費者建立其他端點或後端,連線至已發布的服務。
  • 請服務消費者透過端點或後端減少連線數量。

傳送給消費者的封包遭捨棄

private_service_connect/producer/dropped_sent_packets_count 指標會追蹤從已發布服務傳送至端點或後端的封包,這些封包因 Private Service Connect 找不到相符的回應封包連線而遭到捨棄。

Private Service Connect 只允許從消費者虛擬私有雲網路發起的連線。當消費者啟動連線時,系統會追蹤連線,以便將已發布服務的回應封包與現有連線配對。如果 Private Service Connect 找不到相符的回應封包,就會捨棄該封包。

如果已發布的服務在連線逾時後傳送回應封包,就可能發生這種情況。如要瞭解如何避免連線逾時問題,請參閱 NAT 規格