Looker PSC サウスバウンド ハイブリッド NEG からオンプレミス

1. はじめに

この Codelab では、内部 TCP プロキシ ロードバランサと、サービス コンシューマとして Looker PSC から呼び出されるハイブリッド ネットワーク エンドポイント グループを使用して、H-VPN を介したオンプレミス postgres データベースへの下り(内向き)接続を行います。

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

図 1.

145ea4672c3a3b14.png

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

図 2.

259493afd914f68b.png

学習内容

  • ネットワークの要件
  • Private Service Connect プロデューサー サービスを作成する
  • Looker で Private Service Connect エンドポイントを作成する
  • テスト接続を使用して Looker からオンプレミス Postgres データベースへの接続を確立する

必要なもの

def88091b42bfe4d.png

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

プロデューサー ネットワーク looker-psc-demo を確立して、Private Service Connect(PSC)を介してサービスとして公開された内部 TCP プロキシ ロードバランサとハイブリッド NEG をデプロイします。オンプレミス データベースをデモするため、HA-VPN を使用して looker-psc-demo VPC に接続された on-prem-demo VPC をデプロイします。

Producer サービスへのアクセスを検証するには、次の操作を行います。

  • プロデューサーのサービス アタッチメントに関連付けられた PSC エンドポイントを Looker で作成する
  • Looker Console を使用して、オンプレミス postgres データベースへの接続検証を実行する

3. ネットワークの要件

以下に、プロデューサー ネットワークのネットワーク要件の詳細を示します。この Codelab のコンシューマは Looker PSC インスタンスです。

コンポーネント

説明

VPC(looker-psc-demo)

カスタムモード VPC

VPC(on-prem-demo)

カスタムモード VPC

PSC NAT サブネット

コンシューマ VPC ネットワークからのパケットは送信元 NAT(SNAT)を使用して変換され、元の送信元 IP アドレスが、プロデューサーの VPC ネットワーク内にある NAT サブネットからの送信元 IP アドレスに変換されます。

PSC 転送ルールのサブネット

リージョン内部 TCP プロキシ ロードバランサの IP アドレスの割り振りに使用されます。

PSC NEG サブネット

ネットワーク エンドポイント グループの IP アドレスの割り振りに使用

プロキシ専用サブネット

各ロードバランサのプロキシ には内部 IP アドレスが割り当てられます。プロキシからバックエンド VM またはエンドポイントに送信されるパケットには、プロキシ専用サブネットからの送信元 IP アドレスが含まれています。

ハイブリッド NEG

オンプレミスなどのクラウド サービスは、他の Cloud Load Balancing のバックエンドと同様に扱われます。主な違いは、ハイブリッド接続 NEG を使用してこれらのバックエンドのエンドポイントを構成することです。エンドポイントは、Cloud VPN や Cloud Interconnect などのハイブリッド接続プロダクトを使用してロードバランサが到達できる有効な IP:ポートの組み合わせにする必要があります。

バックエンド サービス

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

Cloud Router

  • Cloud NAT は、コントロール プレーン機能に Cloud Router を使用しますが、BGP セッションの管理には使用しません。
  • Cloud Router は、psc-looker-demo VPC と on-prem-demo VPC 間の HA-VPN 確立のために確立された BGP に使用されます。

HA-VPN

Google Cloud VPC ネットワーク間の HA VPN。このトポロジでは、各ネットワークで HA VPN ゲートウェイを使用して、2 つの Google Cloud VPC ネットワークを接続できます。VPC ネットワークは、同じリージョンまたは複数のリージョンに配置できます。

Cloud NAT

インターネット下り(外向き)に on-prem-demo VPC によって使用されます。

4. Codelab トポロジ

79aeb28b38f237da.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]
zone=[YOUR-ZONE]
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 hybrid-neg-lb-ip \
  --region=$region \
  --subnet=producer-psc-fr-subnet

Cloud Shell で、予約済みの IP アドレスを表示します。

gcloud compute addresses describe hybrid-neg-lb-ip \
  --region=$region | grep -i address:

出力例:

gcloud compute addresses describe hybrid-neg-lb-ip   --region=$region | grep -i address:
address: 172.16.20.2

ハイブリッド NEG を設定する

ハイブリッド NEG を作成し、-network-endpoint-type を NON_GCP_PRIVATE_IP_PORT に設定します。

Cloud Shell で、オンプレミス データベースへのアクセスに使用するハイブリッド NEG を作成します。

gcloud compute network-endpoint-groups create on-prem-hybrid-neg \
    --network-endpoint-type=NON_GCP_PRIVATE_IP_PORT \
    --network=looker-psc-demo \
    --zone=$zone

Cloud Shell で、チュートリアルの後半のステップで生成したオンプレミス データベースの IP:Port(192.168.10.4 とポート 5432)を使用して、ハイブリッド NEG を更新します。

gcloud compute network-endpoint-groups update on-prem-hybrid-neg \
    --add-endpoint=ip=192.168.10.4,port=5432 \
    --zone=$zone

リージョン ヘルスチェックを作成する

Cloud Shell で、オンプレミス データベース ポート 5432 をプローブするヘルスチェックを作成します。

gcloud compute health-checks create tcp on-prem-5432-healthcheck \
    --region=$region \
    --port=5432

ネットワーク ファイアウォール ポリシーとファイアウォール ルールを作成する

Cloud Shell で次の操作を行います。

gcloud compute network-firewall-policies create looker-psc-demo-policy --global

gcloud compute network-firewall-policies associations create --firewall-policy looker-psc-demo-policy --network looker-psc-demo --name looker-psc-demo --global-firewall-policy

次のファイアウォール ルールは、PSC NAT サブネット範囲からネットワーク内のすべてのインスタンスへのトラフィックを許可します。

Cloud Shell で次の操作を行います。

gcloud compute network-firewall-policies rules create 2001 --action ALLOW --firewall-policy looker-psc-demo-policy --description "allow traffic from PSC NAT subnet" --direction INGRESS --src-ip-ranges 172.16.10.0/28 --global-firewall-policy --layer4-configs=tcp

8. プロデューサー サービスを作成する

ロードバランサのコンポーネントを作成する

Cloud Shell で、バックエンド サービスを作成します。

gcloud compute backend-services create producer-backend-svc --region=$region --load-balancing-scheme=INTERNAL_MANAGED --protocol=TCP --region=$region --health-checks=on-prem-5432-healthcheck --health-checks-region=$region

Cloud Shell で、ハイブリッド NEG バックエンドをバックエンド サービスに追加します。

gcloud compute backend-services add-backend producer-backend-svc --network-endpoint-group=on-prem-hybrid-neg --network-endpoint-group-zone=$zone --balancing-mode=CONNECTION --max-connections=100 --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-hybrid-neg-fr \
     --load-balancing-scheme=INTERNAL_MANAGED \
     --network-tier=PREMIUM \
     --network=looker-psc-demo \
     --subnet=producer-psc-fr-subnet \
     --address=hybrid-neg-lb-ip \
     --target-tcp-proxy=producer-lb-tcp-proxy \
     --target-tcp-proxy-region=$region \
     --region=$region \
     --ports=5432

サービス アタッチメントを作成する

Cloud Shell で、Service Attachment onpremdatabase1-svc-attachment を作成します。

gcloud compute service-attachments create onpremdatabase1-svc-attachment --region=$region --producer-forwarding-rule=producer-hybrid-neg-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/onpremdatabase1-svc-attachment

Cloud Shell で次の操作を行います。

gcloud compute service-attachments describe onpremdatabase1-svc-attachment --region=$region

期待される出力の例:

connectionPreference: ACCEPT_AUTOMATIC
creationTimestamp: '2024-09-01T16:07:51.600-07:00'
description: ''
enableProxyProtocol: false
fingerprint: cFt9rERR1iE=
id: '2549689544315850024'
kind: compute#serviceAttachment
name: onpremdatabase1-svc-attachment
natSubnets:
- https://www.googleapis.com/compute/v1/projects/$project/regions/$region/subnetworks/producer-psc-nat-subnet
pscServiceAttachmentId:
  high: '19348441121424360'
  low: '2549689544315850024'
reconcileConnections: false
region: https://www.googleapis.com/compute/v1/projects/$project/regions/$region
selfLink: https://www.googleapis.com/compute/v1/projects/$project/regions/$region/serviceAttachments/onpremdatabase1-svc-attachment
targetService: https://www.googleapis.com/compute/v1/projects/$project/regions/$region/forwardingRules/producer-hybrid-neg-fr

Cloud コンソールで、次の場所に移動します。

[ネットワーク サービス] → [Private Service Connect] → [公開サービス]

9f436251a3ae2cc7.png

4c3e8e73d40d1238.png

9. Looker で PSC エンドポイント接続を確立する

次のセクションでは、Cloud Shell で 1 つのドメインの –psc-service-attachment フラグを使用して、プロデューサー サービス アタッチメントを Looker Core PSC に関連付けます。

Cloud Shell で、次のパラメータを環境に合わせて更新して psc アソシエーションを作成します。

  • INSTANCE_NAME: Looker(Google Cloud コア)インスタンスの名前。
  • DOMAIN_1: onprem.database1.com
  • SERVICE_ATTACHMENT_1: サービス アタッチメントの作成時にキャプチャされた URI(onpremdatabase1-svc-attachment)
  • 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=onprem.database1.com,attachment=projects/$project/regions/$region/serviceAttachments/onpremdatabase1-svc-attachment --region=$region

Cloud Shell で、serviceAttachments の connectionStatus が「ACCEPTED」であることを確認して、Looker PSC インスタンス名で更新します。

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": "looker.cosmopup.com",
    "state": "AVAILABLE"
  },
  "encryptionConfig": {},
  "lookerVersion": "24.14.18",
  "name": "projects/$project/locations/$region/instances/looker-psc-instance",
  "platformEdition": "LOOKER_CORE_ENTERPRISE_ANNUAL",
  "pscConfig": {
    "allowedVpcs": [
      "projects/$project/global/networks/looker-psc-demo",
      "projects/$project/global/networks/looker-shared-vpc"
    ],
    "lookerServiceAttachmentUri": "projects/t7ec792caf2a609d1-tp/regions/$region/serviceAttachments/looker-psc-f51982e2-ac0d-48b1-91bb-88656971c183",
    "serviceAttachments": [
      {
        "connectionStatus": "ACCEPTED",
        "localFqdn": "onprem.database1.com",
        "targetServiceAttachmentUri": "projects/$project/regions/$region/serviceAttachments/onpremdatabase1-svc-attachment"
      }
    ]
  },
  "pscEnabled": true,
  "state": "ACTIVE",
  "updateTime": "2024-09-01T23:15:07.426372901Z"
}

Cloud コンソールで PSC エンドポイントを検証する

Cloud コンソールから PSC 接続を検証できます。

Cloud コンソールで、次の場所に移動します。

Looker → Looker インスタンス → 詳細

2d4684d722d31e4b.png

993cdaf748f4c030.png

オンプレミス VPC ネットワークを作成する

VPC ネットワーク

Cloud Shell で次の操作を行います。

gcloud compute networks create on-prem-demo --project=$project --subnet-mode=custom

Postgresql データベース サブネットを作成する

Cloud Shell で次の操作を行います。

gcloud compute networks subnets create database-subnet --project=$project --range=192.168.10.0/28 --network=on-prem-demo --region=$region

Cloud Shell で、onprem.database1.com に使用される内部 IPv4 アドレス(192.168.10.4)を予約します。

gcloud compute addresses create on-prem-database1-ip --region=$region --subnet=database-subnet --addresses 192.168.10.4

on-prem-demo VPC の Cloud Router を作成する

このチュートリアルでは、VM インスタンスに外部 IP アドレスがないため、ソフトウェア パッケージのインストールに Cloud NAT を使用します。

Cloud Shell で、Cloud NAT と HA-VPN で使用する Cloud Router を作成します。

gcloud compute routers create on-prem-cr \
   --region=$region \
   --network=on-prem-demo \
   --asn=65002

Cloud Shell で、NAT ゲートウェイを作成します。

gcloud compute routers nats create on-prem-nat --router=on-prem-cr --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region $region

データベース テスト インスタンスを作成する

Looker への接続をテストして検証するために使用する postgres データベース インスタンスを作成します。

Cloud Shell でインスタンスを作成します。

gcloud compute instances create postgres-database \
    --project=$project \
    --zone=$zone \
    --machine-type=e2-medium \
    --subnet=database-subnet \
    --no-address \
    --private-network-ip 192.168.10.4 \
    --image-family debian-12 \
    --image-project debian-cloud  \
    --metadata startup-script="#! /bin/bash
      sudo apt-get update
      sudo apt -y install postgresql postgresql-client postgresql-contrib -y"

ネットワーク ファイアウォール ポリシーとファイアウォール ルールを作成する

Cloud Shell で次の操作を行います。

gcloud compute network-firewall-policies create on-prem-demo-policy --global

gcloud compute network-firewall-policies associations create --firewall-policy on-prem-demo-policy --network on-prem-demo --name on-prem-demo --global-firewall-policy

IAP に VM インスタンスへの接続を許可するには、次のファイアウォール ルールを作成します。

  • IAP を使用してアクセス可能にするすべての VM インスタンスに適用します。
  • IP 範囲 35.235.240.0/20 からの上り(内向き)トラフィックを許可します。この範囲には、IAP が TCP 転送に使用するすべての IP アドレスが含まれています。

Cloud Shell で次の操作を行います。

gcloud compute network-firewall-policies rules create 1000 --action ALLOW --firewall-policy on-prem-demo-policy --description "SSH with IAP" --direction INGRESS --src-ip-ranges 35.235.240.0/20 --layer4-configs tcp:22  --global-firewall-policy

次のファイアウォール ルールは、プロキシ専用サブネット範囲からネットワーク内のすべてのインスタンスへのトラフィックを許可します。

Cloud Shell で次の操作を行います。

gcloud compute network-firewall-policies rules create 2001 --action ALLOW --firewall-policy on-prem-demo-policy --description "allow traffic from proxy only subnet" --direction INGRESS --src-ip-ranges 10.10.10.0/24 --global-firewall-policy --layer4-configs=tcp

10. ハイブリッド接続

次のセクションでは、Border Gateway Protocol(BGP)を使用して、Virtual Private Cloud(VPC)とピア ネットワーク間でルートを動的に交換できる Cloud Router を作成します。

Cloud Router は、Cloud VPN トンネルを介して BGP セッションを設定してネットワークを接続できます。新しいサブネット IP アドレス範囲を自動的に学習し、ピア ネットワークに通知します。

次の手順では、looker-psc-demo VPC と on-prem-demo VPC の間に HA VPN をデプロイして、onprem.database1.com へのハイブリッド NEG 接続を示します。

looker-psc-demo の HA VPN GW を作成します。

各ゲートウェイが作成されると、ゲートウェイ インターフェースごとに 1 つずつ、自動的に 2 つの外部 IPv4 アドレスが割り振られます。

Cloud Shell で、HA VPN GW を作成します。

gcloud compute vpn-gateways create looker-psc-demo-vpn-gw \
   --network=looker-psc-demo \
   --region=$region

on-prem-demo の HA VPN GW を作成する

各ゲートウェイが作成されると、ゲートウェイ インターフェースごとに 1 つずつ、自動的に 2 つの外部 IPv4 アドレスが割り振られます。

Cloud Shell で、HA VPN GW を作成します。

gcloud compute vpn-gateways create on-prem-vpn-gw \
   --network=on-prem-demo\
   --region=$region

HA VPN GW の作成を確認する

コンソールを使用して、[ハイブリッド接続]、[VPN]、[Cloud VPN ゲートウェイ] の順に移動します。

7f1b504616504866.png

looker-psc-demo の Cloud Router を作成する

Cloud Shell で、Cloud Router を作成します。

gcloud compute routers create looker-psc-demo-cr \
   --region=$region \
   --network=looker-psc-demo\
   --asn=65001

looker-psc-demo 用の VPN トンネルを作成する

各 HA VPN ゲートウェイに 2 つの VPN トンネルを作成します。

VPN tunnel0 を作成する

Cloud Shell で、tunnel0 を作成します。

gcloud compute vpn-tunnels create looker-psc-demo-tunnel0 \
    --peer-gcp-gateway on-prem-vpn-gw \
    --region $region \
    --ike-version 2 \
    --shared-secret [ZzTLxKL8fmRykwNDfCvEFIjmlYLhMucH] \
    --router looker-psc-demo-cr \
    --vpn-gateway looker-psc-demo-vpn-gw \
    --interface 0

VPN tunnel1 を作成する

Cloud Shell で、tunnel1 を作成します。

gcloud compute vpn-tunnels create looker-psc-demo-tunnel1 \
    --peer-gcp-gateway on-prem-vpn-gw \
    --region $region \
    --ike-version 2 \
    --shared-secret [bcyPaboPl8fSkXRmvONGJzWTrc6tRqY5] \
    --router looker-psc-demo-cr \
    --vpn-gateway looker-psc-demo-vpn-gw \
    --interface 1

on-prem-demo 用の VPN トンネルを作成する

各 HA VPN ゲートウェイに 2 つの VPN トンネルを作成します。

VPN tunnel0 を作成する

Cloud Shell で、tunnel0 を作成します。

gcloud compute vpn-tunnels create on-prem-tunnel0 \
    --peer-gcp-gateway looker-psc-demo-vpn-gw \
    --region $region \
    --ike-version 2 \
    --shared-secret [ZzTLxKL8fmRykwNDfCvEFIjmlYLhMucH] \
    --router on-prem-cr \
    --vpn-gateway on-prem-vpn-gw \
   --interface 0

VPN tunnel1 を作成する

Cloud Shell で、tunnel1 を作成します。

gcloud compute vpn-tunnels create on-prem-tunnel1 \
    --peer-gcp-gateway looker-psc-demo-vpn-gw \
    --region $region \
    --ike-version 2 \
    --shared-secret [bcyPaboPl8fSkXRmvONGJzWTrc6tRqY5] \
    --router on-prem-cr \
    --vpn-gateway on-prem-vpn-gw \
    --interface 1

VPN トンネルの作成を確認する

コンソールを使用して、[ハイブリッド接続]、[VPN]、[Cloud VPN トンネル] の順に移動します。

c2fcb340a7614070.png

11. BGP ネイバーを確立する

looker-psc-demo の BGP インターフェースとピアリングを作成する

Cloud Shell で、BGP インターフェースを作成します。

gcloud compute routers add-interface looker-psc-demo-cr \
    --interface-name if-tunnel0-to-onprem \
    --ip-address 169.254.1.1 \
    --mask-length 30 \
    --vpn-tunnel looker-psc-demo-tunnel0 \
    --region $region

Cloud Shell で BGP ピアを作成します。

gcloud compute routers add-bgp-peer looker-psc-demo-cr \
    --peer-name bgp-on-premises-tunnel0 \
    --interface if-tunnel1-to-onprem \
    --peer-ip-address 169.254.1.2 \
    --peer-asn 65002 \
    --region $region

Cloud Shell で、BGP インターフェースを作成します。

gcloud compute routers add-interface looker-psc-demo-cr \
    --interface-name if-tunnel1-to-onprem \
    --ip-address 169.254.2.1 \
    --mask-length 30 \
    --vpn-tunnel looker-psc-demo-tunnel1 \
    --region $region

Cloud Shell で BGP ピアを作成します。

gcloud compute routers add-bgp-peer looker-psc-demo-cr \
    --peer-name bgp-on-premises-tunnel1 \
    --interface if-tunnel2-to-onprem \
    --peer-ip-address 169.254.2.2 \
    --peer-asn 65002 \
    --region $region

on-prem-demo の BGP インターフェースとピアリングを作成する

Cloud Shell で、BGP インターフェースを作成します。

gcloud compute routers add-interface on-prem-cr \
    --interface-name if-tunnel0-to-looker-psc-demo \
    --ip-address 169.254.1.2 \
    --mask-length 30 \
    --vpn-tunnel on-prem-tunnel0 \
    --region $region

Cloud Shell で BGP ピアを作成します。

gcloud compute routers add-bgp-peer on-prem-cr \
    --peer-name bgp-looker-psc-demo-tunnel0 \
    --interface if-tunnel1-to-looker-psc-demo \
    --peer-ip-address 169.254.1.1 \
    --peer-asn 65001 \
    --region $region

Cloud Shell で、BGP インターフェースを作成します。

gcloud compute routers add-interface on-prem-cr \
    --interface-name if-tunnel1-to-looker-psc-demo \
    --ip-address 169.254.2.2 \
    --mask-length 30 \
    --vpn-tunnel on-prem-tunnel1 \
    --region $region

Cloud Shell で、BGP ピアを作成します。

gcloud compute routers add-bgp-peer on-prem-cr \
    --peer-name bgp-looker-psc-demo-tunnel1\
    --interface if-tunnel2-to-looker-psc-demo \
    --peer-ip-address 169.254.2.1 \
    --peer-asn 65001 \
    --region $region

[ハイブリッド接続] > [VPN] に移動して、VPN トンネルの詳細を表示します。

78ab590317919bf5.png

looker-psc-demo が HA VPN 経由で学習したルートを検証する

HA VPN トンネルと BGP セッションが確立されたので、Cloud Router のデフォルトの動作として、サブネット ルートをアドバタイズします。looker-psc-demo で学習したルートを表示します。

コンソールを使用して、[VPC ネットワーク] → [VPC ネットワーク] → [looker-psc-demo] → [ルート] → [リージョン] → [表示] に移動します。

looker-psc-demo が on-prem-demo VPC からデータベース サブネット 192.168.10.0/28 を学習したことを確認します。

c11a11ed8b0491c8.png

on-prem-demo VPC が HA VPN 経由でルートを学習したことを確認する

Cloud Router のデフォルトの動作はすべてのサブネットをアドバタイズするため、プロキシ専用サブネットが BGP 経由でアドバタイズされます。ハイブリッド NEG は、サーバー onprem.database1.com と通信するときに、プロキシ専用サブネットを送信元アドレスとして使用します。

on-prem-demo が looker-psc-demo からプロキシ専用サブネット 10.10.10.0/24 を学習したことを確認します。

コンソールを使用して、[VPC ネットワーク] > [VPC ネットワーク] > [on-prem-demo] > [ルート] > [リージョン] > [表示] に移動します。

b0073faed026931f.png

12. Looker postgres データベースの作成

次のセクションでは、Cloud Shell を使用して postgres-database VM に SSH 接続します。

Cloud Shell で、postgres-database インスタンスに ssh を実行します。

 gcloud compute ssh --zone "$zone" "postgres-database" --project "$project"

OS 内で、postgres-database インスタンスの IP アドレス(ens4)を特定してメモします。

ip a

例:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute 
       valid_lft forever preferred_lft forever
2: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc mq state UP group default qlen 1000
    link/ether 42:01:c0:a8:0a:04 brd ff:ff:ff:ff:ff:ff
    altname enp0s4
    inet 192.168.10.4/32 metric 100 scope global dynamic ens4
       valid_lft 66779sec preferred_lft 66779sec
    inet6 fe80::4001:c0ff:fea8:a04/64 scope link 
       valid_lft forever preferred_lft forever

OS 内で postgresql にログインします。

sudo -u postgres psql postgres

OS 内で、パスワード プロンプトを入力します。

\password postgres

OS 内で、パスワードを postgres に設定します(同じパスワードを 2 回入力します)。

postgres

例:

user@postgres-database:~$ sudo -u postgres psql postgres
\password postgres
psql (13.11 (Debian 13.11-0+deb11u1))
Type "help" for help.
postgres=# \password postgres
Enter new password for user "postgres": 
Enter it again: 

OS 内で postgres を終了します。

\q

例:

postgres=# \q
user@postgres-database:~$ 

次のセクションでは、pg_hba.conf ファイルの IPv4 ローカル接続に、postgres データベース インスタンスの IP(192.168.10.4)とプロキシ専用サブネット(10.10.10.0/24)を挿入します。

sudo nano /etc/postgresql/15/main/pg_hba.conf

次のスクリーンショットは、更新が完了した状態です。eaff2ed6d27fa7cc.png

次のセクションで、postgresql.conf のコメントを解除して、次のスクリーンショットのようにすべての「*」IP アドレスをリッスンするようにします。

sudo nano /etc/postgresql/15/main/postgresql.conf

プログラム開始前:

65e0b1074dc48644.png

申し込みの後:

14a0d1fa5455e23e.png

OS 内で postgresql サービスを再起動します。

sudo service postgresql restart

OS 内で、postgresql のステータスがアクティブであることを確認します。

sudo service postgresql status

例:

OS 内で、postgresql のステータスがアクティブであることを確認します。

user@postgres-database:/$ sudo service postgresql status
● postgresql.service - PostgreSQL RDBMS
     Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; preset: enabled)
     Active: active (exited) since Mon 2024-09-02 12:10:10 UTC; 1min 46s ago
    Process: 20486 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
   Main PID: 20486 (code=exited, status=0/SUCCESS)
        CPU: 2ms

Sep 02 12:10:10 postgres-database systemd[1]: Starting postgresql.service - PostgreSQL RDBMS...
Sep 02 12:10:10 postgres-database systemd[1]: Finished postgresql.service - PostgreSQL RDBMS.

13. postgres データベースを作成する

次のセクションでは、Looker とオンプレミス間の接続を検証するために使用される postgres_looker という名前の postgres データベースとスキーマ looker_schema を作成します。

OS 内で postgres にログインします。

sudo -u postgres psql postgres

OS 内でデータベースを作成します。

create database postgres_looker;

OS 内でデータベースを一覧表示します。

\l

OS 内で、パスワード postgreslooker を使用してユーザー postgres_looker を作成します。

create user postgres_looker with password 'postgreslooker';

OS 内でデータベースに接続します。

\c postgres_looker;

OS 内でスキーマ looker-schema を作成し、Cloud Shell プロンプトに戻ります。

create schema looker_schema;
create table looker_schema.test(firstname CHAR(15), lastname CHAR(20));
exit

Exit from the OS, returning you to cloud shell:

\q

例:

user@postgres-database:/$ sudo -u postgres psql postgres
psql (15.8 (Debian 15.8-0+deb12u1))
Type "help" for help.

postgres=# create database postgres_looker;
CREATE DATABASE
postgres=# \l
                                                List of databases
      Name       |  Owner   | Encoding | Collate |  Ctype  | ICU Locale | Locale Provider |   Access privileges   
-----------------+----------+----------+---------+---------+------------+-----------------+-----------------------
 postgres        | postgres | UTF8     | C.UTF-8 | C.UTF-8 |            | libc            | 
 postgres_looker | postgres | UTF8     | C.UTF-8 | C.UTF-8 |            | libc            | 
 template0       | postgres | UTF8     | C.UTF-8 | C.UTF-8 |            | libc            | =c/postgres          +
                 |          |          |         |         |            |                 | postgres=CTc/postgres
 template1       | postgres | UTF8     | C.UTF-8 | C.UTF-8 |            | libc            | =c/postgres          +
                 |          |          |         |         |            |                 | postgres=CTc/postgres
(4 rows)

postgres=# create user postgres_looker with password 'postgreslooker';
CREATE ROLE
postgres=# \c postgres_looker;
You are now connected to database "postgres_looker" as user "postgres".
postgres_looker=# create schema looker_schema;
create table looker_schema.test(firstname CHAR(15), lastname CHAR(20));
exit
CREATE SCHEMA
CREATE TABLE
postgres_looker-# \q

14. Looker を Postgres postgres-database と統合する

次のセクションでは、Looker Console を使用して、オンプレミスの postgres データベース インスタンスへのデータベース接続を作成します。

[ADMIN] → [DATABASE] → [CONNECTIONS] → [ADD CONNECTION] を選択します。

以下のスクリーンショットに沿って接続の詳細を入力し、[接続] を選択します。

5900fdf0b698cbfc.png

接続が構成されました

4817157fd3b1277e.png

15. Looker の接続を確認する

次のセクションでは、Looker の「test」アクションと TCPDUMP を使用して、on-prem-vpc の postgres-database への Looker の接続を検証する方法について説明します。

セッションがタイムアウトした場合は、Cloud Shell から postgres-database にログインします。

Cloud Shell で次の操作を行います。

gcloud config list project
gcloud config set project [YOUR-PROJECT-ID]
project=[YOUR-PROJECT-ID]
region=[YOUR-REGION]
zone=[YOUR-ZONE]
echo $project
echo $region
gcloud compute ssh --zone "$zone" "postgres-database" --project "$project"

OS から、プロキシ専用サブネット 10.10.10.0/24 を使用して TCPDUMP フィルタを作成します。

sudo tcpdump -i any net 10.10.10.0/24 -nn

データ接続に移動 [ADMIN] → [DATABASE] → [CONNECTIONS] → [postgres-database] → [Test]

[Test] を選択すると、Looker は以下のように postgres データベースに接続します。

774f9313ece41034.png

クリーンアップ

1 つの Cloud Shell ターミナルからラボ コンポーネントを削除する

gcloud compute service-attachments delete onpremdatabase1-svc-attachment --region=$region -q

gcloud compute forwarding-rules delete producer-hybrid-neg-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-firewall-policies rules delete 2001 --firewall-policy looker-psc-demo-policy --global-firewall-policy -q

gcloud compute network-firewall-policies associations delete --firewall-policy=looker-psc-demo-policy  --name=looker-psc-demo --global-firewall-policy -q

gcloud compute network-firewall-policies delete looker-psc-demo-policy --global -q

gcloud compute routers nats delete on-prem-nat --router=on-prem-cr --router-region=$region -q

gcloud compute network-endpoint-groups delete on-prem-hybrid-neg --zone=$zone -q

gcloud compute addresses delete hybrid-neg-lb-ip --region=$region -q

gcloud compute vpn-tunnels delete looker-psc-demo-tunnel0 looker-psc-demo-tunnel1 on-prem-tunnel0 on-prem-tunnel1 --region=$region -q

gcloud compute vpn-gateways delete looker-psc-demo-vpn-gw on-prem-vpn-gw --region=$region -q

gcloud compute routers delete looker-psc-demo-cr on-prem-cr --region=$region -q

gcloud compute instances delete postgres-database --zone=$zone -q

gcloud compute addresses delete on-prem-database1-ip --region=$region -q

gcloud compute networks subnets delete database-subnet --region=$region -q

gcloud compute network-firewall-policies rules delete 2001 --firewall-policy on-prem-demo-policy --global-firewall-policy -q

gcloud compute network-firewall-policies rules delete 1000 --firewall-policy on-prem-demo-policy --global-firewall-policy -q

gcloud compute network-firewall-policies associations delete --firewall-policy=on-prem-demo-policy  --name=on-prem-demo --global-firewall-policy -q

gcloud compute networks subnets delete $region-proxy-only-subnet --region=$region -q

gcloud compute networks subnets delete producer-psc-nat-subnet --region=$region -q

gcloud compute networks subnets delete producer-psc-fr-subnet --region=$region -q

gcloud compute networks delete on-prem-demo -q

gcloud compute networks delete looker-psc-demo -q

16. 完了

これで、Private Service Connect を活用した Looker Console を使用して、HA-VPN を介したオンプレミス データベースへの接続を正常に構成し、検証できました。

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

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

c911c127bffdee57.jpeg

次のステップ

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

参考資料と動画

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