Looker PSC 남방 하이브리드 NEG - 온프레미스

1. 소개

이 Codelab에서는 Looker PSC에서 서비스 소비자로 호출된 내부 TCP 프록시 부하 분산기와 하이브리드 네트워크 엔드포인트 그룹을 사용하여 H-VPN을 통해 온프레미스 Postgres 데이터베이스에 대한 Southbound 연결을 실행합니다.

Private Service Connect는 소비자가 VPC 네트워크 내부에서 비공개로 관리형 서비스에 액세스할 수 있도록 허용하는 Google Cloud Networking 기능입니다. 마찬가지로 이를 이용해 관리형 서비스 프로듀서는 이러한 서비스를 별도의 개별 VPC 네트워크에서 호스팅하고 소비자에게 비공개 연결을 제공할 수 있습니다. 예를 들어 Private Service Connect를 사용하여 Looker에 액세스하는 경우 사용자는 서비스 소비자이고 Google은 서비스 프로듀서입니다(그림 1 참고).

그림 1.

145ea4672c3a3b14.png

사우스바운드 액세스(역 PSC라고도 함)를 사용하면 소비자가 게시된 서비스를 프로듀서로 만들어 Looker가 VPC의 온프레미스 엔드포인트, 관리형 서비스, 하이브리드에 액세스할 수 있도록 할 수 있습니다. 그림 2와 같이 Looker PSC가 배포된 위치와 관계없이 모든 리전에 southbound 연결을 배포할 수 있습니다.

그림 2.

259493afd914f68b.png

학습할 내용

  • 네트워크 요구사항
  • Private Service Connect 프로듀서 서비스 만들기
  • Looker에서 Private Service Connect 엔드포인트 만들기
  • 테스트 연결을 사용하여 Looker에서 온프레미스 Postgres 데이터베이스에 대한 연결 설정

필요한 항목

def88091b42bfe4d.png

2. 빌드할 항목

Private Service Connect (PSC)를 통해 서비스로 게시된 내부 TCP 프록시 부하 분산기와 하이브리드 NEG를 배포하기 위해 제작자 네트워크인 looker-psc-demo를 설정합니다. 온프레미스 데이터베이스를 보여주기 위해 HA-VPN을 사용하여 looker-psc-demo VPC에 연결된 on-prem-demo VPC를 배포합니다.

제작자 서비스에 대한 액세스 권한을 확인하기 위해 다음 작업을 실행합니다.

  • Looker에서 제작자 서비스 연결과 연결된 PSC 엔드포인트 만들기
  • 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 및 on-prem-demo VPC 간에 HA-VPN을 설정하기 위해 설정된 BGP에 사용됩니다.

HA-VPN

Google Cloud VPC 네트워크 간 HA VPN 이 토폴로지에서는 각 네트워크에서 HA VPN 게이트웨이를 사용하여 Google Cloud VPC 네트워크 2개를 연결할 수 있습니다. 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를 생성할 수 있습니다. 또는 직접 시도해 보고 사용 가능한지 확인할 수도 있습니다. 이 단계 이후에는 변경할 수 없으며 프로젝트 기간 동안 유지됩니다.
  • 참고로 세 번째 값은 일부 API에서 사용하는 프로젝트 번호입니다. 이 세 가지 값에 대한 자세한 내용은 문서를 참고하세요.
  1. 다음으로 Cloud 리소스/API를 사용하려면 Cloud 콘솔에서 결제를 사용 설정해야 합니다. 이 Codelab 실행에는 많은 비용이 들지 않습니다. 이 튜토리얼이 끝난 후에 요금이 청구되지 않도록 리소스를 종료하려면 만든 리소스 또는 프로젝트를 삭제하면 됩니다. Google Cloud 신규 사용자는 300달러(USD) 상당의 무료 체험판 프로그램에 참여할 수 있습니다.

Cloud Shell 시작

Google Cloud를 노트북에서 원격으로 실행할 수 있지만, 이 Codelab에서는 Cloud에서 실행되는 명령줄 환경인 Google Cloud Shell을 사용합니다.

Google Cloud Console의 오른쪽 상단 툴바에 있는 Cloud Shell 아이콘을 클릭합니다.

55efc1aaa7a4d3ad.png

환경을 프로비저닝하고 연결하는 데 몇 분 정도 소요됩니다. 완료되면 다음과 같이 표시됩니다.

7ffe5cbb04455448.png

가상 머신에는 필요한 개발 도구가 모두 들어있습니다. 영구적인 5GB 홈 디렉터리를 제공하고 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에서 하이브리드 NEG를 온프레미스 데이터베이스의 IP:포트(192.168.10.4 및 포트 5432)로 업데이트합니다. 이 IP:포트는 튜토리얼의 후반 단계에서 생성됩니다.

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에서 서비스 연결 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에 나열된 서비스 연결을 가져와 메모합니다.

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에서 단일 도메인에 대해 –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-database 인스턴스를 만듭니다.

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. 하이브리드 연결

다음 섹션에서는 경계 게이트웨이 프로토콜 (BGP)을 사용하여 Virtual Private Cloud (VPC)와 피어 네트워크 간에 경로를 동적으로 교환할 수 있는 Cloud Router를 만듭니다.

Cloud Router는 Cloud VPN 터널을 통해 BGP 세션을 설정하여 네트워크를 연결할 수 있습니다. Cloud Router는 새 서브넷 IP 주소 범위를 자동으로 학습하여 피어 네트워크에 알립니다.

다음 단계에서는 looker-psc-demo VPC와 on-prem-demo VPC 간에 HA VPN을 배포하여 onprem.database1.com에 대한 하이브리드 NEG 연결을 보여줍니다.

looker-psc-demo의 HA VPN GW를 만듭니다.

각 게이트웨이가 생성되면 게이트웨이 인터페이스마다 외부 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 만들기

각 게이트웨이가 생성되면 게이트웨이 인터페이스마다 외부 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 게이트웨이에 VPN 터널 2개를 만듭니다.

VPN 터널0 만들기

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 터널1 만들기

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 게이트웨이에 VPN 터널 2개를 만듭니다.

VPN 터널0 만들기

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 터널1 만들기

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 → ROUTES → REGION → VIEW로 이동합니다.

looker-psc-demo가 on-prem-demo VPC에서 database-subnet 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에서 proxy-only-subnet 10.10.10.0/24를 학습한 것을 확인합니다.

콘솔을 사용하여 VPC 네트워크 → VPC 네트워크 → on-prem-demo → ROUTES → REGION → VIEW로 이동합니다.

b0073faed026931f.png

12. Looker postgres-database 생성

다음 섹션에서는 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로 설정합니다 (동일한 비밀번호를 두 번 입력).

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-database 인스턴스 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-database 인스턴스에 대한 데이터베이스 연결을 만듭니다.

관리 → 데이터베이스 → 연결 → 연결 추가를 선택합니다.

아래 스크린샷에 따라 연결 세부정보를 입력하고 연결을 선택합니다.

5900fdf0b698cbfc.png

이제 연결이 구성되었습니다.

4817157fd3b1277e.png

15. Looker 연결 유효성 검사

다음 섹션에서는 Looker 'test' 작업과 TCPDUMP를 사용하여 온프레미스 VPC의 postgres 데이터베이스에 대한 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로 이동합니다.

'테스트'를 선택하면 Looker가 아래와 같이 postgres-database에 연결됩니다.

774f9313ece41034.png

삭제

단일 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 엔드포인트를 만드는 방법을 알아봤습니다.

코스모퍼프는 Codelab이 멋지다고 생각합니다.

c911c127bffdee57.jpeg

다음 단계

다음 Codelab을 확인하세요.

추가 리소스 및 동영상

참조 문서