使用 Private Service Connect 發布服務
服務供應者可以使用 Private Service Connect,透過虛擬私有雲網路中的內部 IP 位址發布服務。服務消費者可使用用戶虛擬私有雲網路中的內部 IP 位址存取已發布的服務。
本指南說明如何使用 Private Service Connect 發布服務。如要發布服務,請按照下列步驟操作:
- 建立目標服務,可以是下列任一項:
- 支援的負載平衡器轉送規則,其中包含支援的設定
- Secure Web Proxy 執行個體
- 建立指向目標服務的服務附件。
Private Service Connect 提供兩種連結已發布服務的方法:
這些端點類型需要略為不同的產生者設定。詳情請參閱「功能和相容性」。
角色
下列 IAM 角色提供執行本指南中任務所需的權限。
- Compute 網路管理員 (
roles/compute.networkAdmin
)
事前準備
如要瞭解發布服務的相關資訊 (包括限制),請參閱「關於發布服務」。
決定服務是否應由所有專案存取,或是您想控管哪些專案可以存取服務。
決定這項服務是否要支援端點、後端,或兩者皆是。如要進一步瞭解端點和後端,請參閱「 Private Service Connect 類型」。
如要進一步瞭解服務設定需求,請參閱「功能與相容性」。
決定是否要為服務設定網域名稱,這會為服務消費者端點自動設定 DNS。如果您設定網域名稱,則發布服務的 IAM 主體必須驗證他們在 Google Search Console 中擁有該網域的擁有者權限。如果您設定網域名稱,但不是網域擁有者,則無法發布服務。如要驗證擁有權,請前往 Google Search Console。
您在服務連結中指定的網域名稱可以是已驗證網域的子網域。舉例來說,您可以驗證
example.com
,然後建立服務附件,其中的網域名稱為us-west1.p.example.com
。
建立目標服務
如要代管服務,請在服務生產端 VPC 網路中建立下列任一目標服務:
如要瞭解每項目標服務支援的設定,請參閱「功能和相容性」。
您可以將每個服務附件與單一目標服務建立關聯。您無法將多個服務附件與相同的目標服務建立關聯。
目標服務的 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 位址,請參閱在已發布服務中新增或移除子網路。
主控台
在 Google Cloud 控制台中,前往「VPC Networks」(虛擬私有雲網路) 頁面。
按一下虛擬私有雲網路的名稱,顯示其「VPC network details」(虛擬私有雲網路詳細資料) 頁面。
點選「子網路」。
按一下 [Add subnet] (新增子網路)。在隨即顯示的面板中,執行下列操作:
- 提供「Name」(名稱)。
- 選擇一個 [Region] (地區)。
- 在「用途」部分中,選取「Private Service Connect」。
- 選取IP 堆疊類型。
- 輸入 IPv4 範圍。例如:
10.10.10.0/24
。 - 如果您要建立雙重堆疊子網路,請將 IPv6 存取類型設為 內部。
- 按一下「新增」。
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
:新子網路的 VPC 名稱。REGION
:新子網路的地區。此地區必須與您要發布的服務位於相同區域。SUBNET_RANGE
:用於子網路的 IPv4 位址範圍,例如10.10.10.0/24
。
API
將 POST
要求傳送至 subnetworks.insert
方法。
如要建立僅支援 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 規則會允許這類流量,除非有優先順序較高的規則會封鎖這類流量。 |
後端 (以全域外部應用程式負載平衡器為基礎) |
|
全域外部應用程式負載平衡器是由 Google Front End (GFE) 導入,並使用這些 IP 位址範圍。 |
如果防火牆設定尚未允許適當的端點類型流量,請設定防火牆規則允許這類流量。
您可以使用下列設定範例建立 VPC 防火牆規則,允許來自用戶端 IP 位址範圍的流量,傳送至生產者服務負載平衡器中的後端 VM。這項設定假設後端 VM 已使用網路標記進行設定。
輸入規則範例:
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
。
如要進一步瞭解如何設定 VPC 防火牆規則,請參閱「VPC 防火牆規則」。如要設定階層式防火牆規則來允許這類流量,請參閱「階層式防火牆政策」。
發布服務
如要發布服務,您必須建立服務連結。您可以透過下列任一方式提供這項服務:
- 您可以發布具有自動核准功能的服務。
- 您可以發布需要明確核准的服務。
在服務的負載平衡器所在的地區建立服務附件。
每個服務連結都可以指向一或多個 Private Service Connect 子網路,但 Private Service Connect 子網路無法用於多個服務連結。
本節將說明如何發布以負載平衡器為基礎的服務。如要瞭解如何建立參照 Secure Web Proxy 執行個體的服務連結,請參閱「將 Secure Web Proxy 部署為 Private Service Connect 服務連結」。
發布具有自動核准功能的服務
請按照這些操作說明發布服務,並自動讓任何使用者連線至這項服務。如要明確核准消費者連線,請參閱「發布具有明確核准功能的服務」。
發布服務時,您會建立服務連結。服務使用者會使用服務附件詳細資料連結至您的服務。
如要查看消費者連線資訊,您可以在支援的服務上啟用 Proxy 通訊協定。如要瞭解支援的服務,請參閱「功能與相容性」。如要進一步瞭解 Proxy 通訊協定,請參閱「消費者連線資訊」。
當您發布自動核准的服務時,傳播連線限制會套用至連線至服務附件的每個消費者專案。
如要發布使用跨區域內部應用程式負載平衡器 (前測) 的服務,請使用 Google Cloud CLI 或傳送 API 要求。
主控台
前往 Google Cloud 控制台的「Private Service Connect」頁面。
按一下「已發布的服務」分頁標籤。
按一下「發布服務」。
在「目標詳細資料」部分中,選取「負載平衡器」。
選取負載平衡器類型。
選取負責託管要發布的服務的內部負載平衡器。「網路和區域」欄位會填入所選內部負載平衡器的詳細資料。
服務專案管理員可以選取具有共用虛擬私人雲端網路 IP 位址的內部負載平衡器。詳情請參閱「共用虛擬私有雲」。
畫面出現提示時,請選取與要發布的服務相關的「轉送規則」。
在「服務名稱」部分,輸入服務連結的名稱。
為服務選取一或多個 Private Service Connect 子網路。清單會填入所選內部負載平衡器 VPC 網路中的子網路,包括透過共用虛擬私有雲與服務專案共用的子網路。
如果服務連結使用內部負載平衡器,且該負載平衡器的 IP 位址來自共用虛擬私有雲網路,則您必須從相同的共用虛擬私有雲網路中選取共用子網路。
如要新增子網路,可以按照以下步驟操作:
- 按一下「保留新的子網路」。
- 輸入子網路的「名稱」和「說明」 (選填)。
- 選取子網路的「區域」。
- 選取IP 堆疊類型。
- 輸入要用於子網路的「IPv4 範圍」,然後按一下「新增」。
如要查看消費者連線資訊,請選取「使用 Proxy 通訊協定」。
選取「自動接受所有連線」。
如要停用連線協調功能,請取消勾選「Enable connection reconciliation」核取方塊。
選用步驟:按一下「進階設定」,然後執行下列操作:
如要設定網域名稱,請輸入「網域名稱」,包括結尾的半形句號。
建議的網域名稱格式為
REGION.p.DOMAIN.
您必須擁有網域名稱,詳情請參閱「DNS 設定」一文。
輸入 NCC 傳播連線限制。如未指定,則預設值為
250
。
按一下「新增服務」。
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
將 POST
要求傳送至 serviceAttachments.insert
方法。
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_URI
和PSC_SUBNET_2_URI
:這項服務附件的子網路 URI。您可以使用 URI 指定一個或多個子網路。如果您要建立服務附件,且轉送規則含有共用虛擬私有雲網路的 IP 位址,請使用同一個共用虛擬私有雲網路的共用子網路。
DOMAIN_NAME
:服務的 DNS 網域名稱,包括結尾的半形句號。建議格式:REGION.p.DOMAIN.
詳情請參閱「DNS 設定」。
PROPAGATED_CONNECTION_LIMIT
:每個專案的傳播連線限制。預設值為250
。
發布經過明確核准的服務
如果您想明確核准使用者,才能連線至這項服務,請按照這些操作說明發布服務。如要自動核准消費者連線,請參閱「發布具有自動核准功能的服務」。
發布服務時,您會建立服務連結。服務使用者會使用服務附件詳細資料連結至您的服務。
每個服務附加元件都有消費者接受清單和消費者拒絕清單,用於判斷哪些端點可以連線至服務。特定服務附件可使用這些清單中的專案或網路,但不能同時使用。不支援依資料夾指定消費者。
如果您從「依專案接受消費者」變更為「依網路接受消費者」,或反之,請執行下列操作:
- 在單一作業中取代所有已核准的專案或網路。
- 如果您需要提供與先前相同的存取權,請確認新的接受和拒絕清單與先前相同。
如果您同時將專案或網路新增至接受清單和拒絕清單,系統會拒絕該專案或網路的連線要求。
如果您的消費者接受和拒絕清單參照專案,則會將傳播的連線限制套用至消費者專案。如果您的消費者接受和拒絕清單參照虛擬私有雲網路,則會將傳播的連線限制套用至消費者虛擬私有雲網路。
如要發布使用跨區域內部應用程式負載平衡器 (前測) 的服務,請使用 Google Cloud CLI 或傳送 API 要求。
主控台
前往 Google Cloud 控制台的「Private Service Connect」頁面。
按一下「已發布的服務」分頁標籤。
按一下「發布服務」。
在「目標詳細資料」部分中,選取「負載平衡器」。
選取負載平衡器類型。
選取負責託管要發布的服務的內部負載平衡器。「網路和區域」欄位會填入所選內部負載平衡器的詳細資料。
服務專案管理員可以選取具有共用虛擬私人雲端網路 IP 位址的內部負載平衡器。詳情請參閱「共用虛擬私有雲」。
畫面出現提示時,請選取與要發布的服務相關聯的「轉送規則」。
在「服務名稱」部分,輸入服務連結的名稱。
為服務選取一或多個 Private Service Connect 子網路。清單會填入所選內部負載平衡器 VPC 網路中的子網路,包括透過共用虛擬私有雲與服務專案共用的子網路。
如果服務連結使用內部負載平衡器,且該負載平衡器的 IP 位址來自共用虛擬私有雲網路,則您必須從相同的共用虛擬私有雲網路中選取共用子網路。
如要新增子網路,可以按照以下步驟操作:
- 按一下「保留新的子網路」。
- 輸入子網路的「名稱」和「說明」 (選填)。
- 選取子網路的「區域」。
- 選取IP 堆疊類型。
- 輸入要用於子網路的「IPv4 範圍」,然後按一下「新增」。
如要查看消費者連線資訊,請選取「使用 Proxy 通訊協定」。
如要接受所選專案的連線,請選取「接受所選專案的連線」。
- 針對每個要接受連線的專案,執行下列操作:
- 按一下「新增已接受的專案」,然後輸入以下內容:
- 您要接受連線的專案 ID 或專案編號。
- 連線限制:指定可連線的指定專案端點數量上限。
- 按一下「新增已接受的專案」,然後輸入以下內容:
- 選用:針對您要明確拒絕連線的每個專案,按一下「Add rejected project」(新增已拒絕的專案),然後輸入專案 ID 或專案編號。
- 針對每個要接受連線的專案,執行下列操作:
如要接受所選網路的連線,請選取「Accept connections for selected networks」。
- 針對每個要接受連線的網路,執行下列操作:
- 按一下「新增接受的網路」,然後輸入下列內容:
- 要接受連線的網路父項專案的專案 ID 或專案編號。
- 您要接受連線的網路名稱。
- 連線限制:指定可連線的指定網路端點數量上限。
- 按一下「新增接受的網路」,然後輸入下列內容:
- 選用:針對您要明確拒絕連線的每個網路,按一下「新增已拒絕的網路」,然後輸入網路的 ID 或專案編號,以及網路名稱。
- 針對每個要接受連線的網路,執行下列操作:
如要停用連線協調功能,請取消勾選「Enable connection reconciliation」核取方塊。
選用步驟:按一下「進階設定」,然後執行下列操作:
如要設定網域名稱,請輸入「網域名稱」,包括結尾的半形句號。
建議的網域名稱格式為
REGION.p.DOMAIN.
您必須擁有網域名稱,詳情請參閱「DNS 設定」一文。
輸入 NCC 傳播連線限制。如未指定,則預設值為
250
。
按一下「新增服務」。
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_1
和ACCEPTED_PROJECT_OR_NETWORK_2
:要接受的專案 ID、專案名稱或網路 URI。--consumer-accept-list
為選用項目,可包含一或多個專案或聯播網,但不得同時包含這兩種類型。LIMIT_1
和LIMIT_2
:專案或網路的連線限制。連線限制是指可連線至此服務的消費者端點或後端數量。每個已接受的專案或網路都必須設定連線限制。REJECTED_PROJECT_OR_NETWORK_1
和REJECTED_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_URI
和PSC_SUBNET_2_URI
:這項服務附件的子網路 URI。您可以使用 URI 指定一個或多個子網路。如果您要建立服務附件,且轉送規則含有共用虛擬私有雲網路的 IP 位址,請使用同一個共用虛擬私有雲網路的共用子網路。
REJECTED_PROJECT_1
和REJECTED_PROJECT_2
:要拒絕的專案 ID 或編號。consumerRejectLists
為選用項目,可包含一或多個專案。ACCEPTED_PROJECT_1
和ACCEPTED_PROJECT_2
:要接受的專案 ID 或編號。consumerAcceptLists
為選用項目,可包含一或多個專案。LIMIT_1
和LIMIT_2
:專案的連線限制。連線限制是指可連線至此服務的消費者端點或後端數量。每個通過審查的專案都必須設定連線數上限。
PROPAGATED_CONNECTION_LIMIT
:傳播連線限制。預設值為250
。
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_1
和REJECTED_PROJECT_ID_2
:您要拒絕的網路父項專案 ID。consumerRejectLists
為選用項目,可包含一或多個聯播網。REJECTED_NETWORK_1
和REJECTED_NETWORK_2
:您要拒絕的網路名稱。ACCEPTED_PROJECT_ID_1
和ACCEPTED_PROJECT_ID_2
:您要接受的網路父項專案 ID。consumerAcceptLists
為選用項目,可包含一或多個聯播網。ACCEPTED_NETWORK_1
和ACCEPTED_NETWORK_2
:您要接受的網路名稱。LIMIT_1
和LIMIT_2
:網路的連線限制。連線限制是指可連線至此服務的消費者端點或後端數量。每個通過審查的專案都必須設定連線數上限。
PROPAGATED_CONNECTION_LIMIT
:傳播連線限制。預設值為250
。
DOMAIN_NAME
:服務的 DNS 網域名稱,包括結尾的半形句號。建議格式:REGION.p.DOMAIN.
詳情請參閱「DNS 設定」。
如要發布啟用連線重整功能的服務,請傳送與先前要求類似的請求,但請加入下列欄位:
{ ... "reconcileConnections": true ... }
查看消費者連線資訊
如要進一步瞭解如何使用 Proxy 通訊協定查看消費者連線資訊,請參閱「查看消費者連線資訊」。
管理已發布服務的存取權要求
如果您擁有已發布的服務,且已獲得明確核准,則可以接受或拒絕來自消費者專案或聯播網的連線要求。詳情請參閱「管理已發布服務的存取權要求」。
您也可以為已發布的服務切換自動和明確的專案接受方式。詳情請參閱「變更已發布服務的連線偏好設定」
在已發布的服務中新增或移除子網路
您可以為已發布的服務新增或移除子網路。詳情請參閱「在已發布服務中新增或移除子網路」。
列出已發布的服務
您可以列出所有服務。
控制台
前往 Google Cloud 控制台的「Private Service Connect」頁面。
按一下「已發布的服務」分頁標籤。
系統會顯示 Private Service Connect 服務連結。
gcloud
使用 gcloud compute service-attachments list
指令。
gcloud compute service-attachments list [--regions=REGION_LIST]
將 REGION_LIST
替換為以半形逗號分隔的一或多個區域清單,這些區域是您要查看服務附件的區域。例如 us-central1
或 us-west1,us-central1
。
API
如要查看特定地區或所有地區的所有服務附件,請將 GET
要求傳送至 serviceAttachments.list
方法。
查看區域內的所有服務附件:
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。
主控台
您可以查看已發布的服務詳細資料。「Service attachment」欄位包含服務連結 URI。
前往 Google Cloud 控制台的「Private Service Connect」頁面。
按一下「已發布的服務」分頁標籤。
按一下要查看的服務。
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
:服務附件名稱。
刪除已發布的服務
即使服務附件有用戶連線,您還是可以刪除已發布的服務。刪除已發布服務只會移除服務附件。系統不會刪除相關聯的負載平衡器。刪除已發布服務時,會套用下列規則:
端點 (根據轉送規則) 的流量不再傳送至負載平衡器。
來自後端 (以全球外部應用程式負載平衡器為基礎)的流量會傳送至負載平衡器,直到負載平衡器刪除為止。
主控台
前往 Google Cloud 控制台的「Private Service Connect」頁面。
按一下「已發布的服務」分頁標籤。
按一下要刪除的服務。
點選「刪除」。
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 設定,明確設定連線調和設定。
查看服務附件的詳細設定,並記下
reconcileConnections
設定。gcloud compute service-attachments describe SERVICE_NAME --region=REGION
輸出結果包含
reconcileConnections
欄位,值可以是 true 或 false。reconcileConnections: false
更新 Terraform 設定檔,明確使用服務附件使用的設定。
resource "google_compute_service_attachment" "SERVICE_NAME" { ... reconcile_connections = false }
如需設定範例,請參閱 GitHub 上的「Service Attachment Reconcile 連線」。
疑難排解
更新服務附件時發生錯誤
如果您在更新服務附件時看到下列錯誤訊息,則接受清單或拒絕清單可能包含已刪除的專案:The
resource PROJECT was not found
。
從服務附件設定中移除已刪除的專案,即可解決問題。
使用
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
編輯指令輸出內容,從接受清單和拒絕清單中移除所有已刪除的專案。
更新服務附件,移除已刪除的專案。
如要更新接受清單,請按照下列步驟操作:
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 規格。