如需访问工作站,您可以指定受信任的自定义网域,而不是使用 cloudworkstations.dev 网域。
架构
如需将 Cloud Workstations 与自定义主机名搭配使用,请设置专用集群,并为专用集群的 HTTP 入口设置 Private Service Connect (PSC) 端点。您还必须创建一个具有 PSC 后端的应用负载平衡器,该负载平衡器以针对专用集群创建的 PSC 端点为目标。此应用负载平衡器可以是外部负载平衡器,也可以是内部负载平衡器,并且可以管理自定义网域的 SSL 证书。
下图展示了具有自定义网域的集群:
准备工作
如需设置 Cloud Workstations 自定义网域,请按以下步骤操作:
使用
gcloudCLI 或 REST API 命令创建专用集群并指定可信的自定义网域。在您用于工作站集群项目的同一项目中创建具有 Private Service Connect (PSC) 后端的全球外部应用负载平衡器。请注意以下几点:
如果您希望工作站是私密的(无法通过公共互联网访问),请确保创建内部负载均衡器。为此,请创建专用 DNS 区域,并添加将网域映射到负载均衡器所用内部 IP 地址的记录。如需详细了解如何创建内部负载均衡器,请参阅虚拟私有云 (VPC)。
您需要在负载均衡器中引用的服务附件可以在创建集群后从工作站集群资源中获取。
请务必获取证书,并在负载平衡器上将其指定为网域的通配符证书,例如
*.us-west1-cluster1.example.com。如需了解所选负载均衡器支持的证书类型,请参阅证书和 Google Cloud 负载均衡器。您还可以在其他项目中创建负载均衡器,只要将其添加到
PrivateClusterConfig.allowedProjects列表中即可。如果贵组织中有多个工作站集群,您可以使用一个负载均衡器,并为每个集群设置单独的后端服务、证书和路由规则。
设置域名系统 (DNS)。由于这是您管理的网域,请通过将所提供网域的所有子网域映射到负载均衡器,为此网域设置 DNS。例如,为
us-west1-cluster1.example.com创建一个 DNS 区域,并添加一个将*.us-west1-cluster1.example.com映射到负载均衡器所用外部 IP 地址的条目。启动工作站并检查网址。指定自定义网域后,工作站网址将采用以下格式:
https://PORT-WORKSTATION_NAME.DOMAIN网址的以下部分取决于您的配置:
PORT:端口号,默认为端口80。WORKSTATION_NAME:工作站名称。DOMAIN:您的集群专用域名
创建专用集群
创建具有专用端点的专用工作站集群:
gcloud
在开始之前,请务必运行
gcloud init初始化gcloudCLI,并指定默认项目。以下示例假定您已设置默认项目。如需创建专用工作站集群,请运行以下命令:
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 网络的名称。如果省略,则使用默认 VPC。SUBNETOWRK:VPC 网络中子网的名称。如果同时省略网络和子网,则使用默认 VPC,并使用指定区域中的默认子网。
如需详细了解此 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 网络的名称。如果省略,则使用默认 VPC。SUBNETOWRK:VPC 网络中子网的名称。如果同时省略网络和子网,则使用默认 VPC,并使用指定区域中的默认子网。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 网络的名称。如果省略,则使用默认 VPC。SUBNETOWRK:VPC 网络中子网的名称。如果同时省略网络和子网,则使用默认 VPC,并使用指定区域中的默认子网。
如需详细了解此 API 方法,请参阅 workstationClusters.create 参考文档。
创建具有 PSC 后端的全球外部应用负载平衡器
按照以下 gcloud CLI 和 REST API 步骤创建具有 PSC 后端的全球外部应用负载平衡器:
创建 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 \ --subnet=SUBNET
替换以下内容:
NEG_NAME:网络端点组的名称。TARGET_SERVICE:服务连接的 URI。REGION:要在其中创建网络端点组的区域。该区域必须与目标服务的区域相同。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
为目标服务创建后端服务:
gcloud compute backend-services create BACKEND_SERVICE_NAME \ --load-balancing-scheme=EXTERNAL_MANAGED \ --protocol=HTTPS \ --global
将
BACKEND_SERVICE_NAME替换为后端服务的名称。添加指向目标服务的 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 create 和 gcloud compute backend-services add-backend 参考文档。
REST
为目标服务创建后端服务:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/global/backendServices { "protocol": "HTTPS", "loadBalancingScheme": "EXTERNAL_MANAGED", "name": "BACKEND_SERVICE_NAME" }将
BACKEND_SERVICE_NAME替换为后端服务的名称。添加指向目标服务的 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 代理
创建一个目标 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:网址映射资源。
如需详细了解此 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 代理的名称。
创建全局地址
预留一个供负载均衡器使用的静态 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 记录。
创建工作站配置和工作站
如需使用自定义网域访问工作站,请执行以下操作:
后续步骤
如需详细了解如何设置自定义网域和专用集群,请参阅以下内容: