실습: NCC PSC 전파

1. 소개

개요

이 실습에서는 Network Connectivity Center의 허브가 Private Service Connect 엔드포인트를 VPC 스포크에 전파하는 방법을 살펴봅니다.

허브 리소스는 VPC 스포크 트래픽을 PSC 엔드포인트에 상호 연결하는 중앙 집중식 연결 관리 모델을 제공합니다.

빌드할 항목

이 Codelab에서는 비공개 서비스 연결 엔드포인트를 Cloud SQL 인스턴스에 전파하는 NCC 네트워크를 빌드합니다.

74bf390e323ea3bb.png

학습할 내용

  • Private Service Connect를 사용하여 Cloud SQL 인스턴스에 연결
  • NCC 허브를 사용하여 PSC 서브넷을 모든 VPC 스포크에 전파하여 여러 VPC 네트워크의 네트워크 연결을 허용합니다.

필요한 항목

  • GCP Cloud Networking에 대한 지식
  • Cloud SQL 관련 기본 지식
  • Google Cloud 프로젝트
  • 할당량:네트워크를 확인하고 필요한 경우 추가 네트워크를 요청합니다(아래 스크린샷 참고).

6bc606cb34bce7e8.png

목표

  • GCP 환경 설정
  • Private Service Connect로 MySQL용 Cloud SQL 인스턴스 설정
  • PSC 엔드포인트를 전파하도록 Network Connectivity Center 허브 구성
  • VPC를 스포크로 사용하여 Network Connectivity Center 구성
  • 데이터 경로 유효성 검사
  • NCC 서비스 가능성 기능 살펴보기
  • 리소스 삭제

시작하기 전에

Google Cloud 콘솔 및 Cloud Shell

GCP와 상호작용하기 위해 이 실습에서는 Google Cloud 콘솔과 Cloud Shell을 모두 사용합니다.

NCC 허브 프로젝트 Google Cloud 콘솔

Cloud 콘솔은 https://console.cloud.google.com에서 확인할 수 있습니다.

Network Connectivity Center를 더 쉽게 구성할 수 있도록 Google Cloud에서 다음 항목을 설정합니다.

Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

Cloud Shell을 실행합니다. 이 Codelab에서는 $variables를 사용하여 Cloud Shell에서 gcloud 구성을 구현합니다.

gcloud auth list
gcloud config list project
gcloud config set project $project
project=[YOUR-PROJECT-NAME]
echo $project

IAM 역할

NCC에서는 특정 API에 액세스하려면 IAM 역할이 필요합니다. 필요한 경우 NCC IAM 역할로 사용자를 구성해야 합니다.

역할/설명

권한

networkconnectivity.networkAdmin: 네트워크 관리자가 허브 및 스포크를 관리할 수 있습니다.

networkconnectivity.hubs.networkconnectivity.spokes.

networkconnectivity.networkSpokeManager: 허브에서 스포크를 추가하고 관리할 수 있습니다. 호스트 프로젝트가 허브를 소유하지만 다른 프로젝트의 다른 관리자가 허브에 연결된 스포크를 추가할 수 있는 공유 VPC에서 사용합니다.

networkconnectivity.spokes.**

networkconnectivity.networkUsernetworkconnectivity.networkViewer: 네트워크 사용자가 허브 및 스포크의 다양한 속성을 볼 수 있습니다.

networkconnectivity.hubs.getnetworkconnectivity.hubs.listnetworkconnectivity.spokes.getnetworkconnectivity.spokes.listnetworkconnectivity.spokes.aggregatedList

2. 네트워크 환경 설정

개요

이 섹션에서는 단일 프로젝트에 두 개의 VPC 네트워크와 방화벽 규칙을 배포합니다. 논리 다이어그램은 이 단계에서 설정할 네트워크 환경을 보여줍니다.

8884a55988881e17.png

VPC1 및 서브넷 만들기

VPC 네트워크에는 데이터 경로 유효성 검사를 위해 GCE VM을 설치할 서브넷이 포함되어 있습니다.

vpc_spoke_network_name="vpc1-spoke"
vpc_spoke_subnet_name="subnet1"
vpc_spoke_subnet_ip_range="10.0.1.0/24"
region="us-central1"
zone="us-central1-a"

gcloud compute networks create "${vpc_spoke_network_name}" \
--subnet-mode=custom \

gcloud compute networks subnets create "${vpc_spoke_subnet_name}" \
--network="${vpc_spoke_network_name}" \
--range="${vpc_spoke_subnet_ip_range}" \
--region="${region}" 

VPC에 PSC 서브넷 만들기

아래 명령어를 사용하여 PSC-EP에 할당할 VPC 스포크의 서브넷을 만듭니다.

vpc_spoke_network_name="vpc1-spoke"
vpc_spoke_subnet_name="csql-psc-subnet"
region="us-central1"
vpc_spoke_subnet_ip_range="192.168.0.0/24"

gcloud compute networks subnets create "${vpc_spoke_subnet_name}" \
--network="${vpc_spoke_network_name}" \
--range="${vpc_spoke_subnet_ip_range}" \
--region="${region}" 

VPC3 및 서브넷 만들기

vpc_spoke_network_name="vpc3-spoke"
vpc_spoke_subnet_name="subnet3"
vpc_spoke_subnet_ip_range="10.0.3.0/24"
region="us-central1"
zone="us-central1-a"

gcloud compute networks create "${vpc_spoke_network_name}" \
--subnet-mode=custom \

gcloud compute networks subnets create "${vpc_spoke_subnet_name}" \
--network="${vpc_spoke_network_name}" \
--range="${vpc_spoke_subnet_ip_range}" \
--region="${region}"

VPC1의 방화벽 규칙 구성

이 규칙은 RFC1918 및 Identity Access Proxy 범위의 네트워크 연결을 허용합니다.

vpc_spoke_network_name="vpc1-spoke"

gcloud compute firewall-rules create vpc1-allow-all \
--network="${vpc_spoke_network_name}" \
--allow=all \
--source-ranges=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16

gcloud compute firewall-rules create vpc1-allow-iap \
--network="${vpc_spoke_network_name}" \
--allow all \
--source-ranges 35.235.240.0/20

라우팅 VPC 및 VPC 방화벽 규칙 구성

vpc_spoke_network_name="vpc3-spoke"

gcloud compute firewall-rules create vpc3-allow-all \
--network="${vpc_spoke_network_name}" \
--allow=all \
--source-ranges=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16

gcloud compute firewall-rules create vpc3-allow-iap \
--network="${vpc_spoke_network_name}" \
--allow all \
--source-ranges 35.235.240.0/20

VPC1에서 GCE VM 구성

패키지를 설치하려면 임시 인터넷 액세스가 필요하므로 외부 IP 주소를 사용하도록 인스턴스를 구성합니다.

vm_vpc1_spoke_name="csql-vpc1-vm"
vpc_spoke_network_name="vpc1-spoke"
vpc_spoke_subnet_name="subnet1"
region="us-central1"
zone="us-central1-a"

gcloud compute instances create "${vm_vpc1_spoke_name}" \
--machine-type="e2-medium" \
--subnet="${vpc_spoke_subnet_name}" \
--zone="${zone}" \
--image-family=debian-11 \
--image-project=debian-cloud \
--metadata=startup-script='#!/bin/bash
sudo apt-get update
sudo apt-get install -y default-mysql-client'

VPC3에서 GCE VM 구성

패키지를 설치하려면 임시 인터넷 액세스가 필요하므로 외부 IP 주소를 사용하도록 인스턴스를 구성합니다.

vm_vpc_spoke_name="csql-vpc3-vm"
vpc_spoke_network_name="vpc3-spoke"
vpc_spoke_subnet_name="subnet3"
region="us-central1"
zone="us-central1-a"

gcloud compute instances create "${vm_vpc_spoke_name}" \
--machine-type="e2-medium" \
--subnet="${vpc_spoke_subnet_name}" \
--zone="${zone}" \
--image-family=debian-11 \
--image-project=debian-cloud \
--metadata=startup-script='#!/bin/bash
sudo apt-get update
sudo apt-get install -y default-mysql-client'

3. Cloud SQL 인스턴스 만들기

아래 명령어를 사용하여 인스턴스를 만들고 Private Service Connect를 사용 설정합니다 .

몇 분 정도 걸릴 수 있습니다.

gcloud config set project ${project}

gcloud sql instances create mysql-instance \
--project="${project}" \
--region=us-central1 \
--enable-private-service-connect \
--allowed-psc-projects="${project}" \
--availability-type=zonal \
--no-assign-ip \
--tier=db-f1-micro \
--database-version=MYSQL_8_0 \
--enable-bin-log

Cloud SQL 인스턴스의 서비스 연결 URI 식별

gcloud sql instances describe 명령어를 사용하여 Private Service Connect가 사용 설정된 인스턴스에 대한 정보를 확인합니다. 인스턴스의 서비스 연결을 가리키는 URI를 표시하는 pscServiceAttachmentLink 필드를 확인합니다. 다음 섹션에서 이 정보가 필요합니다.

gcloud sql instances describe mysql-instance \
--format='value(pscServiceAttachmentLink)'

4. Cloud SQL의 PSC 엔드포인트

PSC 엔드포인트의 내부 IP 주소 예약

아래 명령어를 사용하여 Private Service Connect 엔드포인트의 내부 IP 주소를 예약합니다.

region="us-central1"
vpc_spoke_subnet_name="csql-psc-subnet"

gcloud compute addresses create csql-psc-ip \
--subnet="${vpc_spoke_subnet_name}" \
--region="${region}" \
--addresses=192.168.0.253

예약된 IP 주소와 연결된 이름을 조회합니다. 전달 규칙 구성에 사용됩니다.

gcloud compute addresses list \
--filter="name=csql-psc-ip"

VPC1에서 Private Service Connect 전달 규칙 만들기

아래 명령어를 사용하여 Private Service Connect 엔드포인트를 만들고 Cloud SQL 서비스 연결을 가리킵니다.

vpc_spoke_network_name="vpc1-spoke"
vpc_spoke_subnet_name="csql-psc-subnet"
region="us-central1"
csql_psc_ep_name="csql-psc-ep"
sa_uri=$(gcloud sql instances describe mysql-instance \
  --format='value(pscServiceAttachmentLink)')
echo "$sa_uri"

gcloud compute forwarding-rules create "${csql_psc_ep_name}" \
--address=csql-psc-ip \
--region="${region}" \
--network="${vpc_spoke_network_name}" \
--target-service-attachment="${sa_uri}" \
--allow-psc-global-access

아래 명령어를 사용하여 cSQL 서비스 연결에서 엔드포인트를 수락하는지 확인합니다.

gcloud compute forwarding-rules describe csql-psc-ep \
--region=us-central1 \
--format='value(pscConnectionStatus)'

VPC1에서 MySQL로의 데이터 경로 확인

새 Cloud SQL 인스턴스를 만들 때 인스턴스에 연결하기 전에 기본 사용자 계정의 비밀번호를 설정해야 합니다.

gcloud sql users set-password root \
--host=% \
--instance=mysql-instance \
--prompt-for-password

아래 명령어를 사용하여 Cloud SQL의 서비스 연결에 연결된 PSC 엔드포인트의 IP 주소를 찾습니다.

gcloud compute addresses describe csql-psc-ip \
--region=us-central1 \
--format='value(address)'

VPC1의 VM에서 Cloud SQL 인스턴스에 연결

csql-vpc1-vm에 대한 SSH 세션 열기

gcloud compute ssh csql-vpc1-vm \
--zone=us-central1-a \
--tunnel-through-iap

아래 명령어를 사용하여 Cloud SQL 인스턴스에 연결합니다. 메시지가 표시되면 위 단계에서 만든 비밀번호를 입력합니다.

mysql -h 192.168.0.253 -u root -p 

로그인이 완료되면 아래 출력이 표시됩니다.

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 8350
Server version: 8.0.31-google (Google)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> 

show databases 명령어를 사용하여 MySQL에 기본적으로 생성된 데이터베이스를 확인합니다.

MySQL [(none)]> show databases;

VPC3의 VM에서 Cloud SQL 인스턴스에 연결

csql-vpc3-vm에 대한 SSH 세션을 엽니다.

gcloud compute ssh csql-vpc3-vm \
--zone=us-central1-a \
--tunnel-through-iap

아래 명령어를 사용하여 Cloud SQL 인스턴스에 연결합니다. 메시지가 표시되면 위 단계에서 만든 비밀번호를 입력합니다.

mysql -h 192.168.0.253 -u root -p 

VPC3에서 Private Service Connect 엔드포인트로의 데이터 패스가 없으므로 VPC3에 있는 VM의 세션이 실패합니다. 키 입력을 사용하여 세션을 종료합니다.

Ctrl + C

5. Network Connectivity Center 허브

개요

이 섹션에서는 gcloud 명령어를 사용하여 NCC 허브를 구성합니다. NCC 허브는 VPC 스포크에서 Private Service Connect 엔드포인트로의 데이터 패스를 빌드하는 제어 영역 역할을 합니다.

b615efa4bad5f86.png

API 서비스 사용 설정

Network Connectivity API가 아직 사용 설정되지 않은 경우 다음과 같이 사용 설정합니다.

gcloud services enable networkconnectivity.googleapis.com

NCC 허브 만들기

아래 gcloud 명령어를 사용하여 NCC 허브를 만듭니다. '–export-psc' 플래그는 NCC 허브에 알려진 PSC 엔드포인트를 모든 VPC 스포크에 전파하도록 지시합니다.

hub_name="ncc-hub"
gcloud network-connectivity hubs create "${hub_name}" \
--export-psc

새로 만든 NCC 허브를 설명합니다. 이름과 연결된 경로를 기록해 둡니다.

gcloud network-connectivity hubs describe ncc-hub

VPC1을 NCC 스포크로 구성합니다.

hub_name="ncc-hub"
vpc_spoke_name="sql-vpc1-spoke"
vpc_spoke_network_name="vpc1-spoke"

gcloud network-connectivity spokes linked-vpc-network create "${vpc_spoke_name}" \
--hub="${hub_name}" \
--vpc-network="${vpc_spoke_network_name}" \
--global

VPC3를 NCC 스포크로 구성

hub_name="ncc-hub"
vpc_spoke_name="sql-vpc3-spoke"
vpc_spoke_network_name="vpc3-spoke"

gcloud network-connectivity spokes linked-vpc-network create "${vpc_spoke_name}" \
--hub="${hub_name}" \
--vpc-network="${vpc_spoke_network_name}" \
--global

아래 명령어를 사용하여 NCC 허브의 라우트 테이블에서 PSC 서브넷으로의 경로를 확인합니다.

gcloud network-connectivity hubs route-tables routes list \
--route_table=default \
--hub=ncc-hub

6. NCC 데이터 경로 확인

이 단계에서는 NCC 하이브리드와 VPC 스포크 간의 데이터 경로를 검증합니다.

Cloud SQL 인스턴스 PSC 엔드포인트로 구성된 NCC 데이터 패스를 확인합니다.

이러한 gcloud 명령어의 출력을 사용하여 온프레미스 VM에 로그인합니다.

 gcloud compute instances list --filter="name=csql-vpc3-vm" 

온프레미스 네트워크에 있는 VM 인스턴스에 로그온합니다.

gcloud compute ssh csql-vpc3-vm \
--zone=us-central1-a \
--tunnel-through-iap

아래 mysql 명령어를 사용하여 Cloud SQL 인스턴스에 연결합니다. 메시지가 표시되면 위 단계에서 만든 비밀번호를 입력합니다.

mysql -h 192.168.0.253 -u root -p 

로그인이 완료되면 아래 출력이 표시됩니다.

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 8501
Server version: 8.0.31-google (Google)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.005 sec)

show databases 명령어를 사용하여 MySql에 기본적으로 생성된 데이터베이스를 확인합니다.

MySQL [(none)]> show databases;

7. 삭제

Cloud Shell에 로그인하고 GCP 리소스를 삭제합니다.

Cloud Sql PSC 엔드포인트 삭제

gcloud compute forwarding-rules delete csql-psc-ep \
--region=us-central1 \
--quiet

gcloud compute addresses delete csql-psc-ip \
--region=us-central1 \
--quiet

gcloud compute networks subnets delete csql-psc-subnet \
--region=us-central1 \
--quiet

Cloud SQL 인스턴스 삭제

gcloud sql instances delete mysql-instance --quiet

방화벽 규칙 삭제

vpc_spoke_network_name="vpc3-spoke"

gcloud compute firewall-rules delete vpc3-allow-all \ --network="${vpc_spoke_network_name}" 
gcloud compute firewall-rules delete vpc3-allow-iap \ --network="${vpc_spoke_network_name}"
vpc_spoke_network_name="vpc1-spoke"

gcloud compute firewall-rules delete vpc1-allow-all \ --network="${vpc_spoke_network_name}"
gcloud compute firewall-rules delete vpc1-allow-iap \ --network="${vpc_spoke_network_name}"

VPC1 및 VPC3의 GCE 인스턴스 삭제

vm_vpc1_spoke_name="csql-vpc1-vm"
zone="us-central1-a"
gcloud compute instances delete "${vm_vpc1_spoke_name}" \
--zone="${zone}" \
--quiet


vm_vpc_spoke_name="csql-vpc3-vm"
zone="us-central1-a"
gcloud compute instances delete "${vm_vpc_spoke_name}" \
--zone="${zone}" --quiet

NCC 스포크 삭제

vpc_spoke_name="sql-vpc1-spoke"
gcloud network-connectivity spokes delete "${vpc_spoke_name}" \
--global \  
--quiet
vpc_spoke_name="sql-vpc3-spoke"
gcloud network-connectivity spokes delete "${vpc_spoke_name}" \
--global \  
--quiet

NCC 허브 삭제

hub_name="ncc-hub"
gcloud network-connectivity hubs delete "${hub_name}" \
  --project=${project}

모든 VPC의 서브넷 삭제

vpc_spoke_subnet_name="csql-psc-subnet"
region="us-central1"

gcloud compute networks subnets delete "${vpc_spoke_subnet_name}" \ 
--region="${region}" \
--quiet
vpc_spoke_subnet_name="subnet1"
region="us-central1"

gcloud compute networks subnets delete "${vpc_spoke_subnet_name}" \ 
--region="${region}" \
--quiet
vpc_spoke_subnet_name="subnet3"
region="us-central1"

gcloud compute networks subnets delete "${vpc_spoke_subnet_name}" \ 
--region="${region}" \
--quiet

VPC1 및 VPC3 삭제

gcloud compute networks delete vpc1-spoke vpc3-spoke 

8. 축하합니다.

Network Connectivity Center를 사용한 Private Service Connect 전파 실습을 완료했습니다.

학습한 내용

  • Network Connectivity Center를 통한 Private Service Connect 엔드포인트 전파

다음 단계