실습: 스포크로서의 NCC VPC

1. 소개

개요

이 실습에서는 Network Connectivity Center(NCC)를 사용하여 VPC 스포크를 지원하여 VPC 간 연결을 대규모로 설정하는 방법을 살펴봅니다. 사용자가 VPC를 VPC 스포크로 정의하면 NCC 허브를 통해 여러 VPC 네트워크에 함께 연결할 수 있습니다. VPC 스포크 구성을 사용하는 NCC는 중앙 집중식 연결 관리 모델을 사용하는 대신 VPC 피어링을 통해 쌍별 VPC 간 연결을 관리하는 데 따른 운영 복잡성을 줄입니다.

Network Connectivity Center (NCC)는 Google Cloud의 네트워크 연결 관리를 위한 허브 및 스포크 컨트롤 플레인 모델입니다. 허브 리소스는 스포크를 상호 연결하는 중앙 집중식 연결 관리 모델을 제공합니다.

빌드할 항목

이 Codelab에서는 세 개의 서로 다른 VPC에 걸쳐 풀 메시 VPC 연결 패브릭을 구현하는 NCC 허브를 사용하여 논리적 허브 및 스포크 토폴로지를 빌드합니다.

학습할 내용

  • NCC를 통한 풀 메시 VPC 연결
  • VPC 간 Private NAT

필요한 항목

  • GCP VPC 네트워크에 대한 지식
  • Cloud Router 및 BGP 라우팅에 대한 지식
  • 별도의 두 GCP 프로젝트
  • 이 Codelab에는 VPC 5개가 필요합니다. 이러한 VPC 중 하나는 NCC 허브와 다른 프로젝트에 있어야 합니다.
  • 할당량:네트워크를 확인하고 필요한 경우 추가 네트워크를 요청합니다(아래 스크린샷 참고).

6d1b99c6da87fd84.png

목표

  • GCP 환경 설정
  • 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 [HUB-PROJECT-NAME]
projectname=[HUB-PROJECT-NAME]
echo $projectname
gcloud config set compute/zone us-central1-a
gcloud config set compute/region us-central1

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 네트워크와 방화벽 규칙을 배포합니다. 논리 다이어그램은 이 단계에서 설정할 네트워크 환경을 보여줍니다.

교차 프로젝트 스포크 지원을 보여주기 위해 이후 단계에서 다른 프로젝트에 VPC 및 방화벽 규칙을 배포합니다.

245f1002db33ca98.png

VPC 및 서브넷 만들기

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

gcloud compute networks create vpc1-ncc --subnet-mode custom
gcloud compute networks create vpc2-ncc --subnet-mode custom
gcloud compute networks create vpc3-ncc --subnet-mode custom
gcloud compute networks create vpc4-ncc --subnet-mode custom

gcloud compute networks subnets create vpc1-ncc-subnet1 \
--network vpc1-ncc --range 10.1.1.0/24 --region us-central1

gcloud compute networks subnets create vpc1-ncc-subnet2 \
--network vpc1-ncc --range 10.1.2.0/25 --region us-central1

gcloud compute networks subnets create vpc1-ncc-subnet3 \
--network vpc1-ncc --range 10.1.2.128/25 --region us-central1

gcloud compute networks subnets create vpc2-ncc-subnet1 \
--network vpc2-ncc --range 10.2.2.0/24 --region us-central1

VPC 지원 서브넷 범위

NCC는 비공개로 사용되는 공개 IP 주소를 제외한 모든 유효한 IPv4 서브넷 범위를 지원합니다. 이 단계에서는 허브 경로 테이블로 가져올 유효한 IP 범위를 VPC4에 만듭니다.

gcloud compute networks subnets create benchmark-testing-rfc2544 \
--network vpc4-ncc --range 198.18.0.0/15 --region us-east1

gcloud compute networks subnets create class-e-rfc5735 \
--network vpc4-ncc --range 240.0.0.0/4 --region us-east1

gcloud compute networks subnets create ietf-protcol-assignment-rfc6890 \
--network vpc4-ncc --range 192.0.0.0/24 --region us-east1

gcloud compute networks subnets create ipv6-4-relay-rfc7526 \
--network vpc4-ncc --range 192.88.99.0/24 --region us-east1

gcloud compute networks subnets create pupi \
--network vpc4-ncc --range 50.50.50.0/24 --region us-east1

gcloud compute networks subnets create test-net-1-rfc5737 \
--network vpc4-ncc --range 192.0.2.0/24 --region us-east1

gcloud compute networks subnets create test-net-2-rfc5737 \
--network vpc4-ncc --range 198.51.100.0/24 --region us-east1

gcloud compute networks subnets create test-net-3-rfc5737 \
--network vpc4-ncc --range 203.0.113.0/24 --region us-east1

겹치는 서브넷 범위 만들기

NCC는 겹치는 IP 범위를 허브 경로 테이블로 가져오지 않습니다. 사용자는 이후 단계에서 이 제한사항을 해결합니다. 지금은 VPC2와 VPC3에 겹치는 IP 범위 2개를 만듭니다.

gcloud compute networks subnets create overlapping-vpc2 \
--network vpc3-ncc --range 10.3.3.0/24 --region us-central1

gcloud compute networks subnets create overlapping-vpc3 \
--network vpc2-ncc --range 10.3.3.0/24 --region us-central1

VPC 방화벽 규칙 구성

다음을 허용하도록 각 VPC에서 방화벽 규칙을 구성합니다.

  • SSH
  • 내부 IAP
  • 10.0.0.0/8 범위
gcloud compute firewall-rules create ncc1-vpc-internal \
--network vpc1-ncc \
--allow all \
--source-ranges 10.0.0.0/8

gcloud compute firewall-rules create ncc2-vpc-internal \
--network vpc2-ncc \
--allow all \
--source-ranges 10.0.0.0/8

gcloud compute firewall-rules create ncc3-vpc-internal \
--network vpc3-ncc \
--allow all \
--source-ranges 10.0.0.0/8

gcloud compute firewall-rules create ncc4-vpc-internal \
--network vpc4-ncc \
--allow all \
--source-ranges 10.0.0.0/8

gcloud compute firewall-rules create ncc1-vpc-iap \
--network vpc1-ncc \
--allow all \
--source-ranges 35.235.240.0/20

gcloud compute firewall-rules create ncc2-vpc-iap \
--network vpc2-ncc \
--allow=tcp:22 \
--source-ranges 35.235.240.0/20

gcloud compute firewall-rules create ncc3-vpc-iap \
--network vpc3-ncc \
--allow=tcp:22  \
--source-ranges 35.235.240.0/20

gcloud compute firewall-rules create ncc4-vpc-iap \
--network vpc4-ncc \
--allow=tcp:22  \
--source-ranges 35.235.240.0/20

각 VPC에서 GCE VM 구성하기

'vm1-vpc1-ncc'에 패키지를 설치하려면 임시 인터넷 액세스가 필요합니다.

가상 머신 4개를 만듭니다. 각 VM은 이전에 만든 VPC 중 하나에 할당됩니다.

gcloud compute instances create vm1-vpc1-ncc \
--subnet vpc1-ncc-subnet1 \
--metadata=startup-script='#!/bin/bash
  apt-get update
  apt-get install apache2 -y
  apt-get install tcpdump -y
  service apache2 restart
  echo "
<h3>Web Server: www-vm1</h3>" | tee /var/www/html/index.html'


gcloud compute instances create vm2-vpc2-ncc \
--zone us-central1-a \
--subnet vpc2-ncc-subnet1 \
--no-address 

gcloud compute instances create pnat-vm-vpc2 \
--zone us-central1-a \
--subnet overlapping-vpc3 \
--no-address 


gcloud compute instances create vm1-vpc4-ncc \
--zone us-east1-b \
--subnet class-e-rfc5735 \
--no-address

3. Network Connectivity Center 허브

개요

이 섹션에서는 gcloud 명령어를 사용하여 NCC 허브를 구성합니다. NCC 허브는 각 VPC 스포크 간의 라우팅 구성을 빌드하는 제어 영역 역할을 합니다.

8acc7651f52e251e.png

API 서비스 사용 설정

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

gcloud services enable networkconnectivity.googleapis.com

NCC 허브 만들기

gcloud 명령어를 사용하여 NCC 허브 만들기

gcloud network-connectivity hubs create ncc-hub

출력 예

Create request issued for: [ncc-hub]
Waiting for operation [projects/user-3p-dev/locations/global/operations/operation-1668793629598-5edc24b7ee3ce-dd4c765b-5ca79556] to complete...done.     
Created hub [ncc-hub]

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

gcloud network-connectivity hubs describe ncc-hub
gcloud network-connectivity hubs describe ncc-hub
createTime: '2023-11-02T02:28:34.890423230Z'
name: projects/user-3p-dev/locations/global/hubs/ncc-hub
routeTables:
- projects/user-3p-dev/locations/global/hubs/ncc-hub/routeTables/default
state: ACTIVE
uniqueId: de749c4c-0ef8-4888-8622-1ea2d67450f8
updateTime: '2023-11-02T02:28:48.613853463Z'

NCC 허브는 데이터 연결을 위한 제어 영역을 정의하는 라우팅 테이블을 도입했습니다. NCC 허브의 라우팅 테이블 이름 찾기

 gcloud network-connectivity hubs route-tables list --hub=ncc-hub
NAME: default
HUB: ncc-hub
DESCRIPTION:

NCC 기본 경로 테이블의 URI를 찾습니다.

gcloud network-connectivity hubs route-tables describe default --hub=ncc-hub
createTime: '2023-02-24T17:32:58.786269098Z'
name: projects/user-3p-dev/locations/global/hubs/ncc-hub/routeTables/default
state: ACTIVE
uid: eb1fdc35-2209-46f3-a8d6-ad7245bfae0b
updateTime: '2023-02-24T17:33:01.852456186Z'

NCC 허브의 기본 라우팅 테이블 콘텐츠를 나열합니다. 참고* 스포크가 생성될 때까지 NCC 허브의 경로 테이블은 비어 있습니다.

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

NCC 허브의 경로 테이블은 비어 있어야 합니다.

4. VPC 스포크가 있는 NCC

개요

이 섹션에서는 gcloud 명령어를 사용하여 세 개의 VPC를 NCC 스포크로 구성합니다.

a70bc80037927bb0.png

VPC를 NCC 스포크로 구성

다음 VPC를 다음 순서대로 NCC Spoke로 구성합니다.

  • VPC4
  • VPC1
  • VPC2
  • VPC3

VPC4를 NCC 스포크로 구성하고 이전에 만든 NCC 허브에 할당합니다. NCC 스피커 API 호출에는 위치를 지정해야 합니다. '–global' 플래그는 사용자가 새 NCC 스포크를 구성할 때 전체 URI 경로를 지정하지 않아도 되도록 하여 gcloud 문법을 간소화합니다.

gcloud network-connectivity spokes linked-vpc-network create vpc4-spoke4 \
--hub=ncc-hub \
--vpc-network=vpc4-ncc \
--global

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

관리자는 VPC 스포크에서 NCC 허브의 경로 테이블로 서브넷 경로가 내보내지지 않도록 제외할 수 있습니다. 이 Codelab의 이 부분에서는 요약 접두사를 기반으로 제외 내보내기 규칙을 만들어 VPC1의 서브넷이 NCC 허브 경로 테이블로 내보내지 않도록 합니다.

이 gcloud 명령어를 사용하여 VPC1에 속한 모든 서브넷을 나열합니다.

gcloud config set accessibility/screen_reader false
gcloud compute networks subnets list --network=vpc1-ncc

이전에 설정 섹션에서 만든 /25 서브넷 쌍을 확인합니다.

NAME              REGION       NETWORK   RANGE          STACK_TYPE  
vpc1-ncc-subnet1  us-central1  vpc1-ncc  10.1.1.0/24    IPV4_ONLY
vpc1-ncc-subnet2  us-central1  vpc1-ncc  10.1.2.0/25    IPV4_ONLY
vpc1-ncc-subnet3  us-central1  vpc1-ncc  10.1.2.128/25  IPV4_ONLY

VPC1을 NCC 스포크로 구성하고 'export-exclude-ranges' 키워드를 사용하여 특정 범위에서 /24 요약 경로를 필터링하여 /25 서브넷 쌍이 허브 라우팅 테이블로 가져오는 것을 제외합니다.

gcloud network-connectivity spokes linked-vpc-network create vpc1-spoke1 \
--hub=ncc-hub \
--vpc-network=vpc1-ncc \
--exclude-export-ranges=10.1.2.0/24 \
--global 

참고* 사용자는 NCC 스포크당 최대 16개의 고유한 IP 범위를 필터링할 수 있습니다.

NCC 허브의 기본 라우팅 테이블 콘텐츠를 나열합니다. NCC 허브의 라우팅 테이블에 있는 /25 서브넷 쌍은 어떻게 되었나요?

gcloud network-connectivity hubs route-tables routes list --hub=ncc-hub --route_table=default --filter="NEXT_HOP:vpc1-ncc"
IP_CIDR_RANGE  STATE   TYPE                  NEXT_HOP  HUB      ROUTE_TABLE
10.1.1.0/24    ACTIVE  VPC_PRIMARY_SUBNET    vpc1-ncc  ncc-hub  default

VPC2를 NCC 스포크로 구성

gcloud network-connectivity spokes linked-vpc-network create vpc2-spoke2 \
--hub=ncc-hub \
--vpc-network=vpc2-ncc \
--global

VPC3를 NCC 스포크로 구성하고 이전에 만든 NCC 허브에 할당합니다.

gcloud  network-connectivity spokes linked-vpc-network create vpc3-spoke3 \
--hub=ncc-hub \
--vpc-network=vpc3-ncc \
--global

어떻게 된 것일까요?

ERROR: (gcloud.network-connectivity.spokes.linked-vpc-network.create) Invalid resource state for "https://www.googleapis.com/compute/v1/projects/xxxxxxxx/global/networks/vpc3-ncc": 10.3.3.0/24 (SUBNETWORK) overlaps with 10.3.3.0/24 (SUBNETWORK) from "projects/user-3p-dev/global/networks/vpc2-ncc" (peer)

NCC 허브에서 VPC2와 겹치는 IP 범위를 감지했습니다. VPC2와 VPC3은 모두 동일한 10.3.3.0/24 IP 서브넷으로 설정되었습니다.

내보내기 제외를 사용하여 중복되는 IP 범위 필터링

이 Codelab을 작성할 당시에는 사용자가 내보내기 필터의 구성을 변경하려면 NCC 스포크를 삭제하고 다시 만들어야 하는 것으로 알려진 문제가 있었습니다.

gcloud network-connectivity spokes delete vpc2-spoke2 --global --quiet

참고: 특정 VPC와 연결된 VPC 스포크를 삭제한 후 동일한 VPC를 참조하는 새 스포크를 다시 만들려면 10분의 대기 기간이 만료되어야 합니다.

gcloud  network-connectivity spokes linked-vpc-network create vpc2-spoke2 \
--hub=ncc-hub \
--vpc-network=vpc2-ncc \
--exclude-export-ranges=10.3.3.0/24 \
--global

VPC3를 NCC 스포크로 구성하고 이전에 만든 NCC 허브에 할당합니다. VPC3를 NCC에 스포크로 추가하려는 시도가 성공합니다.

gcloud network-connectivity spokes linked-vpc-network create vpc3-spoke3 \
--hub=ncc-hub \
--vpc-network=vpc3-ncc \
--exclude-export-ranges=10.3.3.0/24 \
--global

NCC 허브의 기본 라우팅 테이블의 콘텐츠를 나열하고 출력을 검사합니다.

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

VPC2와 VPC3의 겹치는 IP 범위는 제외됩니다. NCC 허브 라우팅 테이블은 비공개로 사용되는 공개 IP 주소 (PUPI)를 제외한 모든 유효한 IPv4 범위 유형을 지원합니다.

5. 프로젝트 간 스포크가 있는 NCC

개요

지금까지 허브와 동일한 프로젝트에 속하는 NCC 스포크를 구성했습니다. 이 섹션에서는 gcloud 명령어를 사용하여 NCC 허브가 아닌 별도의 프로젝트에서 VPC를 NCC 스포크로 구성합니다.

이를 통해 자체 VPC를 관리하는 프로젝트 소유자가 NCC 허브와의 네트워크 연결에 참여할 수 있습니다.

e1190fa898c5097d.png

교차 프로젝트: Google Cloud 콘솔 및 Cloud Shell

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

교차 프로젝트 스포크 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 [YOUR-CROSSPROJECT-NAME]
xprojname=[YOUR-CROSSPROJECT-NAME]
echo $xprojname
gcloud config set compute/zone us-central1-a
gcloud config set compute/region us-central1

IAM 역할

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

교차 프로젝트 스포크 관리자에게는 최소한 'networkconnectivity.networkSpokeManager' 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

교차 프로젝트에서 VPC 및 서브넷 만들기

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

gcloud compute networks create xproject-vpc \
--subnet-mode custom

gcloud compute networks subnets create xprj-net-1 \
--network xproject-vpc \
--range 10.100.1.0/24 \
--region us-central1

NCC 허브 프로젝트 URI

다음 gcloud 명령어를 사용하여 NCC 허브 URI를 찾습니다. 다음 단계에서 교차 프로젝트 NCC 스포크를 구성하려면 URI 경로가 필요합니다.

gcloud network-connectivity hubs describe ncc-hub

교차 프로젝트 스포크 VPC

VPC가 NCC 허브 프로젝트에 속하지 않는 다른 프로젝트에 로그인합니다. Cloud Shell에서 이 명령어를 사용하여 VPC를 NCC 스포크로 구성합니다.

  • HUB_URI는 다른 프로젝트의 허브 URI여야 합니다.
  • VPC_URI는 스포크와 동일한 프로젝트에 있어야 합니다.
  • VPC-network는 이 교차 프로젝트의 VPC가 다른 프로젝트의 NCC 허브에 참여할 것임을 지정합니다.
gcloud network-connectivity spokes linked-vpc-network create xproj-spoke \
--hub=projects/[YOUR-PROJECT-NAME]/locations/global/hubs/ncc-hub \
--global \
--vpc-network=xproject-vpc

.

Create request issued for: [xproj-spoke]
Waiting for operation [projects/xproject/locations/global/operations/operation-1689790411247-600dafd351158-2b862329-19b747f1] to complete...done.                           
Created spoke [xproj-spoke].
createTime: '2023-07-19T18:13:31.388500663Z'
hub: projects/[YOUR-PROJECT-NAME]/locations/global/hubs/ncc-hub
linkedVpcNetwork:
  uri: https://www.googleapis.com/compute/v1/projects/xproject/global/networks/xproject-vpc
name: projects/xproject/locations/global/spokes/xproj-spoke
reasons:
- code: PENDING_REVIEW
  message: Spoke is Pending Review
spokeType: VPC_NETWORK
state: INACTIVE
uniqueId: 46b4d091-89e2-4760-a15d-c244dcb7ad69
updateTime: '2023-07-19T18:13:38.652800902Z'

프로젝트 간 NCC 스포크의 상태는 무엇인가요? 왜냐하면

6. 교차 프로젝트 스포크 거부 또는 수락

개요

NCC 허브 관리자가 허브에 참여할 교차 프로젝트 스포크를 명시적으로 수락해야 합니다. 이렇게 하면 프로젝트 소유자가 NCC 글로벌 라우팅 테이블에 허위 NCC 스포크를 연결할 수 없습니다. 스포크가 수락되거나 거부된 후에는 위의 명령어를 실행하여 원하는 횟수만큼 거부하거나 수락할 수 있습니다.

Cloud Shell에 로그인하여 NCC 허브가 있는 프로젝트로 돌아갑니다.

검토할 교차 프로젝트 스포크 식별하기

gcloud network-connectivity hubs list-spokes ncc-hub \
 --filter="reason:PENDING_REVIEW"

스포크 수락하기

gcloud network-connectivity spokes accept xproj-spoke --global

선택사항: 스포크 거부하기

gcloud network-connectivity spokes reject xproj-spoke \
--global \
--details="some reason to reject"

허브에 활성 스포크 표시

gcloud network-connectivity hubs list-spokes ncc-hub \
 --filter="state:ACTIVE"
NAME            PROJECT          LOCATION  TYPE         STATE   STATE REASON
Xproj-spoke     xproj            global    VPC_NETWORK  ACTIVE
vpc4-spoke4     user-3p-dev      global    VPC_NETWORK  ACTIVE
vpc1-spoke1     user-3p-dev      global    VPC_NETWORK  ACTIVE
vpc2-spoke2     user-3p-dev      global    VPC_NETWORK  ACTIVE
vpc3-spoke3     user-3p-dev      global    VPC_NETWORK  ACTIVE

허브에서 서브넷 경로 나열

출력에서 교차 VPC 스포크의 서브넷 경로를 확인할 수 있나요?

gcloud network-connectivity hubs route-tables routes list \
--route_table=default \
--hub=ncc-hub \
--filter="NEXT_HOP:xprj-vpc"
IP_CIDR_RANGE  STATE   TYPE                NEXT_HOP  HUB      ROUTE_TABLE
10.100.0.0/16  ACTIVE  VPC_PRIMARY_SUBNET  xprj-vpc  ncc-hub  default

7. VPC 간 Private NAT

개요

이 섹션에서는 두 VPC 간의 겹치는 서브넷 범위에 대해 Private NAT를 구성합니다. VPC 간 Private NAT를 사용하려면 NCC가 필요합니다.

이전 섹션에서 VPC2 및 VPC3은 겹치는 서브넷 범위인 '10.3.3.0/24'로 구성되었습니다. 두 VPC는 중복 서브넷이 NCC 허브 경로 테이블에 삽입되지 않도록 NCC 스포크로 구성되어 있습니다. 즉, 해당 서브넷에 있는 호스트에 도달하는 레이어 3 데이터 경로가 없습니다.

NCC 허브 프로젝트에서 다음 명령어를 사용하여 중복되는 서브넷 범위를 찾습니다.

gcloud compute networks subnets list --network vpc2-ncc

gcloud compute networks subnets list --network vpc3-ncc

vpc2-ncc에서 중복 IP 범위가 포함된 서브넷 이름은 무엇인가요?

*서브넷 이름을 기록해 둡니다. 이 범위에 소스 NAT를 구성합니다.

Private NAT 구성

VPC2의 중복 서브넷에서 소스 NAT 트래픽을 전송하는 데 라우팅 가능한 서브넷 범위를 할당합니다. '–purpose=PRIVATE_NAT' 플래그를 사용하여 겹치지 않는 서브넷 범위를 구성합니다.

gcloud compute networks subnets create ncc2-spoke-nat \
--network=vpc2-ncc \
--region=us-central1 \
--range=10.10.10.0/29 \
--purpose=PRIVATE_NAT

프라이빗 NAT를 실행하는 전용 Cloud Router 만들기

gcloud compute routers create private-nat-cr \
--network vpc2-ncc \
--region us-central1

vpc2-ncc에서 겹치는 범위인 10.3.3.0/24를 소스 NAT하도록 Cloud Router를 구성합니다. 아래 구성 예에서 'overlapping-vpc3'은 중복 서브넷의 이름입니다. 'ALL' 키워드는 서브넷의 모든 IP 범위에 소스 NAT가 적용됨을 지정합니다.

gcloud compute routers nats create ncc2-nat \
--router=private-nat-cr \
--type=PRIVATE \
--nat-custom-subnet-ip-ranges=overlapping-vpc3:ALL \
--router-region=us-central1

이전 단계에서는 NAT IP 범위 풀과 변환될 특정 서브넷을 만들었습니다. 이 단계에서는 대상 네트워크가 NCC 허브 라우팅 테이블에서 경로를 사용하는 경우 중복 서브넷 범위에서 발생한 트래픽과 일치하는 네트워크 패킷을 변환하는 NAT 규칙 '1'을 만듭니다.

gcloud compute routers nats rules create 1 \
--router=private-nat-cr \
--region=us-central1 \
--match='nexthop.hub == "//networkconnectivity.googleapis.com/projects/$projectname/locations/global/hubs/ncc-hub"' \
--source-nat-active-ranges=ncc2-spoke-nat \
--nat=ncc2-nat

Private NAT 확인

gcloud compute routers nats describe ncc2-nat --router=private-nat-cr

출력 예

enableDynamicPortAllocation: true
enableEndpointIndependentMapping: false
endpointTypes:
- ENDPOINT_TYPE_VM
name: ncc2-nat
rules:
- action:
    sourceNatActiveRanges:
    - https://www.googleapis.com/compute/projects/yueri-3p-dev/regions/us-central1/subnetworks/ncc2-spoke-nat
  match: nexthop.hub == "//networkconnectivity.googleapis.com/projects/yueri-3p-dev/locations/global/hubs/ncc-hub"
  ruleNumber: 1
sourceSubnetworkIpRangesToNat: LIST_OF_SUBNETWORKS
subnetworks:
- name: https://www.googleapis.com/compute/projects/yueri-3p-dev/regions/us-central1/subnetworks/overlapping-vpc3
  sourceIpRangesToNat:
  - ALL_IP_RANGES
type: PRIVATE

원하는 경우

  • 웹 콘솔로 전환
  • '네트워크 서비스 > Cloud NAT > ncc2-nat'으로 이동합니다.

동적 포트 할당이 기본적으로 사용 설정되어 있는지 확인합니다.

114050bb65e0c4e2.png

다음으로 VPC2에 구성된 비공개 NAT 경로를 사용하는 데이터 경로를 확인합니다.

5035b181aeaa30a8.png

"vm1-vpc1-ncc"에 대한 SSH 세션을 열고 아래 tcpdump 명령어를 사용하여 NAT 풀 범위 "10.10.10.0/29"에서 가져온 패킷을 캡처합니다.

vm1-vpc1-ncc

sudo tcpdump -i any net 10.10.10.0/29 -n

이 Codelab을 작성하는 시점에 Private NAT는 ICMP 패킷을 지원하지 않습니다. 'pNat-vm-vpc2'에 SSH 세션을 연결하고 아래와 같이 curl 명령어를 사용하여 포트 TCP 80의 'vm1-vpc1-ncc'에 연결합니다.

pnat-vm-vpc2

curl 10.1.1.2 -v 

'vm1-vpc1-ncc'에서 tcpdump의 출력을 검사합니다. 'vm1-vpc1-ncc'의 웹 서버에 TCP 세션을 시작한 소스 IP 주소는 무엇인가요?

tcpdump: data link type LINUX_SLL2
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144 bytes
19:05:27.504761 ens4  In  IP 10.10.10.2.1024 > 10.1.1.2:80: Flags [S], seq 2386228656, win 65320, options [mss 1420,sackOK,TS val 3955849029 ecr 0,nop,wscale 7], length 0
19:05:27.504805 ens4  Out IP 10.1.1.2:80 > 10.10.10.2.1024: Flags [S.], seq 48316785, ack 2386228657, win 64768, options [mss 1420,sackOK,TS val 1815983704 ecr 3955849029,nop,wscale 7], length 0
<output snipped>

8. 데이터 경로 연결 확인

다이어그램을 참고하여 각 가상 머신 간의 데이터 경로를 확인합니다.

424df0ebe4510ebb.png

'vm1-vpc1-ncc'에 SSH로 연결하고 TCP 덤프를 시작하여 'vm2-vpc2-ncc'의 ICMP 패킷을 추적합니다. 이 VM은 VPC2에 있습니다.

vm1-vpc1-ncc

sudo tcpdump -i any icmp -v -e -n

'vm1-vpc2-ncc'에 SSH 세션을 설정하고 'vm1-vpc1-ncc'의 IP 주소를 '핑'합니다.

vm1-vpc2-ncc

ping 10.1.1.2

'vm1-vpc2-ncc'에 SSH를 설정하고 'vm1-vpc4-ncc'의 IP 주소를 '핑'합니다.

vm1-vpc2-ncc

ping 240.0.0.2

9. 삭제

Cloud Shell에 로그인하고 허브 및 브랜치 사이트 네트워크에서 VM 인스턴스 삭제

비공개 VPC NAT 구성 삭제하기

gcloud compute routers nats rules delete 1 \
--nat=ncc2-nat \
--router=private-nat-cr \
--region=us-central1 \
--quiet

gcloud compute routers nats delete ncc2-nat \
--router=private-nat-cr \
--router-region=us-central1 \
--quiet

gcloud compute routers delete private-nat-cr \
--region=us-central1 \
--quiet

NCC 스포크 삭제

gcloud network-connectivity spokes delete vpc1-spoke1 --global --quiet

gcloud network-connectivity spokes delete vpc2-spoke2 --global --quiet

gcloud network-connectivity spokes delete vpc3-spoke3 --global --quiet

gcloud network-connectivity spokes delete vpc4-spoke4 --global --quiet

프로젝트 간 스포크 거부

NCC 허브에서 프로젝트 간 VPC 스포크를 거부합니다.

gcloud network-connectivity spokes reject projects/$xprojname/locations/global/spokes/xproj-spoke \--details="cleanup" \
--global

NCC 허브 삭제

gcloud network-connectivity hubs delete ncc-hub --quiet

방화벽 규칙 삭제

gcloud compute firewall-rules delete ncc1-vpc-internal --quiet
gcloud compute firewall-rules delete ncc2-vpc-internal --quiet
gcloud compute firewall-rules delete ncc3-vpc-internal --quiet
gcloud compute firewall-rules delete ncc4-vpc-internal --quiet
gcloud compute firewall-rules delete ncc1-vpc-iap --quiet
gcloud compute firewall-rules delete ncc2-vpc-iap --quiet
gcloud compute firewall-rules delete ncc3-vpc-iap --quiet
gcloud compute firewall-rules delete ncc4-vpc-iap --quiet

GCE 인스턴스 삭제

gcloud compute instances delete vm1-vpc1-ncc --zone=us-central1-a --quiet
gcloud compute instances delete vm2-vpc2-ncc --zone=us-central1-a --quiet
gcloud compute instances delete pnat-vm-vpc2 --zone=us-central1-a --quiet
gcloud compute instances delete vm1-vpc4-ncc --zone=us-east1-b --quiet

VPC 서브넷 삭제

gcloud compute networks subnets delete ncc2-spoke-nat --region us-central1 --quiet
gcloud compute networks subnets delete vpc1-ncc-subnet1 --region us-central1 --quiet
gcloud compute networks subnets delete vpc1-ncc-subnet2 --region us-central1 --quiet
gcloud compute networks subnets delete vpc1-ncc-subnet3 --region us-central1 --quiet
gcloud compute networks subnets delete vpc2-ncc-subnet1 --region us-central1 --quiet
gcloud compute networks subnets delete overlapping-vpc2 --region us-central1 --quiet 
gcloud compute networks subnets delete overlapping-vpc3 --region us-central1 --quiet

gcloud compute networks subnets delete benchmark-testing-rfc2544 --region us-east1 --quiet
gcloud compute networks subnets delete class-e-rfc5735 --region us-east1 --quiet
gcloud compute networks subnets delete ietf-protcol-assignment-rfc6890 --region us-east1 --quiet
gcloud compute networks subnets delete ipv6-4-relay-rfc7526 --region us-east1 --quiet
gcloud compute networks subnets delete pupi --region us-east1 --quiet
gcloud compute networks subnets delete test-net-1-rfc5737 --region us-east1 --quiet
gcloud compute networks subnets delete test-net-2-rfc5737 --region us-east1 --quiet
gcloud compute networks subnets delete test-net-3-rfc5737 --region us-east1 --quiet

VPC 삭제

gcloud compute networks delete vpc1-ncc vpc2-ncc vpc3-ncc vpc4-ncc 
--quiet 

10. 축하합니다.

Network Connectivity Center 실습을 완료했습니다.

학습한 내용

  • NCC 허브가 있는 전체 메시 VPC 피어링 네트워크 구성
  • NCC 스포크 제외 필터
  • 교차 프로젝트 스포크 지원
  • VPC 간 Private NAT

다음 단계

©Google, LLC or its affiliates. All rights reserved. 배포 금지.