본문 바로가기
IaC

[IaC] Terraform Enterprise AKS에 배포하기

by cloudraw 2025. 2. 7.

안녕하세요, 클라우드로입니다!

 

오늘은 대표적인 IaC도구인 Terraform의 Enterprise 버전을 Kubernetes에 배포하는 방법에 대해 다뤄보고자 합니다.

 

Terraform Enterprise란 Terraform의 설치형 버전(자체 호스팅)으로 조직 및 기업 단위에서 사용하고 관리하기 편하도록 상용화한 제품으로 제공되는 기능은 Terraform Cloud(SaaS형)와 비슷하나 Sentinel(정책 및 감사), Single Sign-On SAML 등 더 많은 기능을 제공합니다.

 

Terraform Enterprise 배포 공식 가이드

 

주요 리소스

이 글에서 사용하는 리소스의 종류와 버전은 다음과 같습니다.(각 링크는 공식 가이드의 해당 부분 설정과 연결됩니다.)

 

1. Terraform Enterprise v202501-1

2. Kubernetes Service: Azure Kubernetes Service v1.28.15

3. ObjectStorage: Azure Storage Account 범용 v2

  - 상태 파일, 계획 파일, 실행 로그, 구성 버전과 같이 운영 중에 생성하는 아티팩트 저장

4. Database: Azure Database for PostgreSQL - 유연한 서버 v16.4 

  - 상태 저장 애플리케이션 데이터, 작업 공간 설정, 조직 설정, 실행 정보 및 사용자 정보 저장

  - Postgresql Extensions을 추가해 주어야 함

  - 설정>서버 매개 변수> azure.extensions 검색 값에서 체크(CITEXT, HSTORE, UUID-OSSP)> 저장

 

5. Cache: Redis v7.4.0

  - 백그라운드 작업 스케줄러 대기열을 캐싱하고 관리

 

사전 요구사항

1. Terraform Enterprise 라이센스(hclic 확장자를 가진 라이센스 파일)

2. TLS 인증서(Cert Manager를 활용하여 발급하거나 발급된 인증서 파일 활용)

3. 도메인(Terraform Enterprise Host)

 

배포하기

1. Namespace 생성

kubectl create -n terraform-enterprise

 

2. Secret 등록(Terraform Enterprise 라이센스 - Terraform 레지스트리에서 이미지를 가져오기 위한 Secret)

 - imagePullSecrets의 이름이 terraform-enterprise로 설정되어 있으므로 변경하지 말 것! 변경시 아래 4번 항목에서 override해

주어야 합니다.

kubectl create secret docker-registry terraform-enterprise --docker-server=images.releases.hashicorp.com --docker-username=terraform --docker-password=$(cat ./terraform_enterprise.hclic)  -n terraform-enterprise

 

3. Helm 레포지토리 추가

helm repo add hashicorp https://helm.releases.hashicorp.com

 

4. Helm override value 작성(values.yaml) - Override 값 참조(Artifact Hub, 공식 가이드)

# terraform-enterprise-certificates 이름의 Secret로 기본 설정되어있음. 
# 해당이름의 Secret로 인증서 정보 등록하거나 TLS인증서 정보를 아래 직접입력하여 사용 
# tls:
#   certData: 
#   keyData: 
#   caCertData: 

image:
  repository: images.releases.hashicorp.com
  name: hashicorp/terraform-enterprise
  tag: "v202501-1"
  
env:
  secrets:
    TFE_LICENSE: #TFE LICENCE파일을 열어서 복사
    TFE_ENCRYPTION_PASSWORD: #데이터를 암호화할 비밀번호
    TFE_DATABASE_PASSWORD: #연결될 데이터베이스 비밀번호
    TFE_REDIS_PASSWORD: #연결될 Redis 비밀번호
    TFE_OBJECT_STORAGE_AZURE_ACCOUNT_KEY: #연결될 Storage Secret
  variables:
    TFE_HOSTNAME: #인증서를 발급받은 host명
    TFE_DATABASE_HOST: #연결될 데이터베이스 host
    TFE_DATABASE_NAME: #연결될 데이터베이스 database 이름
    TFE_DATABASE_USER: #연결될 데이터베이스 사용자
    TFE_REDIS_HOST: #연결될 Redis host(Redis 보안 적용시 configuration reference 참조)
    TFE_REDIS_USE_TLS: #Redis Tls 사용여부 "true" or "false
    TFE_REDIS_USE_AUTH: #Redis 인증 사용 여부 "true" or "false"
    TFE_REDIS_USER: #연결될 Redis 사용자 이름
    TFE_OBJECT_STORAGE_TYPE: azure
    TFE_OBJECT_STORAGE_AZURE_USE_MSI: false
    TFE_OBJECT_STORAGE_AZURE_ACCOUNT_NAME: #연결될 스토리지 이름
    TFE_OBJECT_STORAGE_AZURE_CONTAINER:#연결될 스토리지 컨테이너 이름

 

5. Terraform Enterprise 배포

helm install terraform-enterprise hashicorp/terraform-enterprise --version 1.4.0 --namespace=terraform-enterprise --values=values.yaml

 

 - 약 3~5분 정도 초기 설정 후 파드가 running 상태로 전환됩니다.

 - 로그는 /var/logs/terraform-enterprise 폴더에서 확인 가능합니다.

 - 성공적으로 배포 후 맵핑된 Host 접속하면 아래와 같은 로그인 화면이 나옵니다. 

 

 

* Network Requirements for Terraform Enterprise

- Private 환경에서 운영시 네트워크 요구사항에 맞춰 규칙을 만들어 주어야 합니다.

 

6. 관리자 계정 생성

- 최초 관리자 계정을 생성하기 위해 토큰을 발급받고 해당 토큰으로 접속하여 계정을 생성해야 합니다.

- 토큰 발급 명령어

kubectl exec -it -n <TFE_NAMESPACE> <POD_NAME> -- tfectl admin token

 

- https://<TFE_HOSTNAME>/admin/account/new?token=<TOKEN>} 다음 url에 접속하여 관리자 계정을 생성합니다.

- 로그인시 화면은 다음과 같습니다.

 

 

지금까지 Terraform을 Kubernetes(Azure) 환경에 배포해 보았습니다.

CloudStudio에서 Terraform Cloud와 Terraform Enterprise의 연동을 모두 지원하고 있습니다.

 

Cloudraw는 Hashicorp의 Terraform Technical Partnership을 진행하고 있습니다.

CloudStudio는 물론 Terraform관련 문의도 언제든 환영합니다.

 

감사합니다.

 

 


 

    

 

Cloudraw는 쉽게 클라우드 인프라를 그리고 사용할 수 있는 서비스를 제공하기 위해 노력하고 있습니다.

 

클라우드가 있는 곳 어디든 Cloudraw가 함께합니다.

 

📨 help@cloudraw.kr