1. はじめに
この Codelab では、内部 TCP プロキシ ロードバランサと、サービス ユーザーとして Looker PSC から呼び出されるインターネット ネットワーク エンドポイント グループ(NEG)を使用して、GitLab セルフマネージド環境へのサウスバウンド HTTPS 接続を行います。
Private Service Connect は Google Cloud ネットワーキング機能の一つで、コンシューマーが VPC ネットワーク内からマネージド サービスにプライベート接続でアクセスできるようにします。同様に、マネージド サービス プロデューサーがこれらのサービスを個別の VPC ネットワークにホストし、コンシューマーとのプライベート接続を提供できるようにします。たとえば、図 1 に示すように、Private Service Connect を使用して Looker にアクセスする場合、ユーザーがサービス コンシューマーで、Google がサービス プロデューサーです。
図 1.
下り(外向き)アクセス(リバース PSC)を使用すると、コンシューマはプロデューサーとして公開サービスを作成し、Looker がオンプレミス、VPC 内のエンドポイント、マネージド サービス、インターネットにアクセスできるようにできます。図 2 に示すように、サウスバウンド接続は、Looker PSC がデプロイされている場所に関係なく、任意のリージョンにデプロイできます。
図 2.
学習内容
- ネットワークの要件
- Private Service Connect プロデューサー サービスを作成する
- Looker で Private Service Connect エンドポイントを作成する
- GitLab セルフマネージド インスタンスへの接続を確立する
必要なもの
- オーナー権限を持つ Google Cloud プロジェクト
- GitLab アカウントとリポジトリ
- 既存の Looker PSC インスタンス
2. 作成するアプリの概要
プロデューサー ネットワーク looker-psc-demo を確立し、Private Service Connect(PSC)を介してサービスとして公開された内部 TCP プロキシ ロードバランサとインターネット NEG をデプロイします。公開したら、次の操作を行い、プロデューサー サービスへのアクセスを検証します。
- プロデューサーのサービス アタッチメントに関連付けられた PSC エンドポイントを Looker で作成する
- Looker Console を使用して新しいプロジェクトを作成し、GitLab セルフマネージド環境への HTTPS 接続をテストします。
3. ネットワークの要件
以下は、プロデューサー ネットワークのネットワーク要件の内訳です。この Codelab のコンシューマは Looker PSC インスタンスです。
コンポーネント | 説明 |
VPC(looker-psc-demo) | カスタムモード VPC |
PSC NAT サブネット | コンシューマ VPC ネットワークからのパケットは送信元 NAT(SNAT)を使用して変換され、元の送信元 IP アドレスが、プロデューサーの VPC ネットワーク内にある NAT サブネットからの送信元 IP アドレスに変換されます。 |
PSC 転送ルールのサブネット | リージョン内部 TCP プロキシ ロードバランサの IP アドレスの割り振りに使用されます。 |
PSC NEG サブネット | ネットワーク エンドポイント グループの IP アドレスの割り振りに使用されます。 |
プロキシ専用サブネット | 各ロードバランサのプロキシ には内部 IP アドレスが割り当てられます。プロキシからバックエンド VM またはエンドポイントに送信されるパケットには、プロキシ専用サブネットからの送信元 IP アドレスが含まれています。 |
インターネット NEG | Gitlab セルフマネージド オンプレミス FQDN を表す FQDN として構成され、ロードバランサの外部バックエンドを定義するために使用されるリソース。インターネット FQDN は、解決のために VPC 内で DNS ルックアップを実行します。 |
バックエンド サービス | バックエンド サービスは、ロードバランサとバックエンド リソース間のブリッジとして機能します。このチュートリアルでは、バックエンド サービスがインターネット NEG に関連付けられています。 |
4. Codelab トポロジ
5. 設定と要件
セルフペース型の環境設定
- Google Cloud Console にログインして、プロジェクトを新規作成するか、既存のプロジェクトを再利用します。Gmail アカウントも Google Workspace アカウントもまだお持ちでない場合は、アカウントを作成してください。
- プロジェクト名は、このプロジェクトの参加者に表示される名称です。Google API では使用されない文字列です。いつでも更新できます。
- プロジェクト ID は、すべての Google Cloud プロジェクトにおいて一意でなければならず、不変です(設定後は変更できません)。Cloud コンソールでは一意の文字列が自動生成されます。通常は、この内容を意識する必要はありません。ほとんどの Codelab では、プロジェクト ID(通常は
PROJECT_ID
と識別されます)を参照する必要があります。生成された ID が好みではない場合は、ランダムに別の ID を生成できます。または、ご自身で試して、利用可能かどうかを確認することもできます。このステップ以降は変更できず、プロジェクトを通して同じ ID になります。 - なお、3 つ目の値として、一部の API が使用するプロジェクト番号があります。これら 3 つの値について詳しくは、こちらのドキュメントをご覧ください。
- 次に、Cloud のリソースや API を使用するために、Cloud コンソールで課金を有効にする必要があります。この Codelab の操作をすべて行って、費用が生じたとしても、少額です。このチュートリアルの終了後に請求が発生しないようにリソースをシャットダウンするには、作成したリソースを削除するか、プロジェクトを削除します。Google Cloud の新規ユーザーは、300 米ドル分の無料トライアル プログラムをご利用いただけます。
Cloud Shell を起動する
Google Cloud はノートパソコンからリモートで操作できますが、この Codelab では、Google Cloud Shell(Cloud 上で動作するコマンドライン環境)を使用します。
Google Cloud Console で、右上のツールバーにある Cloud Shell アイコンをクリックします。
プロビジョニングと環境への接続にはそれほど時間はかかりません。完了すると、次のように表示されます。
この仮想マシンには、必要な開発ツールがすべて用意されています。永続的なホーム ディレクトリが 5 GB 用意されており、Google Cloud で稼働します。そのため、ネットワークのパフォーマンスと認証機能が大幅に向上しています。この Codelab での作業はすべて、ブラウザ内から実行できます。インストールは不要です。
6. 始める前に
API を有効にする
Cloud Shell で、プロジェクト ID が設定されていることを確認します。
gcloud config list project
gcloud config set project [YOUR-PROJECT-ID]
project=[YOUR-PROJECT-ID]
region=[YOUR-REGION]
echo $project
echo $region
必要なサービスをすべて有効にします。
gcloud services enable compute.googleapis.com
7. プロデューサー VPC ネットワークを作成する
VPC ネットワーク
Cloud Shell で次の操作を行います。
gcloud compute networks create looker-psc-demo --subnet-mode custom
サブネットを作成する
PSC サブネットは、ネットワーク アドレス変換のために PSC サービス アタッチメントに関連付けられます。
Cloud Shell で、PSC NAT サブネットを作成します。
gcloud compute networks subnets create producer-psc-nat-subnet --network looker-psc-demo --range 172.16.10.0/28 --region $region --purpose=PRIVATE_SERVICE_CONNECT
Cloud Shell で、プロデューサー転送ルールのサブネットを作成します。
gcloud compute networks subnets create producer-psc-fr-subnet --network looker-psc-demo --range 172.16.20.0/28 --region $region --enable-private-ip-google-access
Cloud Shell で、プロデューサーのリージョン プロキシ専用サブネットを作成します。
gcloud compute networks subnets create $region-proxy-only-subnet \
--purpose=REGIONAL_MANAGED_PROXY \
--role=ACTIVE \
--region=$region \
--network=looker-psc-demo \
--range=10.10.10.0/24
ロードバランサの IP アドレスを予約する
Cloud Shell で、ロードバランサの内部 IP アドレスを予約します。
gcloud compute addresses create internet-neg-lb-ip \
--region=$region \
--subnet=producer-psc-fr-subnet
Cloud Shell で、予約済みの IP アドレスを表示します。
gcloud compute addresses describe internet-neg-lb-ip \
--region=$region | grep -i address:
出力例:
user@cloudshell$ gcloud compute addresses describe internet-neg-lb-ip --region=$region | grep -i address:
address: 172.16.20.2
インターネット NEG を設定する
インターネット NEG を作成し、–network-endpoint-type を internet-fqdn-port(外部バックエンドに到達可能なホスト名とポート)に設定します。
Cloud Shell で、Gitlab セルフマネージド インスタンス gitlabonprem.com へのアクセスに使用するインターネット NEG を作成します。
gcloud compute network-endpoint-groups create gitlab-self-managed-internet-neg \
--network-endpoint-type=INTERNET_FQDN_PORT \
--network=looker-psc-demo \
--region=$region
Cloud Shell で、インターネット NEG gitlab-self-managed-internet-neg を FQDN gitlabonprem.com とポート 443 で更新します。
gcloud compute network-endpoint-groups update gitlab-self-managed-internet-neg \
--add-endpoint="fqdn=gitlabonprem.com,port=443" \
--region=$region
ネットワーク ファイアウォール ルールを作成する
IAP に VM インスタンスへの接続を許可するには、次のファイアウォール ルールを作成します。
- IAP を使用してアクセス可能にするすべての VM インスタンスに適用します。
- IP 範囲 35.235.240.0/20 からの上り(内向き)トラフィックを許可します。この範囲には、IAP が TCP 転送に使用するすべての IP アドレスが含まれています。
Cloud Shell で、IAP ファイアウォール ルールを作成します。
gcloud compute firewall-rules create ssh-iap-looker-psc-demo \
--network looker-psc-demo \
--allow tcp:22 \
--source-ranges=35.235.240.0/20
8. プロデューサー サービスを作成する
ロードバランサのコンポーネントを作成する
Cloud Shell で次の操作を行います。
gcloud compute backend-services create producer-backend-svc --protocol=tcp --region=$region --load-balancing-scheme=INTERNAL_MANAGED
gcloud compute backend-services add-backend producer-backend-svc --network-endpoint-group=gitlab-self-managed-internet-neg --network-endpoint-group-region=$region --region=$region
Cloud Shell で、リクエストをバックエンド サービスに転送するターゲット TCP プロキシを作成します。
gcloud compute target-tcp-proxies create producer-lb-tcp-proxy \
--backend-service=producer-backend-svc \
--region=$region
次の構文で、転送ルール(内部 TCP プロキシ ロードバランサ)を作成します。
Cloud Shell で次の操作を行います。
gcloud compute forwarding-rules create producer-gitlab-self-managed-fr\
--load-balancing-scheme=INTERNAL_MANAGED \
--network-tier=PREMIUM \
--network=looker-psc-demo \
--subnet=producer-psc-fr-subnet \
--address=internet-neg-lb-ip \
--target-tcp-proxy=producer-lb-tcp-proxy \
--target-tcp-proxy-region=$region \
--region=$region \
--ports=443
サービス アタッチメントを作成する
Cloud Shell で、サービス アタッチメント gitlab-self-managed-svc-attachment-https を作成し、Looker Core がサービス アタッチメントに接続できるように自動承認を設定します。サービス アタッチメントへのアクセスを制御する場合は、明示的な承認のオプションがサポートされています。
gcloud compute service-attachments create gitlab-self-managed-svc-attachment-https --region=$region --producer-forwarding-rule=producer-gitlab-self-managed-fr --connection-preference=ACCEPT_AUTOMATIC --nat-subnets=producer-psc-nat-subnet
次に、Looker で PSC エンドポイントを構成するために、selfLink URI に記載されている Service Attachment を取得してメモします。
selfLink: projects/<your-project-id>/regions/<your-region>/serviceAttachments/gitlab-self-managed-svc-attachment-https
Cloud Shell で次の操作を行います。
gcloud compute service-attachments describe gitlab-self-managed-svc-attachment-https --region=$region
例:
connectionPreference: ACCEPT_AUTOMATIC
creationTimestamp: '2025-03-04T18:55:42.254-08:00'
description: ''
enableProxyProtocol: false
fingerprint: MlY9GLLGsgE=
id: '9103522880241140673'
kind: compute#serviceAttachment
name: gitlab-self-managed-svc-attachment-https
natSubnets:
- https://www.googleapis.com/compute/v1/projects/$projectid/regions/us-central1/subnetworks/producer-psc-nat-subnet
pscServiceAttachmentId:
high: '115404658846991336'
low: '9103522880241140673'
reconcileConnections: false
region: https://www.googleapis.com/compute/v1/projects/$projectid/regions/us-central1
selfLink: https://www.googleapis.com/compute/v1/projects/$projectid/regions/us-central1/serviceAttachments/gitlab-self-managed-svc-attachment-https
targetService: https://www.googleapis.com/compute/v1/projects/$projectid/regions/us-central1/forwardingRules/producer-gitlab-self-managed-fr
Cloud コンソールで、次の場所に移動します。
[ネットワーク サービス] → [Private Service Connect] → [公開サービス]
9. Looker で PSC エンドポイント接続を確立する
次のセクションでは、Cloud Shell で –psc-service-attachment フラグを使用して、単一のドメインのプロデューサー サービス アタッチメントを Looker Core PSC に関連付けます。
Cloud Shell で、次のパラメータを環境に合わせて更新して psc アソシエーションを作成します。
- INSTANCE_NAME: Looker(Google Cloud コア)インスタンスの名前。
- DOMAIN_1: gitlabonprem.com
- SERVICE_ATTACHMENT_1: サービス アタッチメント gitlab-self-managed-svc-attachment-https の記述時にキャプチャされた URI。
- REGION: Looker(Google Cloud コア)インスタンスがホストされるリージョン。
Cloud Shell で次の操作を行います。
gcloud looker instances update INSTANCE_NAME \
--psc-service-attachment domain=DOMAIN_1,attachment=SERVICE_ATTACHMENT_URI_1 \
--region=REGION
例:
gcloud looker instances update looker-psc-instance \
--psc-service-attachment domain=gitlabonprem.com,attachment=projects/$project/regions/$region/serviceAttachments/gitlab-self-managed-svc-attachment-https \
--region=$region
Cloud Shell で、serviceAttachments の connectionStatus が「ACCEPTED」であることを確認して、Looker PSC INSTANCE_NAME で更新します。
gcloud looker instances describe [INSTANCE_NAME] --region=$region --format=json
例:
gcloud looker instances describe looker-psc-instance --region=$region --format=json
例:
{
"adminSettings": {},
"createTime": "2024-08-23T00:00:45.339063195Z",
"customDomain": {
"domain": "cosmopup.looker.com",
"state": "AVAILABLE"
},
"encryptionConfig": {},
"lookerVersion": "24.12.28",
"name": "projects/$project/locations/$region/instances/looker-psc-instance",
"platformEdition": "LOOKER_CORE_ENTERPRISE_ANNUAL",
"pscConfig": {
"allowedVpcs": [
"projects/$project/global/networks/looker-psc-demo"
],
"lookerServiceAttachmentUri": "projects/t7ec792caf2a609d1-tp/regions/$region/serviceAttachments/looker-psc-f51982e2-ac0d-48b1-91bb-88656971c183",
"serviceAttachments": [
{
"connectionStatus": "ACCEPTED",
"localFqdn": "gitlabonprem.com",
"targetServiceAttachmentUri": "projects/$project/regions/$region/serviceAttachments/gitlab-self-managed-svc-attachment-https"
}
]
},
"pscEnabled": true,
"state": "ACTIVE",
"updateTime": "2024-08-30T17:47:33.440271635Z"
}
Cloud コンソールで PSC エンドポイントを検証する
Cloud コンソールから PSC 接続を検証できます。
Cloud コンソールで、次の場所に移動します。
Looker → Looker インスタンス → 詳細
10. DNS の解決
次のセクションでは、GCE インスタンスを作成し、PING を実行して Gitlab セルフマネージド インスタンス gitlabonprem.com への DNS 解決を検証します。想定どおり、gitlabonprem.com の限定公開 DNS ゾーンが必要なため、解決に失敗します。
11. GCE インスタンスを作成する
Cloud Shell で、DNS 解決の検証に使用する GCE インスタンスを作成します。
gcloud compute instances create gce-dns-lookup \
--project=$projectid \
--machine-type=e2-micro \
--image-family debian-11 \
--no-address \
--image-project debian-cloud \
--zone us-central1-a \
--subnet=producer-psc-fr-subnet
Cloud Shell で IAP を使用して consumer-vm にログインし、curl を実行してプロデューサー サービスへの接続を確認します。タイムアウトが発生した場合は再試行します。
gcloud compute ssh gce-dns-lookup --project=$projectid --zone=us-central1-a --tunnel-through-iap
OS から gitlabonprem.com に PING を実行すると、失敗することが予想されます。
ping gitlabonprem.com
例:
user@gce-dns-lookup:~$ ping gitlabonprem.com
ping: gitlabonprem.com: Name or service not known
OS を終了して、Cloud Shell ターミナルに戻ります。
exit
12. 限定公開 DNS ゾーンを作成する
Cloud Shell で、Cloud DNS 限定公開ゾーンを作成します。
gcloud dns --project=$projectid managed-zones create gitlab-self-managed --description="" --dns-name="gitlabonprem.com." --visibility="private" --networks="https://compute.googleapis.com/compute/v1/projects/$projectid/global/networks/looker-psc-demo"
Cloud Shell で、Gitlab セルフマネージド インスタンスの IP アドレス 192.168.10.4 で構成される A レコードを作成します。
gcloud dns --project=$projectid record-sets create gitlabonprem.com. --zone="gitlab-self-managed" --type="A" --ttl="300" --rrdatas="192.168.10.4"
Cloud Shell で IAP を使用して consumer-vm にログインし、curl を実行してプロデューサー サービスへの接続を確認します。タイムアウトが発生した場合は再試行します。
gcloud compute ssh gce-dns-lookup --project=$projectid --zone=us-central1-a --tunnel-through-iap
OS から gitlabonprem.com に PING を実行します。これは 192.168.10.4 に解決されます。
ping gitlabonprem.com
例:
user@gce-dns-lookup:~$ ping gitlabonprem.com
PING gitlabonprem.com (192.168.10.4) 56(84) bytes of data
OS を終了して、Cloud Shell ターミナルに戻ります。
exit
13. ハイブリッド接続
FQDN gitlabonprem.com は、オンプレミスでホストされているプライベート IP アドレスで解決できるようになりました。次に、接続を有効にするために、looker-psc-demo VPC とオンプレミス ネットワークの間にハイブリッド ネットワーキング(InterConnect、HA-VPN など)を構成する必要があります。
オンプレミスへのハイブリッド NEG 接続を確立するために必要な手順は次のとおりです。
- Network Connectivity プロダクトの選択 | Google Cloud
- VPC ピアリングを使用するハブ アンド スポーク アーキテクチャでは、ハイブリッド NEG は Cloud Router と同じ VPC(ハブ)にデプロイされます。
- このサブネットはオンプレミス ワークロードとの通信のソース IP アドレスとして機能するため、プロキシ専用サブネット範囲に対応するようにオンプレミス ファイアウォールが更新されていることを確認します。
- Cloud Router からカスタム ルート アドバタイズとしてプロキシ専用サブネットをアドバタイズする
14. 接続をテストする
次の手順では、Looker Console を使用してプロジェクトを作成し、Git 接続の設定とテストで説明されている手順に沿って gitlabonprem.com への HTTPS 接続を検証します。
15. クリーンアップ
1 つの Cloud Shell ターミナルからラボ コンポーネントを削除する
gcloud compute service-attachments delete gitlab-self-managed-svc-attachment-https --region=$region -q
gcloud compute forwarding-rules delete producer-gitlab-self-managed-fr --region=$region -q
gcloud compute target-tcp-proxies delete producer-lb-tcp-proxy --region=$region -q
gcloud compute backend-services delete producer-backend-svc --region=$region -q
gcloud compute network-endpoint-groups delete gitlab-self-managed-internet-neg --region=$region -q
gcloud compute instances delete gce-dns-lookup --zone=us-central1-a -q
gcloud compute networks subnets delete producer-psc-fr-subnet producer-psc-nat-subnet $region-proxy-only-subnet --region=$region -q
gcloud dns --project=$projectid record-sets delete gitlabonprem.com. --zone="gitlab-sel
f-managed" --type="A"
gcloud dns --project=$projectid managed-zones delete gitlab-self-managed
gcloud compute networks delete looker-psc-demo -q
16. 完了
これで、Private Service Connect を活用した Looker Console を使用して、GitLab セルフマネージド インスタンスへの接続を正常に構成して検証できました。
プロデューサー インフラストラクチャを作成し、プロデューサー サービスへの接続を許可するインターネット NEG、プロデューサー サービス、Looker PSC エンドポイントを作成する方法を学習しました。
Cosmopup はコードラボが大好きです。
次のステップ
以下の Codelab をご覧ください。
- Private Service Connect でサービスを公開して使用する
- Private Service Connect と内部 TCP プロキシ ロードバランサを使用して、ハイブリッド ネットワーキング経由でオンプレミス サービスに接続する
- 公開されているすべての Private Service Connect Codelab にアクセスする