Looker PSC サウスバウンド HTTPS インターネット NEG Gitlab セルフマネージド

1. はじめに

この Codelab では、内部 TCP プロキシ ロードバランサと、サービス ユーザーとして Looker PSC から呼び出されるインターネット ネットワーク エンドポイント グループ(NEG)を使用して、GitLab Self-Managed 環境へのサウスバウンド HTTPS 接続を行います。

Private Service Connect は Google Cloud ネットワーキング機能の一つで、コンシューマーが VPC ネットワーク内からマネージド サービスにプライベート接続でアクセスできるようにします。同様に、マネージド サービス プロデューサーがこれらのサービスを個別の VPC ネットワークにホストし、コンシューマーとのプライベート接続を提供できるようにします。たとえば、図 1 に示すように、Private Service Connect を使用して Looker にアクセスする場合、ユーザーがサービス コンシューマーで、Google がサービス プロデューサーです。

図 1.

145ea4672c3a3b14.png

下り(南向き)アクセス(逆 PSC とも呼ばれます)を使用すると、コンシューマーはプロデューサーとして公開サービスを作成し、Looker がオンプレミス、VPC、マネージド サービス、インターネットのエンドポイントにアクセスできるようにします。図 2 に示すように、Looker PSC のデプロイ場所に関係なく、サウスバウンド接続は任意のリージョンにデプロイできます。

図 2.

61932a992ba9b6f4.png

学習内容

  • ネットワークの要件
  • Private Service Connect プロデューサー サービスを作成する
  • Looker で Private Service Connect エンドポイントを作成する
  • GitLab Self-Managed インスタンスへの接続を確立する

必要なもの

def88091b42bfe4d.png

2. 作成するアプリの概要

プロデューサー ネットワーク looker-psc-demo を確立して、Private Service Connect(PSC)を介してサービスとして公開される内部 TCP プロキシ ロードバランサとインターネット NEG をデプロイします。公開したら、次の操作を行って Producer サービスへのアクセスを検証します。

  • プロデューサー サービス アタッチメントに関連付けられた PSC エンドポイントを Looker に作成する
  • Looker コンソールを使用して新しいプロジェクトを作成し、GitLab Self-Managed 環境への HTTPS 接続をテストします。

3. ネットワークの要件

この Codelab のプロデューサー ネットワークのネットワーク要件の内訳は次のとおりです。この 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

オンプレミス FQDN の Gitlab Self-Managed を示す FQDN として構成された、ロードバランサの外部バックエンドを定義するために使用されるリソース。インターネット FQDN は、解決のために VPC 内で DNS ルックアップを実行します。

バックエンド サービス

バックエンド サービスは、ロードバランサとバックエンド リソース間のブリッジとして機能します。このチュートリアルでは、バックエンド サービスがインターネット NEG に関連付けられています。

4. Codelab のトポロジ

34950ed6ef504309.png

5. 設定と要件

セルフペース型の環境設定

  1. Google Cloud Console にログインして、プロジェクトを新規作成するか、既存のプロジェクトを再利用します。Gmail アカウントも Google Workspace アカウントもまだお持ちでない場合は、アカウントを作成してください。

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • プロジェクト名は、このプロジェクトの参加者に表示される名称です。Google API では使用されない文字列です。いつでも更新できます。
  • プロジェクト ID は、すべての Google Cloud プロジェクトにおいて一意でなければならず、不変です(設定後は変更できません)。Cloud コンソールでは一意の文字列が自動生成されます。通常は、この内容を意識する必要はありません。ほとんどの Codelab では、プロジェクト ID(通常は PROJECT_ID と識別されます)を参照する必要があります。生成された ID が好みではない場合は、ランダムに別の ID を生成できます。または、ご自身で試して、利用可能かどうかを確認することもできます。このステップ以降は変更できず、プロジェクトを通して同じ ID になります。
  • なお、3 つ目の値として、一部の API が使用するプロジェクト番号があります。これら 3 つの値について詳しくは、こちらのドキュメントをご覧ください。
  1. 次に、Cloud のリソースや API を使用するために、Cloud コンソールで課金を有効にする必要があります。この Codelab の操作をすべて行って、費用が生じたとしても、少額です。このチュートリアルの終了後に請求が発生しないようにリソースをシャットダウンするには、作成したリソースを削除するか、プロジェクトを削除します。Google Cloud の新規ユーザーは、300 米ドル分の無料トライアル プログラムをご利用いただけます。

Cloud Shell を起動する

Google Cloud はノートパソコンからリモートで操作できますが、この Codelab では、Google Cloud Shell(Cloud 上で動作するコマンドライン環境)を使用します。

Google Cloud Console で、右上のツールバーにある Cloud Shell アイコンをクリックします。

55efc1aaa7a4d3ad.png

プロビジョニングと環境への接続にはそれほど時間はかかりません。完了すると、次のように表示されます。

7ffe5cbb04455448.png

この仮想マシンには、必要な開発ツールがすべて用意されています。永続的なホーム ディレクトリが 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 Self-Managed インスタンス(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 内で、FQDN gitlabonprem.com とポート 443 を使用してインターネット NEG gitlab-self-managed-internet-neg を更新します。

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 内で、Looker Core がサービス アタッチメントに接続できるようにする自動承認を使用して、サービス アタッチメント gitlab-self-managed-svc-attachment-https を作成します。サービス アタッチメントへのアクセスを制御する場合は、明示的な承認オプションがサポートされています。

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

次に、projects で始まる selfLink URI にリストされているサービス アタッチメントを取得してメモし、Looker で PSC エンドポイントを構成します。

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] → [公開済みサービス]

6fa12f77e4640b08.png

43987fabbabb41ad.png

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: サービス アタッチメントの説明を取得したときにキャプチャされた URI(gitlab-self-managed-svc-attachment-https)。
  • 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 インスタンス] → [詳細]

2d4684d722d31e4b.png

2d600f33dc61cb6d.png

10. DNS の解決

次のセクションでは、GCE インスタンスを作成し、PING を実行して Gitlab Self-Managed インスタンス 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 Self-Managed インスタンスの 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 接続を確立するために必要な手順は次のとおりです。

14. 接続をテストする

次の手順では、Looker コンソールを使用して、Git 接続の設定とテストで説明されている手順に沿って、gitlabonprem.com への HTTPS 接続を検証するプロジェクトを作成します。

ae3b3884e8ef5db8.png

15. クリーンアップ

単一の 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 コンソールを使用して、GitLab Self-Managed インスタンスへの接続を正常に構成して検証しました。

プロデューサー インフラストラクチャを作成し、プロデューサー サービスへの接続を可能にするインターネット NEG、プロデューサー サービス、Looker PSC エンドポイントの作成方法を学習しました。

Cosmopup はコードラボが大好きです。

c911c127bffdee57.jpeg

次のステップ

以下の Codelab をご覧ください。

参考資料と動画

リファレンス ドキュメント