오늘의 인기 글
최근 글
최근 댓글
Today
Total
05-20 00:00
관리 메뉴

우노

[Terraform] Google Cloud Load Balancer(GCLB) 생성 본문

DevOps/Terraform

[Terraform] Google Cloud Load Balancer(GCLB) 생성

운호(Noah) 2023. 3. 18. 15:57

들어가기 앞서,

  • 해당 포스트에선, HTTP(S) Google Cloud Load Balancer(GCLB)를 Terraform을 사용해 생성하는 방법에 대해서 다뤄보겠습니다.

GCLB 주요 구성 요소

  • 프론트 엔드 : 클라이언트 요청을 받을 IP 주소, 포트, 프로토콜을 지정
    • Global Address
      • 클라이언트 요청을 받을 IP 주소 지정
    • Global Forwarding Rule
      • 클라이언트 요청을 Target Proxy에 전달
    • Target Proxy
      • 클라이언트 요청을 Url Map으로 전달
  • 호스트 및 경로 규칙 - 부하 분산기
    • Url Map
      • 클라이언트 요청 Url에 따라 특정 Backend Service로 트래픽 전달
  • 백엔드
    • Backend Service
      • Backend Service로 등록된 Backend에게 트래픽 전달
    • Health Check
      • Backend Service로 등록된 자원들에 대해서 주기적으로 Health Check
    • Instance Group/Network Endpoint Group
      • 최종적으로 트래픽을 받을 자원들

Terraform 자원 생성 순서

  • 최종적으로 트래픽을 받을 K8S 자원 생성 (해당 포스팅에선 생성되어있다고 가정하겠습니다.)
    • kubernetes_deployment
    • kubernetes_service
      • annotations를 통해 Backend Service에 등록할 수 있는 Neg 생성(backend 역할)
  • 백엔드 생성
    • google_compute_health_check
    • google_compute_backend_service
      • google_compute_health_check 연결
      • kubernetes_service의 neg(backend) 연결
  • 부하 분산기 생성
    • google_compute_url_map
  • 프론트엔드 생성
    • google_compute_global_address
    • google_compute_target_https_proxy
    • google_compute_global_forwarding_rule

Terraform 백엔드 생성 예제

  • google_compute_health_check 생성

      resource "google_compute_http_health_check" "default" {
        name               = "health-check"
        request_path       = "/"
        check_interval_sec = 1
        timeout_sec        = 1
      }
  • google_compute_backend_service 생성

      resource "google_compute_backend_service" "default" {
        provider = google-beta
    
        name = "backend-service"
    
        protocol = "HTTP"
        load_balancing_scheme = "EXTERNAL_MANAGED"
    
        health_checks = [google_compute_http_health_check.default.id]
    
        backend {
          balancing_mode = "RATE"
          max_rate_per_endpoint = 100
    
          group = "kubernetes_service neg(backend) 연결"
        }
    
        log_config {
          enable = true
          sample_rate = 1
        }
    
        depends_on = [
          kubernetes_service."kubernetes_service 리소스명 작성"
        ]
      }
    • google_compute_health_check 연결
    • kubernetes_service의 neg(backend) 연결
  • 참고

Terraform 부하 분산기 생성 예제

  • google_compute_url_map 생성

      resource "google_compute_url_map" "urlmap" {
        name        = "urlmap"
        description = "a description"
    
        default_service = google_compute_backend_bucket.static.id
    
        host_rule {
          hosts        = ["mysite.com"]
          path_matcher = "mysite"
        }
    
        path_matcher {
          name            = "mysite"
          default_service = google_compute_backend_bucket.static.id
    
          path_rule {
            paths   = ["/login"]
            service = google_compute_backend_service.login.id
          }
        }
      }
    • 클라이언트 요청 Url에 따라 특정 Backend Service 또는 Backend Bucket으로 트래픽 전달
  • 참고

Terraform 프런트엔드 생성 예제

참고

Comments