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. 워크스테이션을 시작하고 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 \
      --network=NETWORK \
      --subnetwork=SUBNETWORK \
      --enable-private-endpoint
    

    다음을 바꿉니다.

    • WORKSTATION_CLUSTER: 만들려는 워크스테이션 클러스터의 이름입니다.
    • REGION: 클러스터의 리전 이름입니다.
    • DOMAIN: HTTP 인그레스에 대해 Cloud Workstations에 사용되는 도메인 이름입니다. 이 클러스터에 고유한 하위 도메인을 사용합니다(예: us-west1-cluster1.example.com).
    • NETWORK: VPC 네트워크의 이름입니다. 생략하면 기본값 VPC가 사용됩니다.
    • SUBNETOWRK: VPC 네트워크의 서브네트워크 이름입니다. 네트워크와 서브네트워크가 모두 생략되면 기본 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: HTTP 인그레스에 대해 Cloud Workstations에 사용되는 도메인 이름입니다. 이 클러스터에 고유한 하위 도메인이어야 합니다(예: us-west1-cluster1.example.com).
  • NETWORK: VPC 네트워크의 이름입니다. 생략하면 기본값 VPC가 사용됩니다.
  • SUBNETOWRK: VPC 네트워크의 서브네트워크 이름입니다. 네트워크와 서브네트워크가 모두 생략되면 기본 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: HTTP 인그레스에 대해 Cloud Workstations에 사용되는 도메인 이름입니다. 이 클러스터에 고유한 하위 도메인이어야 합니다(예: us-west1-cluster1.example.com).
  • NETWORK: VPC 네트워크의 이름입니다. 생략하면 기본값 VPC가 사용됩니다.
  • SUBNETOWRK: VPC 네트워크의 서브네트워크 이름입니다. 네트워크와 서브네트워크가 모두 생략되면 기본 VPC가 사용되고, 지정된 REGION의 기본 서브네트워크가 사용됩니다.

이 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 프록시 만들기

대상 HTTPS 프록시를 만들어 요청을 URL 맵으로 라우팅합니다. 프록시는 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. 커스텀 도메인과 함께 워크스테이션 구성을 사용하여 워크스테이션을 만듭니다.

다음 단계

커스텀 도메인 및 비공개 클러스터 설정에 대한 자세한 내용은 다음을 참조하세요.