Terraform을 사용하여 Azure에서 허브 및 스포크 하이브리드 네트워크 토폴로지 만들기

Terraform은 클라우드 인프라의 정의, 미리 보기 및 배포를 사용합니다. Terraform을 사용하는 경우 HCL 구문를 사용하여 구성 파일을 만듭니다. HCL 구문을 사용하면 클라우드 공급자(예: Azure) 그리고 클라우드 인프라를 구성하는 요소를 지정할 수 있습니다. 구성 파일을 만든 후 배포되기 전에 인프라 변경을 미리 볼 수 있는 실행 계획를 만듭니다. 변경 내용을 확인 한 후에는 실행 계획을 적용하여 인프라를 배포합니다.

이 문서에서는 Terraform을 사용하여 Azure에서 허브 및 스포크 네트워크 토폴로지를 구현하는 방법을 보여 줍니다.

허브 및 스포크 토폴로지는 공통 서비스를 공유하면서 워크로드를 격리하는 방법입니다. 이러한 서비스에는 ID 및 보안이 포함됩니다. 허브는 온-프레미스 네트워크에 대한 중앙 연결 지점 역할을 하는 VNet(가상 네트워크)입니다. 스포크는 허브와 피어하는 VNet입니다. 공유 서비스는 허브에 배포되고 개별 워크로드는 스포크 네트워크 내에 배포됩니다.

이 문서에서는 다음 방법을 설명합니다.

  • 허브 및 스포크 하이브리드 네트워크 참조 아키텍처 리소스 배치
  • 허브 네트워크 어플라이언스 리소스 만들기
  • Azure에서 허브 네트워크를 만들어 모든 리소스의 공통점 역할을 합니다.
  • Azure에서 스포크 VNet으로 개별 워크로드 만들기
  • 온-프레미스와 Azure 네트워크 간에 게이트웨이 및 연결 설정
  • 스포크 네트워크에 대한 VNet 피어링 만들기

1. 환경 구성

  • Azure 구독: Azure 구독이 아직 없는 경우 시작하기 전에 체험 계정을 만듭니다.

2. 허브 및 스포크 토폴로지 아키텍처 이해

허브 및 스포크 토폴로지에서 허브는 VNet입니다. VNet은 온-프레미스 네트워크에 대한 연결의 중심 지점 역할을 합니다. 스포크는 허브와 피어링하는 Vnet이며 워크로드를 격리하는 데 사용할 수 있습니다. 트래픽은 ExpressRoute 또는 VPN 게이트웨이 연결을 통해 온-프레미스 데이터 센터와 허브 사이를 흐릅니다. 다음 이미지는 허브 및 스포크 토폴로지의 구성 요소를 보여줍니다.

Hub and spoke topology architecture in Azure

허브 및 스포크 토폴로지의 이점

허브 및 스포크 네트워크 토폴로지는 공통 서비스를 공유하면서 워크로드를 격리하는 방법입니다. 이러한 서비스에는 ID 및 보안이 포함됩니다. 허브는 온-프레미스 네트워크에 대한 중앙 연결 지점으로 작동하는 VNet니다. 스포크는 허브와 피어하는 VNet입니다. 공유 서비스는 허브에 배포되고 개별 워크로드는 스포크 네트워크 내에 배포됩니다. 다음은 허브 및 스포크 네트워크 토폴로지의 몇 가지 이점입니다.

  • 여러 워크로드에서 공유할 수 있는 단일 위치에서 서비스를 중앙 집중화하여 비용을 절감 합니다. 이러한 워크로드에는 네트워크 가상 어플라이언스 및 DNS 서버가 포함됩니다.
  • 구독 제한 극복: 여러 구독의 VNet을 중앙 허브로 피어링하여 구독의 제한을 극복합니다.
  • 문제 구분: 중앙 IT(SecOps, InfraOps)와 워크로드(DevOps)간 문제를 분리합니다.

허브 및 스포크 아키텍처에 대한 일반적인 사용

허브 및 스포크 아키텍처에 대한 일반적인 용도는 다음과 같습니다.

  • 많은 고객이 서로 다른 환경에 배포된 워크로드를 가지고 있습니다. 이러한 환경에는 개발, 테스트 및 프로덕션이 포함됩니다. 이러한 워크로드는 DNS, IDS, NTP 또는 AD DS와 같은 서비스를 공유해야 하는 경우가 많습니다. 이러한 공유 서비스를 허브 VNet에 배치할 수 있습니다. 이렇게 하면 각 환경이 스포크에 배포되어 격리를 기본.
  • 서로 연결하지 않아도 되지만 공유 서비스에 액세스해야 하는 워크로드입니다.
  • 보안 측면에 대한 중앙 제어가 필요한 엔터프라이즈입니다.
  • 각 스포크에서 워크로드에 대해 분리된 관리가 필요한 엔터프라이즈입니다.

3. 데모 구성 요소 미리 보기

이 시리즈의 각 문서를 통해 작업할 때 다양한 구성 요소가 고유한 Terraform 스크립트에 정의됩니다. 만들고 배포한 데모 아키텍처는 다음 구성 요소로 구성됩니다.

  • 온-프레미스 네트워크. 조직과 함께 실행되는 프라이빗 로컬 영역 네트워크입니다. 허브 및 스포크 참조 아키텍처의 경우 Azure의 VNet을 사용하여 온-프레미스 네트워크를 시뮬레이션합니다.

  • VPN 디바이스. VPN 디바이스나 서비스는 온-프레미스 네트워크에 외부 연결을 제공합니다. VPN 디바이스는 하드웨어 어플라이언스 또는 소프트웨어 솔루션일 수 있습니다.

  • 허브 VNet. 허브는 온-프레미스 네트워크에 대한 연결의 중심 지점이며 서비스를 호스트할 수 있는 장소입니다. 이러한 서비스는 스포크 VNets에서 호스팅되는 다른 워크로드에서 사용할 수 있습니다.

  • 게이트웨이 서브넷. VNet 게이트웨이는 동일한 서브넷에 보관됩니다.

  • 스포크 VNet. 스포크는 다른 스포크와 별도로 관리되는 자체 VNet의 워크로드를 격리하는 데 사용할 수 있습니다. 각 워크로드에는 Azure Load Balancer를 통해 여러 서브넷이 연결된 여러 계층이 포함될 수 있습니다.

  • VNet 피어링. 피어링 연결을 사용하여 두 개의 VNet을 연결할 수 있습니다. 피어링 연결은 VNet 간의 전이적이지 않고 대기 시간이 짧은 연결입니다. 피어링되면 VNet은 라우터 없이 Azure 백본을 사용하여 트래픽을 교환합니다. 허브 및 스포크 네트워크 토폴로지에서 VNet 피어링을 사용하여 허브를 각 스포크에 연결합니다. 동일한 지역 또는 다른 지역의 VNet을 피어할 수 있습니다.

4. Terraform 코드 구현

  1. 전체 다중 아티클 시리즈에 대한 예제 코드를 포함하는 디렉터리를 만듭니다.

  2. main.tf라는 파일을 만들고 다음 코드를 삽입합니다.

    terraform {
    
      required_version = ">=0.12"
    
      required_providers {
        azurerm = {
          source  = "hashicorp/azurerm"
          version = "~>2.0"
        }
      }
    }
    
    provider "azurerm" {
      features {}
    }
    
  3. variables.tf라는 파일을 만들어 프로젝트 변수를 포함하고 다음 코드를 삽입합니다.

    variable "location" {
        description = "Location of the network"
        default     = "eastus"
    }
    
    variable "username" {
        description = "Username for Virtual Machines"
        default     = "azureuser"
    }
    
    variable "password" {
        description = "Password for Virtual Machines"
    }
    
    variable "vmsize" {
        description = "Size of the VMs"
        default     = "Standard_DS1_v2"
    }
    

    주요 정보:

    • 이 문서에서는 호출 terraform plan할 때 입력한 암호를 사용합니다. 실제 앱에서는 SSH 공개/프라이빗 키 쌍을 사용하는 것이 좋습니다.
    • SSH 키 및 Azure에 대한 자세한 내용은 Azure의 Windows에서 SSH 키를 사용하는 방법을 참조하세요.

Azure의 Terraform 문제 해결

Azure에서 Terraform을 사용할 때 일반적인 문제 해결

다음 단계