GCP Terraform GKE 플랫폼 설계 및 구현
노드 풀 업그레이드 중에도 용량을 유지하는 SURGE 설정과, VPN 대역만 허용하는 방화벽 기본선을 코드로 담은 모듈 모음입니다.
노드 풀 SURGE 설정
이 코드가 하는 일: game 노드 풀을 3~12대 사이에서 자동 확장하도록 정의하고, 업그레이드 전략을 SURGE로 둡니다. max_surge 5는 새 노드 5대를 먼저 올린다는 뜻이고, max_unavailable 0은 대체 노드가 준비되기 전에는 기존 노드를 하나도 빼지 않는다는 뜻이라 업그레이드 중에도 서비스 용량이 줄지 않습니다. 아래의 soak 시간 값은 주석대로 전략을 BLUE_GREEN으로 바꿨을 때만 읽힙니다.
node_pool = {
game = {
autoscaling_enable = true
min_node_count = 3
max_node_count = 12
location_policy = "BALANCED"
node_count = null
pool_version = "1.31"
machine_type = "e2-standard-4"
tags = ["gke-node"]
# Five extra nodes come up first, and no node is taken away until its replacement is ready.
strategy = ["SURGE"]
max_surge = 5
max_unavailable = 0
# Soak time is read only when the strategy is switched to BLUE_GREEN.
node_pool_soak_duration = "3600s"
}
}
VPN만 허용하는 방화벽 기본선
이 코드가 하는 일: 방화벽 규칙을 맵으로 선언하고, 그중 c2s-inbound-vpn 규칙이 들어오는(INGRESS) tcp 트래픽을 허용합니다. 출발지는 변수로 받은 VPN 대역(vpn_source_ranges)뿐이고 포트도 변수로 받은 관리 포트(management_ports)만 열며, 우선순위 1000으로 둬 뒤에 오는 차단 규칙보다 먼저 적용됩니다. 대역과 포트를 변수로 빼 두었기 때문에 환경이 달라도 규칙 구조는 그대로 재사용됩니다.
locals {
firewall_rules = {
c2s-inbound-vpn = {
direction = "INGRESS"
action = "allow"
ranges = var.vpn_source_ranges
sources = null
targets = null
use_service_accounts = false
enable_logging = false
priority = "1000"
rules = [
{
protocol = "tcp"
ports = var.management_ports
}
]
}