우노
[Terraform] Google Cloud Load Balancer(GCLB) 생성 본문
들어가기 앞서,
- 해당 포스트에선, HTTP(S) Google Cloud Load Balancer(GCLB)를 Terraform을 사용해 생성하는 방법에 대해서 다뤄보겠습니다.
GCLB 주요 구성 요소
- 프론트 엔드 : 클라이언트 요청을 받을 IP 주소, 포트, 프로토콜을 지정
- Global Address
- 클라이언트 요청을 받을 IP 주소 지정
- Global Forwarding Rule
- 클라이언트 요청을 Target Proxy에 전달
- Target Proxy
- 클라이언트 요청을 Url Map으로 전달
- Global Address
- 호스트 및 경로 규칙 - 부하 분산기
- Url Map
- 클라이언트 요청 Url에 따라 특정 Backend Service로 트래픽 전달
- Url Map
- 백엔드
- Backend Service
- Backend Service로 등록된 Backend에게 트래픽 전달
- Health Check
- Backend Service로 등록된 자원들에 대해서 주기적으로 Health Check
- Instance Group/Network Endpoint Group
- 최종적으로 트래픽을 받을 자원들
- Backend Service
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 프런트엔드 생성 예제
Global Address : 클라이언트 요청을 받을 IP 주소 지정
resource "google_compute_global_address" "default" { name = "global-appserver-ip" address_type = "EXTERNAL" }
Target Proxy : 클라이언트 요청을 Url Map으로 전달
resource "google_compute_target_https_proxy" "default" { name = "test-proxy" url_map = google_compute_url_map.default.id ssl_certificates = [google_compute_ssl_certificate.default.id] }
Global Forwarding Rule : 클라이언트 요청을 Target Proxy에 전달
resource "google_compute_global_forwarding_rule" "default" { name = "ssl-proxy-xlb-forwarding-rule" provider = google ip_protocol = "TCP" load_balancing_scheme = "EXTERNAL" port_range = "443" target = google_compute_target_https_proxy.default.id ip_address = google_compute_global_address.default.id }
참고
- https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_global_address
- https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_target_https_proxy
- https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_global_forwarding_rule
참고
'DevOps > Terraform' 카테고리의 다른 글
[Terraform] Google Service Account와 GKE Kubernetes Service Account 매핑 (0) | 2023.04.02 |
---|---|
[Terraform] K8S Deployment Volume Mount (0) | 2023.03.30 |
[Terraform] provider "kubernetes” 선언 시 kubeconfig 파일 작성 방법 (0) | 2023.02.23 |
[Terraform] state 자원 확인 방법 (0) | 2023.02.16 |
[Terraform] 리소스 제거 방법 (0) | 2023.02.16 |
Comments