본문 바로가기
DevOps

[DevOps] HashiCorp

by Yoon_estar 2024. 12. 13.
728x90

개요

HashiCorp는 DevOps와 인프라 자동화를 위한 도구를 개발하는 소프트웨어 회사입니다. HashiCorp는 클라우드 인프라 관리와 배포를 간소화하고 자동화하기 위해 다양한 오픈소스 및 상용 소프트웨어 제품을 제공합니다. 이 회사는 클라우드 환경멀티클라우드 환경을 포함한 다양한 환경에서 일관된 워크플로우를 지원하는 도구로 유명합니다.

 

HashiCorp의 주요 제품

HashiCorp는 클라우드 네이티브와 인프라 관리에 중점을 둔 다음과 같은 도구들을 제공합니다

 

1. Terraform ( 인프라 자동화와 관리 )

  • 인프라를 코드(Infrastructure as Code, IaC)로 관리할 수 있게 하는 도구
  • 클라우드 자원을 프로비저닝, 관리, 및 변경
  • AWS, Azure, GCP 등 다양한 클라우드 서비스의 자원 생성 및 관리

 

2. Vault ( 마이크로서비스 환경의 네트워킹 )

  • 비밀 관리 및 데이터 보호 도구
  • API 키, 비밀번호, 인증서 같은 민감한 정보를 안전하게 저장 및 접근 제어
  • 애플리케이션에서 민감한 데이터를 관리하거나 암호화 서비스 제공

 

3. Consul ( 보안 비밀 관리와 암호화 )

  • 서비스 네트워킹서비스 디스커버리 도구
  • 마이크로서비스 간 통신을 관리하고 네트워크 정책을 제어
  • 서비스 레지스트리, 헬스 체크, 분산 트래픽 관리

 

4. Nomad ( 컨테이너화된 워크로드 배포 )

  • 컨테이너 오케스트레이션 및 워크로드 관리 도구
  • 컨테이너뿐만 아니라 VM, 배치 작업 등을 관리 가능
  • Kubernetes 대안으로 사용 가능하며, 간단한 작업 분배를 지원

 

5. Packer ( 이미지 생성 )

  • 이미지 생성 도구
  • 여러 플랫폼(VM, 클라우드)에 동일한 머신 이미지를 생성
  • 자동화된 VM 이미지 빌드

 

6. Boundary ( 제로 트러스트 아키텍처 구축 )

  • 보안 원격 액세스 도구
  • 인프라의 특정 자원에 대해 안전하고 간단한 원격 액세스 제공
  • VPN 대체 및 Zero Trust 액세스 구현

 

HashiCorp의 특징

 

  • 클라우드 및 멀티클라우드 지원
    • AWS, Azure, GCP 등 다양한 클라우드 환경에서 동작.
  • 오픈소스 기반
    • 대부분의 도구는 오픈소스로 제공되며, 상용 버전도 지원.
  • 자동화 중심
    • DevOps 워크플로우와 CI/CD 파이프라인에서 널리 사용.
  • 확장성과 유연성
    • 다양한 규모의 프로젝트와 워크로드에서 활용 가능.

 

실제 사용 예시(실습)

 

1단계 : Terraform을 활용한 인프라 프로비저닝

  • 원하는 인프라 상태를 정의, 업데이트, 확장, 삭제

 

# vi test.tf

provider "vsphere" {
  user           = "administrator@vsphere.local"
  password       = "password"
  server         = "vsphere.local"
  insecure       = true
}
resource "vsphere_virtual_machine" "vm" {
  name            = "ci-server"
  resource_pool_id = data.vsphere_compute_cluster.cluster.resource_pool_id
  datastore_id     = data.vsphere_datastore.datastore.id
}

# terraform plan // 검토

# terraform apply // 인프라 프로비저닝

 

2단계 : Vault를 통한 비밀 관리

  • Vault는 API 키, 비밀번호, 인증서와 같은 민감한 정보를 보호하는 도구

구현 방법

  1. Vault 서버 설정 
    - Vault를 보안처리 된 VM 또는 Kubernetes 환경에 배포
    - 초기화 및 언실(Unseal) 작업을 통해 Vault를 활성화
  2. 비밀 저장 및 접근
    - CLI 또는 API를 통해 민감한 정보를 저장
    -  안전하게 정보를 가져온다.

    vault kv put secret/ci-pipeline/token value="github_personal_token"
    vault kv get secret/ci-pipeline/token


  3. 동적 screte 생성
    - Vault를 사용하여 데이터베이스 자격증명과 같은 비밀을 동적으로 생성하도록 설정

 

3단계 : Consul을 통한 서비스 네트워킹 관리

구현 방법

  1. 서비스 등록
    - CI/CD 서비스(예: Jenkins, GitLab Runner)를 Consul에 등록
  2. 헬스 체크
    - 서비스의 가용성을 모니터링하기 위한 헬스 체크를 정의
  3. 트래픽 관리
    - 마이크로서비스 간 통신 정책을 설정하고 카나리 배포를 위한 트래픽 분할을 구현
{
  "service": {
    "name": "jenkins",
    "port": 8080
  }
}

 

 

 

4단계 : Nomad를 활용한 오케스트레이션

  • CI/CD 빌드 에이전트 또는 애플리케이션을 실행하기 위한 작업(job)을 정의
job "ci-agent" {
  datacenters = ["dc1"]
  group "build-agents" {
    task "agent" {
      driver = "docker"
      config {
        image = "jenkins/jenkins"
      }
    }
  }
}
  • 배포 및 확장
# nomad run
# nomad scale

 

5단계 : Packer를 활용한 이미지 생성

  • 이미지 템플릿 정의(기본 운영 체제와 필요한 설정을 Packer 템플릿으로 정의)
{
  "builders": [{
    "type": "vsphere-iso",
    "vcenter_server": "vsphere.local",
    "username": "administrator@vsphere.local",
    "password": "password"
  }],
  "provisioners": [{
    "type": "shell",
    "inline": [
      "apt-get update",
      "apt-get install -y docker.io"
    ]
  }]
}

 

  • 이미지 빌드
    • packer build 명령으로 이미지를 생성
    • Terraform 등을 통해 이미지를 배포

 

6단계 : Boundary를 통한 보안 엑세스

  • Boundary는 인프라 리소스에 안전하고 간단한 원격 액세스를 제공

대상 (Target) 설정

  • ESXi VM 또는 특정 리소스에 대한 안전한 액세스를 정의
target "ci-server" {
  type       = "ssh"
  address    = "192.168.1.100"
  port       = 22
  credentials {
    username = "admin"
    password = "admin-password"
  }
}

 

리소스 엑세스

  • Boundary 클라이언트를 사용해 VPN 없이 안전하게 연결
boundary connect ssh -target-id <target-id>