為 Cloud Workstations 設定自訂網域

如要存取工作站,您可以指定信任的自訂網域,而非使用 cloudworkstations.dev 網域。

架構

如要使用自訂主機名稱搭配 Cloud Workstations,請設定私人叢集,並為私人叢集的 HTTP 進入流量設定 Private Service Connect (PSC) 端點。您也必須建立採用 PSC 後端的應用程式負載平衡器,以私人叢集建立的 PSC 端點為目標。這個應用程式負載平衡器可以是外部或內部,並管理自訂網域的 SSL 憑證。

下圖說明具有自訂網域的叢集:

圖 1. 叢集 (含自訂網域)

事前準備

如要設定 Cloud Workstations 自訂網域,請按照下列步驟操作:

  1. 建立私人叢集,並使用 gcloud CLI 或 REST API 指令指定信任的自訂網域。

  2. 在工作站叢集專案中,建立具有 Private Service Connect (PSC) 後端的全域外部應用程式負載平衡器。注意事項:

    1. 如要將工作站設為私人工作站 (無法透過公開網際網路存取),請務必建立內部負載平衡器。如要這麼做,請建立私人 DNS 區域,並新增一筆記錄,將網域對應至負載平衡器使用的內部 IP 位址。如要進一步瞭解如何建立內部負載平衡器,請參閱虛擬私有雲 (VPC)

    2. 建立叢集後,您可以在工作站叢集資源中取得負載平衡器需要參照的服務附件。

    3. 請務必取得憑證,並在負載平衡器上將其指定為網域的萬用字元憑證,例如 *.us-west1-cluster1.example.com。如要瞭解所選負載平衡器支援的憑證類型,請參閱「憑證和負載平衡器」。 Google Cloud

    4. 只要將負載平衡器新增至 PrivateClusterConfig.allowedProjects 清單,您也可以在其他專案中建立負載平衡器。

    5. 如果貴機構有多個工作站叢集,可以使用單一負載平衡器,搭配不同的後端服務、憑證和轉送規則。

  3. 設定網域名稱系統 (DNS)。由於這是您管理的網域,請將所提供網域的所有子網域對應至負載平衡器,為這個網域設定 DNS。舉例來說,請為 us-west1-cluster1.example.com 建立 DNS 區域,並新增將 *.us-west1-cluster1.example.com 對應至負載平衡器所用外部 IP 位址的項目。

  4. 如要使用自訂網域存取工作站,請使用您建立的叢集建立工作站設定,然後使用該工作站設定建立工作站

  5. 啟動工作站並檢查網址。指定自訂網域後,工作站網址會採用下列格式:

    https://PORT-WORKSTATION_NAME.DOMAIN
    

    網址的下列部分取決於您的設定:

    • PORT:通訊埠號碼,預設為通訊埠 80
    • WORKSTATION_NAME:工作站名稱。
    • DOMAIN:叢集專屬網域名稱

建立私人叢集

建立具有私人端點的私人工作站叢集:

gcloud

  1. 開始之前,請務必先執行 gcloud init初始化 gcloud CLI,並指定預設專案。下列範例假設您已設定預設專案。

  2. 如要建立私有工作站叢集,請執行下列指令:

    gcloud workstations clusters create WORKSTATION_CLUSTER \
      --region=REGION \
      --domain=DOMAIN \
      --network=NETWORK \
      --subnetwork=SUBNETWORK \
      --enable-private-endpoint
    

    更改下列內容:

    • WORKSTATION_CLUSTER:要建立的工作站叢集名稱。
    • REGION:叢集所在區域的名稱。
    • DOMAIN:Cloud Workstations 用於 HTTP 進入的網域名稱。使用這個叢集專屬的子網域,例如 us-west1-cluster1.example.com
    • NETWORK:虛擬私有雲網路的名稱。如果省略此欄位,系統會使用預設 VPC。
    • SUBNETOWRK:虛擬私有雲網路中的子網路名稱。如果省略網路和子網路,系統會使用預設 VPC,以及指定 REGION 中的預設子網路。

如要進一步瞭解這項 gcloud CLI 指令,請參閱gcloud workstations clusters create參考說明文件。

curl

curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json"  -d '{"domain_config": {"domain": "DOMAIN"}, "private_cluster_config": {"enable_private_endpoint":true}, "network": "NETWORK", "subnetwork": "SUBNETWORK"}'  https://workstations.googleapis.com/v1/projects/PROJECT_NAME/locations/REGION/workstationClusters?workstation_cluster_id=WORKSTATION_CLUSTER

更改下列內容:

  • DOMAIN:Cloud Workstations 用於 HTTP 進入的網域名稱。這應該是這個叢集專屬的子網域,例如 us-west1-cluster1.example.com
  • NETWORK:虛擬私有雲網路的名稱。如果省略此欄位,系統會使用預設 VPC。
  • SUBNETOWRK:虛擬私有雲網路中的子網路名稱。如果省略網路和子網路,系統會使用預設 VPC,以及指定 REGION 中的預設子網路。
  • PROJECT_NAME:專案名稱。
  • REGION:叢集所在區域的名稱。
  • WORKSTATION_CLUSTER:要建立的工作站叢集名稱。

如要進一步瞭解這個 API 方法,請參閱 workstationClusters.create 參考說明文件。

REST

POST https://workstations.googleapis.com/v1/projects/PROJECT_NAME/locations/REGION/workstationClusters?workstationClusterId=WORKSTATION_CLUSTER
{
  "domainConfig": {
    "domain": "DOMAIN"
  },
  "privateClusterConfig": {
    "enablePrivateEndpoint": true
  }
  "network": "NETWORK"
  "subnetwork": "SUBNETWORK"
}

更改下列內容:

  • PROJECT_NAME:專案名稱。
  • REGION:叢集所在區域的名稱。
  • WORKSTATION_CLUSTER:要建立的工作站叢集名稱。
  • DOMAIN:Cloud Workstations 用於 HTTP 進入的網域名稱。這應該是這個叢集專屬的子網域,例如 us-west1-cluster1.example.com
  • NETWORK:虛擬私有雲網路的名稱。如果省略此欄位,系統會使用預設 VPC。
  • SUBNETOWRK:虛擬私有雲網路中的子網路名稱。如果省略網路和子網路,系統會使用預設 VPC,以及指定 REGION 中的預設子網路。

如要進一步瞭解這個 API 方法,請參閱 workstationClusters.create 參考說明文件。

建立採用 PSC 後端的全域外部應用程式負載平衡器

請按照下列 gcloud CLI 和 REST API 步驟,建立具有 PSC 後端的全域外部應用程式負載平衡器:

  1. 建立 NEG,連線至已發布的服務
  2. 為全域外部應用程式負載平衡器新增後端
  3. 建立網址對應,將連入要求轉送至後端服務
  4. 建立目標 HTTPS Proxy
  5. 建立全域地址
  6. 建立轉送規則

建立 NEG,連線至已發布的服務

建立指向已發布服務的 NEG 時,您需要該服務的服務附件 URI。服務連結的格式如下: projects/SERVICE_PROJECT/regions/REGION/serviceAttachments/SERVICE_NAME。 您可以在工作站叢集資源中找到 URI。

gcloud

gcloud compute network-endpoint-groups create NEG_NAME \
  --network-endpoint-type=private-service-connect \
  --psc-target-service=TARGET_SERVICE \
  --region=REGION \
  --network=NETWORK \
  --subnet=SUBNET

更改下列內容:

  • NEG_NAME:網路端點群組的名稱。
  • TARGET_SERVICE:服務連結的 URI。
  • REGION:要在其中建立網路端點群組的區域。地區必須與目標服務位於相同地區。
  • NETWORK:要在其中建立網路端點群組的網路。如果省略,系統會使用預設網路。
  • SUBNET:用於建立網路端點群組的子網路。子網路必須與目標服務位於相同區域。如果提供網路,就必須提供子網路。如果省略網路和子網路,系統會使用預設網路,以及指定 REGION 中的預設子網路。

如要進一步瞭解這個 gcloud CLI 指令,請參閱gcloud compute network-endpoint-groups create參考說明文件。

REST

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/regions/REGION/networkEndpointGroups
{
  "pscTargetService": "TARGET_SERVICE",
  "networkEndpointType": "PRIVATE_SERVICE_CONNECT",
  "name": "NEG_NAME"
}

更改下列內容:

  • PROJECT_NAME:專案名稱。
  • REGION:要在其中建立網路端點群組的區域。地區必須與目標服務位於相同地區。
  • NEG_NAME:網路端點群組的名稱。
  • TARGET_SERVICE:服務連結的 URI。

為全域外部應用程式負載平衡器新增後端

gcloud

  1. 為目標服務建立後端服務:

    gcloud compute backend-services create BACKEND_SERVICE_NAME \
    --load-balancing-scheme=EXTERNAL_MANAGED \
    --protocol=HTTPS \
    --global
    

    BACKEND_SERVICE_NAME 改為後端服務名稱。

  2. 新增指向目標服務的 Private Service Connect NEG。

    gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
    --network-endpoint-group=NEG_NAME \
    --network-endpoint-group-region=NEG_REGION \
    --global
    

    更改下列內容:

    • BACKEND_SERVICE_NAME:後端服務的名稱。
    • NEG_NAME:網路端點群組的名稱。
    • NEG_REGION:網路端點群組的區域。

如要進一步瞭解這個 gcloud CLI 指令,請參閱 gcloud compute backend-services creategcloud compute backend-services add-backend 參考說明文件。

REST

  1. 為目標服務建立後端服務:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/global/backendServices
    {
      "protocol": "HTTPS",
      "loadBalancingScheme": "EXTERNAL_MANAGED",
      "name": "BACKEND_SERVICE_NAME"
    }
    

    BACKEND_SERVICE_NAME 改為後端服務名稱。

  2. 新增指向目標服務的 Private Service Connect NEG。

    PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/global/backendServices/BACKEND_SERVICE_NAME
    {
      "backends": [
        {
          "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_NAME/regions/NEG_REGION/networkEndpointGroups/NEG_NAME "
        }
      ]
    }
    

    更改下列內容:

    • PROJECT_NAME:專案名稱。
    • BACKEND_SERVICE_NAME:後端服務的名稱。
    • NEG_REGION:網路端點群組的區域。
    • NEG_NAME:網路端點群組的名稱。

建立網址對應,將連入要求轉送至後端服務

gcloud

gcloud compute url-maps create URL_MAP_NAME \
  --default-service=BACKEND_SERVICE_NAME \
  --global

更改下列內容:

  • URL_MAP_NAME:要建立的網址對應名稱。
  • BACKEND_SERVICE_NAME:這個網址對應沒有對應時,要求要使用的後端服務名稱。

如要進一步瞭解這個 gcloud CLI 指令,請參閱gcloud compute url-maps create參考說明文件。

REST

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/global/urlMaps
{
  "name": "URL_MAP_NAME",
  "defaultService": "https://www.googleapis.com/compute/v1/projects/PROJECT_NAME/global/backendServices/BACKEND_SERVICE_NAME "
}

更改下列內容:

  • PROJECT_NAME:專案名稱。
  • URL_MAP_NAME:要建立的網址對應名稱。
  • BACKEND_SERVICE_NAME:這個網址對應沒有對應時,要求要使用的後端服務名稱。

建立目標 HTTPS Proxy

建立目標 HTTPS Proxy 以轉送要求至您的網址對應。Proxy 是負載平衡器的一部分,用於保存 HTTPS 負載平衡的 SSL 憑證,因此您還可以在此步驟中載入憑證:

gcloud

gcloud compute target-https-proxies create TARGET_HTTPS_PROXY_NAME \
  --ssl-certificates=SSL_CERTIFICATE_NAME \
  --url-map=URL_MAP_NAME \
  --global

更改下列內容:

  • TARGET_HTTPS_PROXY_NAME:要建立的目標 HTTPS Proxy 名稱。
  • SSL_CERTIFICATE_NAME:與負載平衡器相關聯的 SSL 憑證。
  • URL_MAP_NAME:網址對應資源。

如要進一步瞭解這個 gcloud CLI 指令,請參閱gcloud compute target-https-proxies create參考說明文件。

REST

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/global/targetHttpsProxies
{
  "sslCertificates": [
    "https://www.googleapis.com/compute/v1/projects/PROJECT_NAME/global/sslCertificates/SSL_CERTIFICATE_NAME"
  ],
  "urlMap": "https://www.googleapis.com/compute/v1/projects/PROJECT_NAME/global/urlMaps/URL_MAP_NAME",
  "name": "TARGET_HTTPS_PROXY_NAME"
}

更改下列內容:

  • PROJECT_NAME:專案名稱。
  • SSL_CERTIFICATE_NAME:與負載平衡器相關聯的 SSL 憑證。
  • URL_MAP_NAME:網址對應資源。
  • TARGET_HTTPS_PROXY_NAME:要建立的目標 HTTPS Proxy 名稱。

建立全域位址

保留供負載平衡器使用的靜態 IP 位址:

gcloud

gcloud compute addresses create LB_IP_ADDRESS_NAME \
  --global

更改下列內容:

  • LB_IP_ADDRESS_NAME:負載平衡器預留的靜態外部或內部 IP 位址名稱。

如要進一步瞭解這項 gcloud CLI 指令,請參閱gcloud compute addresses create參考說明文件。

REST

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/global/addresses
{
  "name": "LB_IP_ADDRESS_NAME"
}

更改下列內容:

  • PROJECT_NAME:專案名稱。
  • LB_IP_ADDRESS_NAME:負載平衡器預留的靜態外部或內部 IP 位址名稱。

建立轉送規則

建立轉送規則,將連入要求轉送至 Proxy:

gcloud

gcloud compute forwarding-rules create HTTPS_FORWARDING_RULE_NAME \
  --load-balancing-scheme=EXTERNAL_MANAGED \
  --network-tier=PREMIUM \
  --address=LB_IP_ADDRESS_NAME  \
  --target-https-proxy=TARGET_HTTPS_PROXY_NAME  \
  --global \
  --ports=443

更改下列內容:

  • HTTPS_FORWARDING_RULE_NAME:要建立的轉送規則名稱。
  • LB_IP_ADDRESS_NAME:負載平衡器預留的靜態外部或內部 IP 位址名稱。
  • TARGET_HTTPS_PROXY_NAME:接收流量的目標 HTTPS Proxy。

如要進一步瞭解這個 gcloud CLI 指令,請參閱gcloud compute forwarding-rules create參考說明文件。

REST

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/global/forwardingRules
{
  "loadBalancingScheme": "EXTERNAL_MANAGED",
  "networkTier": "PREMIUM",
  "IPAddress": "https://www.googleapis.com/compute/v1/projects/PROJECT_NAME/global/addresses/LB_IP_ADDRESS_NAME",
  "target": "https://www.googleapis.com/compute/v1/projects/PROJECT_NAME/global/targetHttpsProxies/TARGET_HTTPS_PROXY_NAME",
  "name": "HTTPS_FORWARDING_RULE_NAME",
  "portRange": "443-443"
}

更改下列內容:

  • PROJECT_NAME:專案名稱。
  • LB_IP_ADDRESS_NAME:負載平衡器預留的靜態外部或內部 IP 位址名稱。
  • TARGET_HTTPS_PROXY_NAME:接收流量的目標 HTTPS Proxy。
  • HTTPS_FORWARDING_RULE_NAME:要建立的轉送規則名稱。

設定 DNS

設定 DNS 並新增記錄,將 *.DOMAIN (例如 *.example.com) 對應至上一步保留的 IP 位址。如果您使用 Cloud DNS 管理網域的 DNS,請參閱「新增 DNS 記錄」。

建立工作站設定和工作站

如要使用自訂網域存取工作站,請按照下列步驟操作:

  1. 使用含有自訂網域的叢集建立工作站設定

  2. 使用自訂網域的工作站設定建立工作站

後續步驟

如要進一步瞭解如何設定自訂網域和私人叢集,請參閱下列文章: