1. 소개
개요
이 실습에서는 Network Connectivity Center (NCC)를 사용하여 VPC 스포크 및 동적 경로 교환을 지원하여 온프레미스 연결을 대규모로 설정하는 방법을 살펴봅니다. 사용자가 VPC를 VPC 스포크로 정의하면 NCC 허브를 통해 여러 VPC 네트워크에 함께 연결할 수 있습니다. 사용자의 온프레미스 네트워크와 네트워크 연결을 설정하려면 라우터 어플라이언스 가상 NIC, HA_VPN 터널 또는 Interconnect VLAN 연결을 NCC VPC 스포크와 동일한 NCC 허브에 연결하면 됩니다.
허브 리소스는 스포크를 상호 연결하는 중앙 집중식 연결 관리 모델을 제공합니다.
빌드할 항목
이 Codelab에서는 온프레미스 네트워크와 워크로드 VPC 간에 하이브리드 연결을 구현하는 NCC 허브를 사용하여 논리적 허브 및 스포크 토폴로지를 빌드합니다.
학습할 내용
- 워크로드 VPC와 라우팅 VPC 구별
- VPC 스포크 및 하이브리드 스포크의 NCC 통합
필요한 항목
- GCP VPC 네트워크에 대한 지식
- Cloud Router 및 BGP 라우팅에 대한 지식
- Google Cloud 프로젝트
- 할당량:네트워크를 확인하고 필요한 경우 추가 네트워크를 요청합니다(아래 스크린샷 참고).
목표
- GCP 환경 설정
- VPC를 스포크로 사용하여 Network Connectivity Center 구성
- HA-VPN 터널이 있는 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 [YOUR-PROJECT-NAME]
projectname=[YOUR-PROJECT-NAME]
echo $projectname
region="us-central1"
zone="us-central1-a"
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 네트워크와 방화벽 규칙을 배포합니다. 논리 다이어그램은 이 단계에서 설정할 네트워크 환경을 보여줍니다. 이 Codelab에서는 VPC를 사용하여 온프레미스 네트워크를 시뮬레이션합니다.
주요 개념 1
Google Cloud 글로벌 VPC는 44개 이상의 GCP 리전 간에 데이터 경로 연결을 제공합니다. 지역 서비스인 Cloud Router는 서브넷을 동적으로 공지하고 라우터가 구성된 리전 또는 전체 VPC 네트워크에서 학습된 경로를 전파합니다. Cloud Router가 지역적으로 또는 전역적으로 경로를 전파할지 여부는 동적 라우팅 모드(지역 또는 전역)를 정의하는 사용자에 따라 다릅니다.
이 섹션에서는 먼저 각 VPC를 지역 라우팅 모드로 구성합니다. 이 Codelab의 나머지 부분에서는 다음을 수행합니다.
- '라우팅 VPC'는 NCC VPC 스포크로 구성되지 않은 VPC를 나타냅니다.
- '워크로드 VPC'는 NCC 스포크로 구성된 VPC를 나타냅니다.
워크로드 VPC 및 서브넷 만들기
VPC 네트워크에는 데이터 경로 유효성 검사를 위해 GCE VM을 설치할 서브넷이 포함되어 있습니다.
vpc_spoke_network_name="workload-vpc"
vpc_spoke_subnet_name="workload-subnet"
vpc_spoke_subnet_ip_range="10.0.1.0/24"
vpc_spoke_name="workload-vpc-spoke"
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 및 서브넷 만들기
NCC는 비공개로 사용되는 공개 IP 주소를 제외한 모든 유효한 IPv4 서브넷 범위를 지원합니다.
routing_vpc_network_name="routing-vpc"
routing_vpc_subnet_name="routing-vpc-subnet"
routing_vpc_subnet_range="10.0.2.0/24"
gcloud compute networks create "${routing_vpc_network_name}" \
--subnet-mode=custom
gcloud compute networks subnets create "${routing_vpc_subnet_name}" \
--region="${region}" \
--network="${routing_vpc_network_name}" \
--range="${routing_vpc_subnet_range}"
온프레미스 VPC 및 서브넷 만들기
NCC는 비공개로 사용되는 공개 IP 주소를 제외한 모든 유효한 IPv4 서브넷 범위를 지원합니다.
on_prem_network_name="on-prem-net-vpc"
on_prem_subnet_name="on-prem-subnet"
on_prem_subnet_range="10.0.3.0/24"
gcloud compute networks create "${on_prem_network_name}" \
--subnet-mode=custom
gcloud compute networks subnets create "${on_prem_subnet_name}" \
--region="${region}" \
--network="${on_prem_network_name}" \
--range="${on_prem_subnet_range}"
워크로드 VPC 방화벽 규칙 구성
workload_vpc_firewall_name="workload-protocol-fw-vpc"
workload_port_firewall_name="workload-port-firewall-vpc"
gcloud compute firewall-rules create "${workload_vpc_firewall_name}" \
--network=${vpc_spoke_network_name} \
--allow="tcp,udp,icmp"
gcloud compute firewall-rules create "${workload_port_firewall_name}" \
--network=${vpc_spoke_network_name} \
--allow="tcp:22,tcp:3389,tcp:11180,icmp"
라우팅 VPC 및 VPC 방화벽 규칙 구성
routing_vpc_fw_name="routing-vpc-protocol-fw"
routing_vpc_port_fw_name="routing-vpc--port-fw"
gcloud compute firewall-rules create "${routing_vpc_fw_name}" \
--network=${routing_vpc_network_name} \
--allow="tcp,udp,icmp"
gcloud compute firewall-rules create "${routing_vpc_port_fw_name}" \
--network=${routing_vpc_network_name} \
--allow="tcp:22,tcp:3389,tcp:11180,icmp"
온프레미스 VPC 및 VPC 방화벽 규칙 구성
prem_protocol_fw_name="onprem-vpc-protocol-firewall"
prem_port_firewall_name="onprem-vpc-port-firewall-prem"
gcloud compute firewall-rules create "${prem_protocol_fw_name}" \
--network=${on_prem_network_name} \
--allow="tcp,udp,icmp"
gcloud compute firewall-rules create "${prem_port_firewall_name}" \
--network=${on_prem_network_name} \
--allow="tcp:22,tcp:3389,tcp:11180,icmp"
각 VPC에서 GCE VM 구성하기
'vm1-vpc1-ncc'에 패키지를 설치하려면 임시 인터넷 액세스가 필요합니다.
가상 머신 3개를 만듭니다. 각 VM은 이전에 만든 VPC 중 하나에 할당됩니다.
gcloud compute instances create vm1-vpc-workload \
--zone us-central1-a \
--subnet="${vpc_spoke_subnet_name}" \
--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-vpc-routing \
--zone us-central1-a \
--subnet="${routing_vpc_subnet_name}" \
--no-address
gcloud compute instances create vm3-onprem \
--zone us-central1-a \
--subnet="${on_prem_subnet_name}" \
--no-address
3. 하이브리드 연결 설정
이 섹션에서는 온프레미스 네트워크와 라우팅 VPC 네트워크를 함께 연결하는 HA VPN 터널을 구성합니다.
라우팅 VPC에서 BGP를 사용하여 Cloud Router 구성
routing_vpc_router_name="routing-vpc-cr"
routing_vpc_router_asn=64525
gcloud compute routers create "${routing_vpc_router_name}" \
--region="${region}" \
--network="${routing_vpc_network_name}" \
--asn="${routing_vpc_router_asn}"
온프레미스 VPC에서 BGP를 사용하여 Cloud Router 구성
on_prem_router_name="on-prem-router"
on_prem_router_asn=64526
gcloud compute routers create "${on_prem_router_name}" \
--region="${region}" \
--network="${on_prem_network_name}" \
--asn="${on_prem_router_asn}"
라우팅 VPC에서 VPN 게이트웨이 구성
routing_vpn_gateway_name="routing-vpc-vpn-gateway"
gcloud compute vpn-gateways create "${routing_vpn_gateway_name}" \
--region="${region}" \
--network="${routing_vpc_network_name}"
온프레미스 VPC에서 VPN 게이트웨이 구성
on_prem_gateway_name="on-prem-vpn-gateway"
gcloud compute vpn-gateways create "${on_prem_gateway_name}" \
--region="${region}" \
--network="${on_prem_network_name}"
라우팅 VPC 및 온프레미스 VPC에서 VPN 터널 구성
secret_key=$(openssl rand -base64 24)
routing_vpc_tunnel_name="routing-vpc-tunnel"
on_prem_tunnel_name="on-prem-tunnel"
gcloud compute vpn-tunnels create "${routing_vpc_tunnel_name}" \
--vpn-gateway="${routing_vpn_gateway_name}" \
--peer-gcp-gateway="${on_prem_gateway_name}" \
--router="${routing_vpc_router_name}" \
--region="${region}" \
--interface=0 \
--shared-secret="${secret_key}"
gcloud compute vpn-tunnels create "${on_prem_tunnel_name}" \
--vpn-gateway="${on_prem_gateway_name}" \
--peer-gcp-gateway="${routing_vpn_gateway_name}" \
--router="${on_prem_router_name}" \
--region="${region}" \
--interface=0 \
--shared-secret="${secret_key}"
라우팅 VPC와 온프레미스 Cloud Router를 BGP 피어링하는 BGP 세션 만들기
interface_hub_name="if-hub-to-prem"
hub_router_ip="169.254.1.1"
gcloud compute routers add-interface "${routing_vpc_router_name}" \
--interface-name="${interface_hub_name}" \
--ip-address="${hub_router_ip}" \
--mask-length=30 \
--vpn-tunnel="${routing_vpc_tunnel_name}" \
--region="${region}"
bgp_hub_name="bgp-hub-to-prem"
prem_router_ip="169.254.1.2"
gcloud compute routers add-bgp-peer "${routing_vpc_router_name}" \
--peer-name="${bgp_hub_name}" \
--peer-ip-address="${prem_router_ip}" \
--interface="${interface_hub_name}" \
--peer-asn="${on_prem_router_asn}" \
--region="${region}"
interface_prem_name="if-prem-to-hub"
gcloud compute routers add-interface "${on_prem_router_name}" \
--interface-name="${interface_prem_name}" \
--ip-address="${prem_router_ip}" \
--mask-length=30 \
--vpn-tunnel="${on_prem_tunnel_name}" \
--region="${region}"
bgp_prem_name="bgp-prem-to-hub"
gcloud compute routers add-bgp-peer "${on_prem_router_name}" \
--peer-name="${bgp_prem_name}" \
--peer-ip-address="${hub_router_ip}" \
--interface="${interface_prem_name}" \
--peer-asn="${routing_vpc_router_asn}" \
--region="${region}"
기본적으로 NCC 허브 서브넷은 하이브리드 스포크에 공지되지 않습니다. 다음 단계에서는 온프레미스 네트워크에 NCC 서브넷 경로를 공지하도록 Cloud Router를 구성합니다.
온프레미스 Cloud Router에 VPC 스포크 서브넷 공지
gcloud compute routers update "${routing_vpc_router_name}" \
--advertisement-mode custom \
--set-advertisement-groups=all_subnets \
--set-advertisement-ranges="${vpc_spoke_subnet_ip_range}" \
--region="${region}"
라우팅 VPC Cloud Router에 온프레미스 서브넷 공지
gcloud compute routers update "${on_prem_router_name}" \
--advertisement-mode custom \
--set-advertisement-groups=all_subnets \
--region="${region}"
MED 값이 '111'인 프리픽스를 공지하도록 온프레미스 Cloud Router BGP 피어링 구성을 업데이트합니다. 이후 섹션에서는 BGP Med 값을 사용한 NCC의 동작을 살펴봅니다.
on_prem_router_name="on-prem-router"
bgp_prem_name="bgp-prem-to-hub"
gcloud compute routers update-bgp-peer "${on_prem_router_name}" \
--peer-name="${bgp_prem_name}" \
--advertised-route-priority="111" \
--region="${region}"
라우팅 VPC 터널의 상태 확인
gcloud compute vpn-tunnels describe routing-vpc-tunnel \
--region=us-central1 \
--format='flattened(status,detailedStatus)'
라우팅 VPC Cloud Router 상태 확인
gcloud 명령어를 사용하여 라우팅 VPC Cloud Router의 BGP 학습 경로를 나열합니다.
gcloud compute routers get-status routing-vpc-cr \
--region=us-central1
4. Network Connectivity Center 허브
개요
이 섹션에서는 gcloud 명령어를 사용하여 NCC 허브를 구성합니다. NCC 허브는 각 VPC 스포크 간의 라우팅 구성을 빌드하는 제어 영역 역할을 합니다.
API 서비스 사용 설정
Network Connectivity API가 아직 사용 설정되지 않은 경우 다음과 같이 사용 설정합니다.
gcloud services enable networkconnectivity.googleapis.com
NCC 허브 만들기
gCloud 명령어를 사용하여 NCC 허브 만들기
hub_name="mesh-hub"
gcloud network-connectivity hubs create "${hub_name}"
출력 예
Create request issued for: [mesh-hub]
Waiting for operation [projects/ncc/locations/global/operations/operation-1719930559145-61c448a0426e4-2d18c8dd-7107edbe] to complete...done.
Created hub [mesh-hub].
새로 만든 NCC 허브를 설명합니다. 이름과 연결된 경로를 기록해 둡니다.
gcloud network-connectivity hubs describe mesh-hub
createTime: '2024-07-02T14:29:19.260054897Z'
exportPsc: false
name: projects/ncc/locations/global/hubs/mesh-hub
policyMode: PRESET
presetTopology: MESH
routeTables:
- projects/ncc/locations/global/hubs/mesh-hub/routeTables/default
state: ACTIVE
uniqueId: 08f9ae88-f76f-432b-92b2-357a85fc83aa
updateTime: '2024-07-02T14:29:32.583206925Z'
NCC 허브는 데이터 연결을 위한 제어 영역을 정의하는 라우팅 테이블을 도입했습니다. NCC 허브의 라우팅 테이블 이름 찾기
gcloud network-connectivity hubs route-tables list --hub=mesh-hub
NAME HUB DESCRIPTION
default mesh-hub
NCC 기본 경로 테이블의 URI를 찾습니다.
gcloud network-connectivity hubs route-tables describe default --hub=mesh-hub
createTime: '2024-07-02T14:29:22.340190411Z'
name: projects/ncc/locations/global/hubs/mesh-hub/routeTables/default
state: ACTIVE
uid: fa2af78b-d416-41aa-b442-b8ebdf84f799
NCC 허브의 기본 라우팅 테이블 콘텐츠를 나열합니다. 참고* NCC 하이브리드 스포크 또는 VPC 스포크가 정의될 때까지 NCC 허브의 경로 테이블은 비어 있습니다.
gcloud network-connectivity hubs route-tables routes list --hub=mesh-hub --route_table=default
NCC 허브의 경로 테이블은 비어 있어야 합니다.
5. 하이브리드 및 VPC 스포크가 있는 NCC
개요
이 섹션에서는 gCloud 명령어를 사용하여 두 개의 NCC Spoke를 구성합니다. 한 스포크는 VPC 스포크이고 다른 스포크는 하이브리드 (VPN) 스포크입니다.
워크로드 VPC를 NCC 스포크로 구성
워크로드 VPC를 NCC 스포크로 구성하고 이전에 만든 NCC 허브에 할당합니다. NCC 스피커 API 호출에는 위치를 지정해야 합니다. '–global' 플래그를 사용하면 사용자가 새 NCC 스포크를 구성할 때 전체 URI 경로를 지정하지 않아도 됩니다.
vpc_spoke_name="workload-vpc-spoke"
vpc_spoke_network_name="workload-vpc"
gcloud network-connectivity spokes linked-vpc-network create "${vpc_spoke_name}" \
--hub="${hub_name}" \
--vpc-network="${vpc_spoke_network_name}" \
--global
Create request issued for: [workload-vpc-spoke]
Waiting for operation [projects/ncc/locations/global/operations/operation-1719931097138-61c44aa15463f-90de22c7-40c10e6b] to complete...done.
Created spoke [workload-vpc-spoke].
createTime: '2024-07-02T14:38:17.315200822Z'
group: projects/ncc/locations/global/hubs/mesh-hub/groups/default
hub: projects/ncc/locations/global/hubs/mesh-hub
linkedVpcNetwork:
uri: https://www.googleapis.com/compute/v1/projects/ncc/global/networks/workload-vpc
name: projects/ncc/locations/global/spokes/workload-vpc-spoke
spokeType: VPC_NETWORK
state: ACTIVE
uniqueId: 33e50612-9b62-4ec7-be6c-962077fd47dc
updateTime: '2024-07-02T14:38:44.196850231Z'
라우팅 VPC에서 VPN 터널을 하이브리드 스포크로 구성
이 gcloud 명령어를 사용하여 VPN 터널을 하이브리드 스포크로 구성하여 메시 허브에 참여합니다.
vpn_spoke_name="hybrid-spoke"
routing_vpc_tunnel_name="routing-vpc-tunnel"
region="us-central1"
hub_name="mesh-hub"
gcloud network-connectivity spokes linked-vpn-tunnels create "${vpn_spoke_name}" \
--region="${region}" \
--hub="${hub_name}" \
--vpn-tunnels="${routing_vpc_tunnel_name}"
샘플 출력
Create request issued for: [hybrid-spoke]
Waiting for operation [projects/ncc/locations/us-central1/operations/operation-1719932916561-61c45168774be-0a06ae03-88192175] to complete...done.
Created spoke [hybrid-spoke].
mesh-hub의 스포크 구성 확인
gcloud 명령어를 사용하여 NCC 허브의 기본 라우팅 테이블의 콘텐츠를 나열합니다.
gcloud network-connectivity hubs list-spokes mesh-hub
메시 허브의 기본 라우팅 테이블 분석하기
gcloud 명령어를 사용하여 NCC 허브의 기본 라우팅 테이블의 콘텐츠를 나열합니다.
gcloud network-connectivity hubs route-tables routes list --hub=mesh-hub \
--route_table=default
NCC 하이브리드 스포크와 동적 경로 교환을 사용할 때 BGP MED 값이 있는 Cloud Router 학습 프리픽스는 NCC 스포크 전체에 전파됩니다.
gcloud 명령어를 사용하여 우선순위 값 '111'을 확인합니다.
gcloud network-connectivity hubs route-tables routes list \
--hub=mesh-hub \
--route_table=default \
--effective-location=us-central1 \
--filter=10.0.3.0/24
6. 데이터 경로 확인
이 단계에서는 NCC 하이브리드와 VPC 스포크 간의 데이터 경로를 검증합니다.
이러한 gcloud 명령어의 출력을 사용하여 온프레미스 VM에 로그인합니다.
gcloud compute instances list --filter="name=vm3-onprem"
온프레미스 네트워크에 있는 VM 인스턴스에 로그온합니다.
gcloud compute ssh vm3-onprem --zone=us-central1-a
vm3-onprem의 터미널에서 curl 명령어를 사용하여 workload-vpc에 호스팅된 VM에 대한 웹 세션을 설정합니다.
curl 10.0.1.2 -v
* Trying 10.0.1.2:80...
* Connected to 10.0.1.2 (10.0.1.2) port 80 (#0)
> GET / HTTP/1.1
> Host: 10.0.1.2
> User-Agent: curl/7.74.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Date: Wed, 03 Jul 2024 15:41:34 GMT
< Server: Apache/2.4.59 (Debian)
< Last-Modified: Mon, 01 Jul 2024 20:36:16 GMT
< ETag: "1e-61c358c8272ba"
< Accept-Ranges: bytes
< Content-Length: 30
< Content-Type: text/html
<
<h3>Web Server: www-vm1</h3>
* Connection #0 to host 10.0.1.2 left intact
7. 삭제
Cloud Shell에 로그인하고 GCP 리소스를 삭제합니다.
NCC 스포크 삭제
gcloud network-connectivity spokes delete workload-vpc-spoke --global \
--quiet
gcloud network-connectivity spokes delete hybrid-spoke \
--quiet \
--region us-central1
NCC 허브 삭제
gcloud network-connectivity hubs delete mesh-hub --quiet
방화벽 규칙 삭제
gcloud compute firewall-rules delete onprem-vpc-port-firewall-prem onprem-vpc-protocol-firewall routing-vpc--port-fw routing-vpc-protocol-fw workload-port-firewall-vpc workload-protocol-fw-vpc --quiet
HA-VPN 터널 삭제
gcloud compute vpn-tunnels delete on-prem-tunnel \
--region=us-central1 \
--quiet
gcloud compute vpn-tunnels delete routing-vpc-tunnel \
--region=us-central1 \
--quiet
VPN 게이트웨이 삭제
gcloud compute vpn-gateways delete on-prem-vpn-gateway \
--region=us-central1 --quiet
gcloud compute vpn-gateways delete routing-vpc-vpn-gateway \
--region us-central1 --quiet
Cloud Router 삭제
gcloud compute routers delete routing-vpc-cr --region us-central1 --quiet
gcloud compute routers delete on-prem-router --region us-central1 --quiet
GCE 인스턴스 삭제
gcloud compute instances delete vm1-vpc-workload \
--zone=us-central1-a \
--quiet
gcloud compute instances delete vm2-vpc-routing \
--zone=us-central1-a \
--quiet
gcloud compute instances delete vm3-onprem \
--zone=us-central1-a \
--quiet
VPC 서브넷 삭제
gcloud compute networks subnets delete workload-subnet --region us-central1 --quiet
gcloud compute networks subnets delete on-prem-subnet --region us-central1 --quiet
gcloud compute networks subnets delete routing-vpc-subnet --region us-central1 --quiet
VPC 삭제
gcloud compute networks delete on-prem-net-vpcworkload-vpc routing-vpc
--quiet
8. 축하합니다.
동적 경로 교환 Network Connectivity Center 실습을 완료했습니다.
학습한 내용
- Network Connectivity Center를 사용한 동적 경로 교환
다음 단계
©Google, LLC or its affiliates. All rights reserved. 배포 금지.