PF-02 · GCP · IaC
GCP Terraform GKE 플랫폼
노드 풀 업그레이드 중에도 용량을 유지하는 SURGE 설정과, VPN 대역만 허용하는 방화벽 기본선을 코드로 담은 모듈 모음입니다.
- 역할
- 설계 · 구현
- 기간
- 개인 프로젝트 · 2026.11 공개
- CSP
- GCP
- 규모
- 모듈 22종 · 예제 3개
- 핵심 기술
- Terraform · GCP · GKE · Cloud Logging · Cloud Monitoring
- 22
- 공개한 Terraform 모듈
- 5
- max_surge로 먼저 뜨는 새 노드
- 0
- max_unavailable, 동시에 빠지는 노드
한눈에 보기
문제
GKE 노드를 업그레이드하는 동안 서비스 용량이 줄면 안 됐고, 관리 포트는 VPN 대역에서만 열려야 했습니다.
접근
노드 풀 업그레이드 전략을 SURGE로 두어 새 노드 5대를 먼저 올리고 사용 불가 노드를 0으로 유지합니다. c2sfirewall 모듈은 우선순위 1000으로 VPN의 관리 포트만 열고, 우선순위 65534로 그 외 tcp와 udp 아웃바운드를 막습니다.
결과
새 노드가 준비된 뒤에야 기존 노드가 빠집니다. 호스트 장애는 hostError 감사 로그에서 로그 기반 지표, 알림 정책, Slack 채널 순으로 이어지도록 구성했습니다.
자세히 보기
노드 풀 SURGE 설정
이 코드가 하는 일: 새 노드를 먼저 올려 업그레이드 중 빠지는 노드를 0으로 유지합니다.
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만 허용하는 방화벽 기본선
이 코드가 하는 일: VPN 대역의 관리 포트만 우선순위 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
}
]
}배운 점
설정 이름만으로 동작을 판단하면 틀릴 수 있습니다. soak 시간은 BLUE_GREEN 전략에서만 읽히기 때문에 SURGE 예제에는 쓰지 않았습니다.
다음에 개선할 점
이 레포는 GKE를 Terraform으로 정의한 범위까지 다룹니다. CI에서는 예제를 검증만 하고 apply하지 않습니다.