다음 다이어그램은 배포할 아키텍처를 보여줍니다. 이는 각각 중앙 허브 VPC 네트워크와 피어링된 2개의 스포크 VPC 네트워크로 구성됩니다. 스포크 VPC 네트워크 중 하나와 허브 VPC 네트워크 간의 VPN 터널을 사용하면 스포크 간 연결을 사용 설정할 수 있습니다.
이 아키텍처 및 기타 설계 대안에 대한 자세한 내용은 허브 및 스포크 네트워크 아키텍처를 참조하세요.
목표
Google에서 제공하는 Terraform 템플릿을 사용하여 Google Cloud에서 다음 리소스를 프로비저닝합니다.- VPC 네트워크 3개(1개는 허브로 지정하고 다른 2개는 스포크로 지정)
- 지정한 리전의 각 VPC 네트워크에 있는 서브넷
- 각 스포크 VPC 네트워크와 허브 VPC 네트워크 간의 VPC 네트워크 피어링 구성
- 각 VPC 네트워크의 방화벽 규칙 집합
- 각 스포크 VPC 네트워크의 Cloud NAT 게이트웨이
- 각 VPC 네트워크의 테스트 Compute Engine 인스턴스
- 스포크 2 VPC 네트워크에 단일 노드 풀이 있는 테스트 GKE(Google Kubernetes Engine) 클러스터
- Compute Engine 인스턴스의 서비스 계정
- GKE 노드의 서비스 계정
- 허브 VPC 네트워크 및 스포크 2 VPC 네트워크의 Static Cloud VPN 게이트웨이(각각 단일 터널 포함)
비용
이 문서에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud 구성요소를 사용합니다.
프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요.
이 문서에 설명된 태스크를 완료했으면 만든 리소스를 삭제하여 청구가 계속되는 것을 방지할 수 있습니다. 자세한 내용은 삭제를 참조하세요.
시작하기 전에
리소스를 기존 프로젝트와 Terraform에서 생성하는 새 프로젝트 중 어디에 배포할지 결정합니다.
필요한 권한을 가져옵니다.
제공된 Terraform 템플릿을 사용하여 리소스를 만들고 관리하려면 Google 계정 또는 서비스 계정에 다음 Identity and Access Management(IAM) 역할이 필요합니다.
- Compute 관리자(
roles/compute.admin
) - Kubernetes Engine 관리자(
roles/container.admin
) - 서비스 계정 관리자(
roles/iam.serviceAccountAdmin
) - 프로젝트 IAM 관리자(
roles/resourcemanager.projectIamAdmin
) - 서비스 사용량 관리자(
roles/serviceusage.serviceUsageAdmin
) - 프로젝트 생성자(
roles/resourcemanager.projectCreator
)(새 프로젝트에 리소스를 배포하는 데 필요)
필요한 권한이 없거나 권한이 있는지 잘 모르겠으면 조직 관리자에게 문의하세요.
- Compute 관리자(
(선택사항) Terraform에서 생성하는 새 프로젝트에 리소스를 배포하려면 이 단계를 건너뜁니다.
기존 프로젝트 또는 자신이 만든 프로젝트를 사용하려면 다음 단계를 완료합니다.
-
Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.
-
API Compute Engine, GKE, IAM, 서비스 사용량, Resource Manager 사용 설정
-
환경 준비
Cloud Shell 또는 로컬 호스트를 사용하여 이 가이드를 완료할 수 있습니다. Cloud Shell에는 Terraform이 사전 설치되어 있으며 Google Cloud 인증을 거치도록 설정되어 있습니다.
Cloud Shell 사용
로컬 호스트 사용
다음 단계를 완료합니다.
-
Terraform 버전 0.13.0 이상을 설치합니다.
-
Google Cloud용 Terraform 예시 및 모듈에서 Terraform 예시 템플릿을 다운로드합니다.
-
인증을 설정합니다.
-
서비스 계정을 만듭니다.
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
SERVICE_ACCOUNT_NAME
을 서비스 계정 이름으로 바꿉니다. -
서비스 계정에
roles/owner
IAM 역할을 부여합니다.gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=roles/owner
다음을 바꿉니다.
SERVICE_ACCOUNT_NAME
: 서비스 계정의 이름입니다.PROJECT_ID
: 서비스 계정을 만든 프로젝트 ID입니다.
-
키 파일을 생성합니다.
gcloud iam service-accounts keys create FILE_NAME.json --iam-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
다음을 바꿉니다.
FILE_NAME
: 키 파일의 이름입니다.SERVICE_ACCOUNT_NAME
: 서비스 계정의 이름입니다.PROJECT_ID
: 서비스 계정을 만든 프로젝트 ID입니다.
-
-
GOOGLE_APPLICATION_CREDENTIALS
환경 변수를 설정하여 애플리케이션 코드에 사용자 인증 정보를 제공합니다. 이 변수는 현재 셸 세션에만 적용됩니다. 이후 셸 세션에 변수를 적용하려면 셸 시작 파일(예:~/.bashrc
또는~/.profile
파일)에서 변수를 설정합니다.Linux 또는 macOS
export GOOGLE_APPLICATION_CREDENTIALS="
KEY_PATH
"KEY_PATH
를 사용자 인증 정보가 포함된 JSON 파일의 경로로 바꿉니다.예를 들면 다음과 같습니다.
export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/service-account-file.json"
Windows
PowerShell:
$env:GOOGLE_APPLICATION_CREDENTIALS="
KEY_PATH
"KEY_PATH
를 사용자 인증 정보가 포함된 JSON 파일의 경로로 바꿉니다.예를 들면 다음과 같습니다.
$env:GOOGLE_APPLICATION_CREDENTIALS="C:\Users\username\Downloads\service-account-file.json"
명령 프롬프트:
set GOOGLE_APPLICATION_CREDENTIALS=
KEY_PATH
KEY_PATH
를 사용자 인증 정보가 포함된 JSON 파일의 경로로 바꿉니다.
Terraform 변수 구성
다운로드한 Terraform 코드에는 요구사항에 따라 배포를 맞춤설정하는 데 사용할 수 있는 변수가 포함되어 있습니다. 예를 들어 서브넷 CIDR 범위를 조정하고 리소스를 배포할 프로젝트를 지정할 수 있습니다.
(로컬 호스트 또는 Cloud Shell에) 다운로드한 코드에서
blueprints/networking/hub-and-spoke-peering
하위 디렉터리로 이동합니다.cd blueprints/networking/hub-and-spoke-peering
variables.tf
파일을 엽니다.Terraform 구성의 입력 변수가 이 파일에서 선언됩니다. 일부 변수에는
default
값이 있습니다.값을 할당해야 하는 변수를 식별합니다.
- 기본값이 없는 변수(예:
project_id
) 변경할 기본값이 있는 변수
예를 들어
ip_ranges
에는 기본 CIDR 범위가 사용되지만 배포에는 다른 범위를 사용해야 할 수 있습니다.
식별된 각 변수의
description
을 읽고type
을 기록합니다.- 기본값이 없는 변수(예:
terraform.tfvars
라는 텍스트 파일을 만듭니다.terraform.tfvars
파일에서 앞에서 식별한 변수에 적절한 값을 할당합니다.예:
ip_ranges = { hub = "10.0.0.0/24" spoke-1 = "10.0.24.0/24" spoke-2 = "10.0.48.0/24" } prefix = "dev" project_id = "my-project" region = "us-central1"
Terraform을 초기화합니다.
terraform init
다음 메시지가 표시될 때까지 기다립니다.
Terraform has been successfully initialized!
구성에 오류가 없는지 확인합니다.
terraform validate
명령어가 오류를 반환하면 구성에서 수정이 필요한 항목을 변경하고
terraform validate
를 다시 실행합니다.명령어가 다음 메시지를 반환할 때까지 이 단계를 반복합니다.
Success! The configuration is valid.
구성에서 정의된 리소스를 검토합니다.
terraform plan
구성을 적용할 때 Terraform에서 프로비저닝하는 리소스가 출력에 나열됩니다.
변경하려면 구성을 수정한 후
terraform validate
및terraform plan
을 다시 실행합니다.
리소스 프로비저닝
구성에서 더 이상 변경할 항목이 없으면 리소스를 배포합니다.
다음 명령어를 실행합니다.
terraform apply
Terraform에서 생성될 리소스 목록을 표시합니다.
작업을 수행할지 묻는 메시지가 표시되면
yes
를 입력합니다.Terraform에 하나 이상의 API가 사용 설정되지 않았다는 오류 메시지가 표시되면 메시지에 표시된 각 링크를 사용하여 필요한 API를 사용 설정합니다.
Terraform에서 배포 진행 상황을 보여주는 메시지가 표시됩니다. 모든 리소스가 만들어지면 Terraform에 다음 메시지가 표시됩니다.
Apply complete!
이제 Google Cloud에 허브 및 스포크 네트워크가 배포되었습니다.
리소스 추가, 변경 또는 삭제
리소스를 추가하거나 변경하거나 삭제하려면 Terraform 구성을 수정한 후 terraform validate
, terraform plan
, terraform apply
명령어를 순서대로 실행합니다.
정리
이 가이드에서 만든 리소스의 요금이 Google Cloud 계정에 청구되지 않도록 필요하지 않은 리소스를 모두 삭제합니다.다음 명령어를 실행합니다.
terraform destroy
Terraform에서 소멸될 리소스 목록을 표시합니다.
작업을 수행할지 묻는 메시지가 표시되면
yes
를 입력합니다.Terraform에서 진행 상황을 보여주는 메시지가 표시됩니다. 모든 리소스가 삭제되면 Terraform에 다음 메시지가 표시됩니다.
Destroy complete!
다음 단계
- 허브 및 스포크 네트워크 설계 자세히 알아보기
- 안전한 엔드 투 엔드 클라우드 기반 빌드
- Google Cloud에 대한 참조 아키텍처, 다이어그램, 권장사항 살펴보기. 클라우드 아키텍처 센터 살펴보기