VPC 네트워크 피어링을 사용하여 허브 및 스포크 네트워크 배포

Last reviewed 2022-01-11 UTC

이 튜토리얼에서는 Virtual Private Cloud(VPC)의 네트워크 피어링 기능을 사용하여 Google Cloud에서 허브 및 스포크 네트워크를 설정하는 방법을 보여줍니다. VPC 네트워크 피어링을 사용하면 여러 VPC 네트워크의 워크로드가 내부적으로 통신할 수 있도록 VPC 네트워크를 연결할 수 있습니다. 트래픽은 Google 네트워크에 그대로 머무르며 공개 인터넷을 통해 전송되지 않습니다.

다음 다이어그램은 배포할 아키텍처를 보여줍니다. 이는 각각 중앙 허브 VPC 네트워크와 피어링된 2개의 스포크 VPC 네트워크로 구성됩니다. 스포크 VPC 네트워크 중 하나와 허브 VPC 네트워크 간의 VPN 터널을 사용하면 스포크 간 연결을 사용 설정할 수 있습니다.

VPC 네트워크 피어링을 사용하는 허브 및 스포크 아키텍처

이 아키텍처 및 기타 설계 대안에 대한 자세한 내용은 허브 및 스포크 네트워크 아키텍처를 참조하세요.

목표

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 구성요소를 사용합니다.

프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요. Google Cloud를 처음 사용하는 사용자는 무료 체험판을 사용할 수 있습니다.

이 문서에 설명된 태스크를 완료했으면 만든 리소스를 삭제하여 청구가 계속되는 것을 방지할 수 있습니다. 자세한 내용은 삭제를 참조하세요.

시작하기 전에

  1. 리소스를 기존 프로젝트와 Terraform에서 생성하는 새 프로젝트 중 어디에 배포할지 결정합니다.

  2. 필요한 권한을 가져옵니다.

    제공된 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)(새 프로젝트에 리소스를 배포하는 데 필요)

    필요한 권한이 없거나 권한이 있는지 잘 모르겠으면 조직 관리자에게 문의하세요.

  3. (선택사항) Terraform에서 생성하는 새 프로젝트에 리소스를 배포하려면 이 단계를 건너뜁니다.

    기존 프로젝트 또는 자신이 만든 프로젝트를 사용하려면 다음 단계를 완료합니다.

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

      프로젝트 선택기로 이동

    2. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

    3. API Compute Engine, GKE, IAM, 서비스 사용량, Resource Manager 사용 설정

      API 사용 설정

환경 준비

Cloud Shell 또는 로컬 호스트를 사용하여 이 가이드를 완료할 수 있습니다. Cloud Shell에는 Terraform이 사전 설치되어 있으며 Google Cloud 인증을 거치도록 설정되어 있습니다.

Cloud Shell 사용

  • Cloud Shell에서 Terraform 예시 템플릿을 다운로드하여 엽니다.

    Cloud Shell에서 열기

    Cloud Shell이 별도의 브라우저 탭에서 시작되며 Terraform 예시 템플릿이 Cloud Shell 환경의 '$HOME/cloudshell_open' 디렉터리에 다운로드됩니다.

로컬 호스트 사용

다음 단계를 완료합니다.

  1. Terraform 버전 0.13.0 이상을 설치합니다.

  2. Google Cloud용 Terraform 예시 및 모듈에서 Terraform 예시 템플릿을 다운로드합니다.

  3. 인증을 설정합니다.

    1. 서비스 계정을 만듭니다.

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      SERVICE_ACCOUNT_NAME을 서비스 계정 이름으로 바꿉니다.

    2. 서비스 계정에 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입니다.
    3. 키 파일을 생성합니다.

      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입니다.
  4. 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 범위를 조정하고 리소스를 배포할 프로젝트를 지정할 수 있습니다.

  1. (로컬 호스트 또는 Cloud Shell에) 다운로드한 코드에서 blueprints/networking/hub-and-spoke-peering 하위 디렉터리로 이동합니다.

    cd blueprints/networking/hub-and-spoke-peering
    
  2. variables.tf 파일을 엽니다.

    Terraform 구성의 입력 변수가 이 파일에서 선언됩니다. 일부 변수에는 default 값이 있습니다.

  3. 값을 할당해야 하는 변수를 식별합니다.

    • 기본값이 없는 변수(예: project_id)
    • 변경할 기본값이 있는 변수

      예를 들어 ip_ranges에는 기본 CIDR 범위가 사용되지만 배포에는 다른 범위를 사용해야 할 수 있습니다.

    식별된 각 변수의 description을 읽고 type을 기록합니다.

  4. terraform.tfvars라는 텍스트 파일을 만듭니다.

  5. 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"
    
  6. Terraform을 초기화합니다.

    terraform init
    

    다음 메시지가 표시될 때까지 기다립니다.

    Terraform has been successfully initialized!
    
  7. 구성에 오류가 없는지 확인합니다.

    terraform validate
    

    명령어가 오류를 반환하면 구성에서 수정이 필요한 항목을 변경하고 terraform validate를 다시 실행합니다.

    명령어가 다음 메시지를 반환할 때까지 이 단계를 반복합니다.

    Success! The configuration is valid.
    
  8. 구성에서 정의된 리소스를 검토합니다.

    terraform plan
    

    구성을 적용할 때 Terraform에서 프로비저닝하는 리소스가 출력에 나열됩니다.

    변경하려면 구성을 수정한 후 terraform validateterraform plan을 다시 실행합니다.

리소스 프로비저닝

구성에서 더 이상 변경할 항목이 없으면 리소스를 배포합니다.

  1. 다음 명령어를 실행합니다.

    terraform apply
    

    Terraform에서 생성될 리소스 목록을 표시합니다.

  2. 작업을 수행할지 묻는 메시지가 표시되면 yes를 입력합니다.

    Terraform에 하나 이상의 API가 사용 설정되지 않았다는 오류 메시지가 표시되면 메시지에 표시된 각 링크를 사용하여 필요한 API를 사용 설정합니다.

    Terraform에서 배포 진행 상황을 보여주는 메시지가 표시됩니다. 모든 리소스가 만들어지면 Terraform에 다음 메시지가 표시됩니다.

    Apply complete!
    

이제 Google Cloud에 허브 및 스포크 네트워크가 배포되었습니다.

리소스 추가, 변경 또는 삭제

리소스를 추가하거나 변경하거나 삭제하려면 Terraform 구성을 수정한 후 terraform validate, terraform plan, terraform apply 명령어를 순서대로 실행합니다.

정리

이 가이드에서 만든 리소스의 요금이 Google Cloud 계정에 청구되지 않도록 필요하지 않은 리소스를 모두 삭제합니다.

  1. 다음 명령어를 실행합니다.

    terraform destroy
    

    Terraform에서 소멸될 리소스 목록을 표시합니다.

  2. 작업을 수행할지 묻는 메시지가 표시되면 yes를 입력합니다.

    Terraform에서 진행 상황을 보여주는 메시지가 표시됩니다. 모든 리소스가 삭제되면 Terraform에 다음 메시지가 표시됩니다.

    Destroy complete!
    

다음 단계