실습: 스포크로서의 NCC VPC

1. 소개

개요

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

Network Connectivity Center (NCC)는 Google Cloud에서 네트워크 연결 관리를 위한 허브 및 스포크 제어 영역 모델입니다. 허브 리소스는 스포크를 상호 연결하기 위한 중앙 집중식 연결 관리 모델을 제공합니다.

빌드할 항목

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

학습할 내용

  • NCC를 사용한 풀 메시 VPC 연결
  • VPC 간 비공개 NAT

필요한 항목

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

6d1b99c6da87fd84.png

목표

  • GCP 환경 설정
  • VPC를 스포크로 사용하여 Network Connectivity Center 구성
  • 데이터 경로 확인
  • NCC 서비스 가능성 기능 살펴보기
  • 사용된 리소스 삭제

시작하기 전에

Google Cloud 콘솔 및 Cloud Shell

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

NCC 허브 프로젝트 Google Cloud 콘솔

https://console.cloud.google.com에서 Cloud 콘솔에 액세스할 수 있습니다.

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.sracks

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

네트워크 연결.스포크.**

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 서브넷 범위를 지원합니다. 이 단계에서는 허브 경로 테이블로 가져올 VPC4에 유효한 IP 범위를 만듭니다.

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 범위 두 개를 만듭니다.

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 Hub는 데이터 연결을 생성하기 위한 제어 영역을 정의하는 라우팅 테이블을 도입했습니다. NCC Hub의 라우팅 테이블 이름 찾기

 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 Hub 기본 라우팅 테이블의 콘텐츠를 나열합니다. 참고* NCC Hub의 경로 테이블은 스포크가 생성될 때까지 비어 있습니다.

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

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

4. VPC 스포크가 있는 NCC

개요

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

a70bc80037927bb0.png

VPC를 NCC 스포크로 구성

다음 VPC를 이 순서대로 NCC 스포크로 구성합니다.

  • 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 허브 경로 테이블로 내보내지 않도록 요약 프리픽스를 기반으로 제외 내보내기 규칙을 만듭니다.

VPC1에 속한 모든 서브넷을 나열하려면 이 gcloud 명령어를 사용하세요.

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-excluded-ranges'를 사용하여 /25 서브넷 쌍을 허브 라우팅 테이블로 가져오지 않도록 제외합니다. 키워드를 사용하여 해당 특정 범위에서 /24 요약 경로를 필터링합니다.

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 Hub 기본 라우팅 테이블의 콘텐츠를 나열합니다. NCC Hub의 라우팅 테이블에 있는 /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 Hub에서 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 Hub를 사용한 네트워크 연결에 참여할 수 있습니다.

e1190fa898c5097d.png

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

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

교차 프로젝트 스포크 Google Cloud 콘솔

https://console.cloud.google.com에서 Cloud 콘솔에 액세스할 수 있습니다.

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 Hub 및 스포크 관리자에 필요한 IAM 역할이 나와 있습니다.

역할/설명

권한

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

networkconnectivity.hubs.networkconnectivity.sracks

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

네트워크 연결.스포크.**

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

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

gcloud network-connectivity hubs describe ncc-hub

교차 프로젝트 스포크 VPC

VPC가 NCC 허브 프로젝트의 일부가 아닌 다른 프로젝트에 로그인합니다. Cloud Shell에서 다음 명령어를 사용하여 VPC를 NCC 스포크로 구성합니다.

  • HUB_URI는 다른 프로젝트에 있는 허브의 URI여야 합니다.
  • VPC_URI는 스포크와 동일한 프로젝트에 있어야 합니다.
  • VPC 네트워크는 이 교차 프로젝트의 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 간 비공개 NAT

개요

이 섹션에서는 두 VPC 간에 겹치는 서브넷 범위를 위해 비공개 NAT를 구성합니다. VPC 간 비공개 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를 구성합니다.

비공개 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를 수행하기 위한 전용 클라우드 라우터 만들기

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

vpc2-ncc에서 10.3.3.0/24의 중첩 범위를 NAT에 보내도록 클라우드 라우터를 구성합니다. 아래 구성 예에서 'board-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 범위와 변환할 특정 서브넷의 풀을 만들었습니다. 이 단계에서 NAT 규칙 '1'을 만듭니다. 대상 네트워크가 NCC 허브 라우팅 테이블에서 경로를 취하는 경우 겹치는 서브넷 범위에서 발생한 트래픽과 일치하는 네트워크 패킷을 변환하는

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을 작성하는 시점을 기준으로 비공개 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 덤프를 시작하여 에서 ICMP 패킷을 추적합니다. vm2-vpc2-ncc" 이 VM은 VPC2에 상주합니다.

vm1-vpc1-ncc

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

'vm1-vpc2-ncc' 및 'ping'에 대한 SSH 세션을 설정합니다. 'vm1-vpc1-ncc'의 IP 주소

vm1-vpc2-ncc

ping 10.1.1.2

'vm1-vpc2-ncc' 및 'ping'에 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 간 비공개 NAT

다음 단계

©Google, LLC 또는 그 계열사. All rights reserved. 배포 금지.