使用 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」或雙重堆疊子網路,並具備內部 IPv6 位址範圍
  • 如果您使用雙重堆疊子網路,系統會使用 IPv4 或 IPv6 位址範圍,但不會同時使用兩者。

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

控制台

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

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

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

  3. 點選「子網路」

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

    1. 提供名稱。
    2. 請選取區域。
    3. 在「Purpose」(用途) 部分,選取「Private Service Connect」(私人服務連線)
    4. 在「IP stack type」(IP 堆疊類型) 區段中,選取 IP 堆疊類型。
    5. 如果您要建立僅支援 IPv4 或雙重堆疊的子網路,請輸入 IPv4 位址範圍,例如 10.10.10.0/24
    6. 如要建立僅支援 IPv6 或雙重堆疊的子網路,請按一下「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
    
  • 如要建立僅支援 IPv6 的 Private Service Connect 子網路,請按照下列步驟操作:

    gcloud compute networks subnets create SUBNET_NAME \
        --network=NETWORK_NAME \
        --region=REGION \
        --stack-type=IPV6_ONLY \
        --ipv6-access-type=INTERNAL \
        --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"
    }
    
  • 如要建立僅支援 IPv6 的 Private Service Connect 子網路,請按照下列步驟操作:

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

更改下列內容:

  • PROJECT_ID:子網路的專案。

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

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

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

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

設定防火牆規則

網路設定必須允許來自適當來源 IP 位址範圍的流量,傳送至設定為後端服務後端的執行個體或網路端點。如果服務使用健康狀態檢查,您也必須允許健康狀態檢查探測傳送流量至後端。

您不必採取任何步驟,即可允許 Private Service Connect 端點或 Private Service Connect 後端與相關聯服務連結之間的流量,或是服務連結與相關聯負載平衡器之間的流量。端點、後端和服務附件是不會參與流量流動的邏輯元件

如果後端位於虛擬私有雲網路中,可以使用虛擬私有雲輸入防火牆規則或防火牆政策,允許這類流量。如果是地端部署後端或其他雲端後端,請設定該環境,允許流量傳送至後端。

為後端服務設定連入防火牆規則時,流量來源取決於服務使用的負載平衡器類型:

類別 後端的流量來源
直通式負載平衡器:
  • 內部直通式網路負載平衡器
  • 內部通訊協定轉送
  • 通訊埠對應服務
與服務相關聯的 Private Service Connect (NAT) 子網路 IP 位址範圍
Proxy 負載平衡器:
  • 跨區域內部應用程式負載平衡器
  • 區域性內部應用程式負載平衡器
  • 區域性內部 Proxy 網路負載平衡器
  • Secure Web Proxy
相關聯的 Proxy 專用子網路的 IP 位址範圍
提供健康檢查的服務 負載平衡器類型的探測 IP 位址範圍

發布服務

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

在服務負載平衡器所在的相同區域中,建立服務附件。

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

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

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

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

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

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

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

控制台

設定服務

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

    前往 Private Service Connect

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

  3. 按一下「發布服務」

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

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

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

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

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

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

選取 Private Service Connect 子網路

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

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

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

  1. 依序點選「子網路」和「保留新的子網路」
  2. 輸入子網路的名稱和說明 (選填)。
  3. 選取子網路的區域。
  4. 選取 IP 堆疊類型。
  5. 如果您要建立僅支援 IPv4 或雙重堆疊的子網路,請輸入要用於子網路的 IPv4 位址範圍。
  6. 按一下「新增」。

完成設定

  1. 如要查看消費者連線資訊,請選取「使用 Proxy 通訊協定」
  2. 選取「自動接受所有連線」
  3. 如要停用連線協調功能,請取消勾選「啟用連線協調功能」核取方塊。
  4. 選用:按一下「進階設定」,然後執行下列操作:

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

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

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

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

  5. 按一下「新增服務」

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

發布需要明確核准的服務

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

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

每個服務連結都有消費者接受清單和消費者拒絕清單。消費者清單會決定哪些端點可以連線至服務。服務附件可根據下列其中一種類型接受或拒絕消費者:

  • 專案
  • 虛擬私有雲網路
  • Private Service Connect 端點 (預先發布版)

消費者清單中的每個項目必須是相同類型。舉例來說,特定服務附件無法根據專案接受部分消費者,也無法根據虛擬私有雲網路接受部分消費者。此外,系統不支援依資料夾指定消費者。

如果同時將值加入接受清單和拒絕清單,系統會拒絕該消費者的連線要求。

如要根據個別 Private Service Connect 端點接受使用者,請發布需要明確核准的服務,但不要在消費者清單中新增任何值。消費者連線至服務連結後,您可以說明服務連結,或請消費者說明端點,找出端點的 ID 型 URI。如要接受連線,請將 Private Service Connect 端點的 ID 型 URI 新增至服務的消費者接受清單

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

控制台

設定服務

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

    前往 Private Service Connect

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

  3. 按一下「發布服務」

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

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

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

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

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

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

選取 Private Service Connect 子網路

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

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

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

  1. 依序點選「子網路」和「保留新的子網路」
  2. 輸入子網路的名稱和說明 (選填)。
  3. 選取子網路的區域。
  4. 選取 IP 堆疊類型。
  5. 如果您要建立僅支援 IPv4 或雙重堆疊的子網路,請輸入要用於子網路的 IPv4 位址範圍。
  6. 按一下「新增」。

設定消費者存取權

  1. 如要查看消費者連線資訊,請選取「使用 Proxy 通訊協定」
  2. 如要設定消費者接受/拒絕清單,請執行下列任一操作。

    • 如要接受所選專案的連線,請選取「接受所選專案的連線」,然後:

      1. 針對要接受連線的每個專案,按一下「新增接受的專案」,然後輸入下列資訊:

        • 您要接受連線的專案 ID 或專案編號。
        • 連線限制:指定可連線的端點數量上限 (來自指定專案)。
      2. 選用:如要明確拒絕來自特定專案的連線,請按一下「新增遭拒絕的專案」,然後輸入專案 ID 或專案編號。

    • 如要接受所選網路的連線,請選取「接受所選網路的連線」,然後:

      1. 針對要接受連線的每個虛擬私有雲網路,按一下「新增已接受的網路」,然後輸入下列資訊:

        • 您要接受連線的網路所屬父項專案的專案 ID 或專案編號。
        • 您要接受連線的網路名稱。
        • 連線限制,用於指定可連線的端點數量上限。
      2. 選用:如要明確拒絕來自特定網路的連線,請按一下「新增遭拒絕的網路」,然後輸入網路父項專案的 ID 或專案編號,以及網路名稱。

    • 如要接受個別 Private Service Connect 端點的連線,請選取「接受所選專案的連線」。目前請勿在消費者接受清單中新增任何值。消費者要求連線至您的服務後,您可以將端點新增至消費者接受清單

完成設定

  1. 選用:如要停用連線協調功能,請取消勾選「啟用連線協調功能」核取方塊。
  2. 選用:按一下「進階設定」,然後執行下列操作:

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

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

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

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

  3. 按一下「新增服務」

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 和以 ID 為準的端點 URI (endpointWithId) 值,請使用 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
    

    更改下列內容:

    • ATTACHMENT_NAME:服務附件的名稱。

    • REGION:服務連結的區域。

  • 如要查看已發布服務的詳細資料,包括可用於接受個別端點的 ID 型端點 URI,請使用 gcloud beta compute service-attachments describe 指令。 在已連線端點清單中,每個端點的 endpointWithId 欄位都包含以 ID 為準的 URI。

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

API

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

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

    更改下列內容:

    • PROJECT_ID:服務附件的專案。

    • REGION:服務連結的區域。

    • ATTACHMENT_NAME:服務連結的名稱。

  • 如要查看已發布服務的詳細資料,包括可用於接受個別端點的 ID 型端點 URI,請將 GET 要求傳送至 serviceAttachments.get 方法的 Beta 版。在已連線端點清單中,每個端點的 endpointWithId 欄位都包含以 ID 為基礎的 URI。

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

刪除已發布的服務

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

控制台

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

    前往 Private Service Connect

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

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

  4. 按一下「Delete」(刪除)

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:服務連結的名稱。

已知問題

健康狀態檢查失敗 (全域存取消費者端點)

如果發布的服務未設定全域存取權,消費者可以將全域存取權端點連線至該服務。不過,健康狀態檢查在這項設定中無法正常運作。因此,流量可能會傳送至健康狀態不良的後端並遭到捨棄。

如果您使用內部直通式網路負載平衡器或內部通訊協定轉送 (目標執行個體) 發布服務,且服務受到這個問題影響,請按照下列步驟操作。

  • 如要使用全域存取權,請按照下列步驟操作:
    1. 為負載平衡器的轉送規則啟用全域存取權
    2. 如果負載平衡器是由 Google Kubernetes Engine 管理,您也必須更新對應的 Service 資訊清單,並套用至叢集。如要進一步瞭解這項 GKE 專屬設定,請參閱「全域存取權」。
    3. 更新所有自動化程序,以便為支援全域存取 Private Service Connect 端點的新生產端負載平衡器設定全域存取權。
  • 如果不想使用全域存取權,請要求消費者停用端點的全域存取權

為已發布的服務啟用全域存取權時,網路流量不會中斷。

全域存取 Private Service Connect NEG 的健康狀態檢查失敗

如果為全域存取權設定消費者 Private Service Connect NEG,就會發生已知問題。如果 Private Service Connect NEG 與全域後端服務建立關聯,系統會將其設定為全域存取。

如果消費者將設定為全域存取權的 Private Service Connect NEG 連線至生產端負載平衡器,而服務生產端停用該負載平衡器的全域存取權,健康狀態檢查就無法正常運作。因此,流量可能會傳送至健康狀態不良的後端,並遭到捨棄。

如果您使用支援全域存取的內部負載平衡器發布服務,且服務受到這個問題影響,請按照下列步驟操作。

  • 如要使用全域存取權,請按照下列步驟操作:
    1. 為負載平衡器的轉送規則啟用全域存取權
    2. 如果負載平衡器是由 Google Kubernetes Engine 管理,您也必須更新對應的 Service 資訊清單,並套用至叢集。如要進一步瞭解這項 GKE 專屬設定,請參閱「全域存取權」。
    3. 更新所有自動化程序,以便為支援全域存取 Private Service Connect NEG 的新生產端負載平衡器設定全域存取權。
  • 如不想使用全域存取權,請要求消費者重新設定 Private Service Connect NEG,以取得區域存取權。如要這麼做,消費者必須從全域後端服務移除 Private Service Connect NEG,然後將 NEG 連結至區域後端服務

為已發布的服務啟用全域存取權,不會中斷網路流量。

升級 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 規格