Cloud Workstations のカスタム ドメインを設定する

ワークステーションにアクセスするには、cloudworkstations.dev ドメインを使用するのではなく、信頼できるカスタム ドメインを指定します。

アーキテクチャ

カスタムホスト名で Cloud Workstations を使用するには、限定公開クラスタの HTTP Ingress 用に限定公開クラスタを設定するおよび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 ゾーンを作成し、ロードバランサが使用する外部 IP アドレスに *.us-west1-cluster1.example.com をマッピングするエントリを追加します。

  4. カスタム ドメインを使用してワークステーションにアクセスするには、作成したクラスタを使用してワークステーション構成を作成し、そのワークステーション構成を使用してワークステーションを作成します。

  5. ワークステーションを起動して、URL を確認します。カスタム ドメインを指定する場合、ワークステーションの URL は次の形式を使用します。

    https://PORT-WORKSTATION_NAME.DOMAIN
    

    URL の次の部分は、構成によって異なります。

    • PORT: ポート番号(デフォルトはポート 80)。
    • WORKSTATION_NAME: ワークステーション名。
    • DOMAIN: クラスタ固有のドメイン名

限定公開クラスタを作成する

プライベート エンドポイントを持つ限定公開ワークステーション クラスタを作成します。

gcloud

  1. 始める前に、gcloud init を実行して gcloud CLI を初期化し、デフォルトのプロジェクトを指定していることを確認してください。続く例では、デフォルト プロジェクトが設定されていることを前提としています。

  2. 限定公開ワークステーション クラスタを作成するには、次のコマンドを実行します。

    gcloud workstations clusters create WORKSTATION_CLUSTER \
      --region=REGION \
      --domain=DOMAIN \
      --enable-private-endpoint
    

    次のように置き換えます。

    • WORKSTATION_CLUSTER: 作成するワークステーション クラスタの名前。
    • REGION: クラスタのリージョンの名前。
    • DOMAIN: Cloud Workstations が HTTP 上り(内向き)に使用するドメイン名。このクラスタに固有のサブドメインを使用します(例: us-west1-cluster1.example.com)。

この 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}}'  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)。
  • 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
  }
}

次のように置き換えます。

  • PROJECT_NAME: プロジェクトの名前。
  • REGION: クラスタのリージョンの名前。
  • WORKSTATION_CLUSTER: 作成するワークステーション クラスタの名前。
  • DOMAIN: Cloud Workstations が HTTP 上り(内向き)に使用するドメイン名。これは、このクラスタに固有のサブドメインにする必要があります(例: us-west1-cluster1.example.com)。

この API メソッドの詳細については、workstationClusters.create リファレンス ドキュメントをご覧ください。

PSC バックエンドを持つグローバル外部アプリケーション ロードバランサを作成する

以下の gcloud CLI と REST API の手順に沿って、PSC バックエンドを持つグローバル外部アプリケーション ロードバランサを作成します。

  1. 公開サービスに接続するための NEG を作成する
  2. グローバル外部アプリケーション ロードバランサにバックエンドを追加する
  3. 受信リクエストをバックエンド サービスに転送するための URL マップを作成する
  4. ターゲット HTTPS プロキシを作成する
  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: ネットワーク エンドポイント グループの名前。

受信リクエストをバックエンド サービスに転送するための URL マップを作成する

gcloud

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

次のように置き換えます。

  • URL_MAP_NAME: 作成する URL マップの名前。
  • BACKEND_SERVICE_NAME: この URL マップにマッピングがない場合にリクエストに使用するバックエンド サービスの名前。

この 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: 作成する URL マップの名前。
  • BACKEND_SERVICE_NAME: この URL マップにマッピングがない場合にリクエストに使用するバックエンド サービスの名前。

ターゲット HTTPS プロキシを作成する

URL マップにリクエストの経路を指定するターゲット HTTPS プロキシを作成します。プロキシはロードバランサの一部であり、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 プロキシの名前。
  • SSL_CERTIFICATE_NAME: ロードバランサに関連付けられた SSL 証明書。
  • URL_MAP_NAME: URL マップリソース。

この 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: URL マップリソース。
  • TARGET_HTTPS_PROXY_NAME: 作成するターゲット HTTPS プロキシの名前。

グローバル アドレスの作成

ロードバランサで使用する静的 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 アドレスの名前。

転送ルールの作成

受信リクエストをプロキシに転送する転送ルールを作成します。

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 プロキシ。

この 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 プロキシ。
  • HTTPS_FORWARDING_RULE_NAME: 作成する転送ルールの名前。

DNS を設定する

DNS を設定し、*.DOMAIN*.example.com など)を前の手順で予約した IP アドレスにマッピングするレコードを追加します。Cloud DNS を使用してドメインの DNS を管理する場合は、DNS レコードの追加をご覧ください。

ワークステーション構成とワークステーションを作成する

カスタム ドメインを使用してワークステーションにアクセスするには、次のようにします。

  1. カスタム ドメインでクラスタを使用して、ワークステーション構成を作成します。

  2. カスタム ドメインでワークステーション構成を使用して、ワークステーションを作成します。

次のステップ

カスタム ドメインと限定公開クラスタの設定の詳細については、以下をご覧ください。