🚀 Envoy Gateway 운영 전환 체크리스트
본 문서는 Envoy Gateway를 설치한 후, 실제 운영 환경의 SLB(Server Load Balancer/L4)와 연동하여 서비스를 오픈하기 전 반드시 확인해야 할 사항들을 정의합니다.
🏗️ 배경 개념 정리
SLB (Server Load Balancer)
클라이언트 요청을 여러 워커 노드에 분산시켜주는 장비입니다. VIP로 들어온 트래픽을 워커 노드의 NodePort로 전달합니다.
- 흐름:
Client → VIP(SLB) → Worker Node:30080 → Envoy → Service
SNAT vs DSR
SLB가 트래픽을 전달하는 방식에 따라 클라이언트 실IP 보존 여부가 결정됩니다.
| 방식 | 설명 | 클라이언트 실IP 보존 |
|---|---|---|
| SNAT | SLB가 출발지 IP를 자신의 IP로 변조 | ❌ (SLB IP만 보임) |
| DSR | 패킷 소스 IP를 유지하며 전달 | ✅ (실IP 보존) |
네트워크 팀 문의 사항
"운영 중인 SLB가 SNAT 방식인가요, DSR 방식인가요?"라고 사전에 확인하십시오.
PROXY Protocol (PP)
SNAT 방식에서 실IP를 보존하기 위해 패킷 헤더에 원본 정보를 포함하는 기술입니다.
- 주의: 현재 표준 설정에는 PP가 활성화되어 있습니다. SLB가 PP를 지원하지 않는데 Envoy에서 켜져 있으면 통신이 즉시 차단됩니다.
🛠️ 운영 환경 전환 절차
1단계: 워커 노드 포트 개방 확인
NodePort(30080, 30443)는 커널 규칙으로 동작하여 일반적인 포트 확인 명령으로 안 보일 수 있습니다. TCP 연결을 직접 테스트하십시오.
2단계: 네트워크 팀 최종 확인 항목
- [ ] L4 라우팅: VIP → Worker NodePort(30080/30443) 등록 완료 여부
- [ ] SLB 방식: SNAT 인지 DSR 인지 확인
- [ ] PP 지원: SLB에서 PROXY Protocol 송신 설정을 했는지 확인
- [ ] Health Check: L4 장비에서 워커 노드 포트 상태 체크(TCP/HTTP) 설정 여부
3단계: PROXY Protocol (PP) 설정 조정
2단계 확인 결과에 따라 정책 유지 여부를 결정합니다.
A. SLB가 PP를 보내지 않는 경우 (일반 하드웨어 L4): 정책을 삭제해야 통신이 가능합니다.
B. SLB가 PP를 보내는 경우: 기본 정책을 유지합니다.
4단계: Gateway 주소를 VIP로 변경
외부에서 인식하는 게이트웨이 주소를 실제 VIP로 패치합니다.
kubectl patch gateway cmp-gateway -n envoy-gateway-system \
--type='merge' \
-p '{"spec":{"addresses":[{"type":"IPAddress","value":"<VIP_IP>"}]}}'
5단계: 상태 및 접속 확인
# Gateway 주소가 VIP로 반영되었는지 확인
kubectl get gateway cmp-gateway -n envoy-gateway-system
# 실제 접속 테스트 (응답 코드 확인)
curl -s -o /dev/null -w "%{http_code}\n" https://<DOMAIN>/
📋 클라이언트 실IP 보존 현황 요약
| SLB 방식 | PP 지원 여부 | Envoy에서 보이는 소스 IP |
|---|---|---|
| DSR | 불필요 | 실제 클라이언트 IP |
| SNAT + PP | 지원 | 실제 클라이언트 IP |
| SNAT (No PP) | 미지원 | SLB 장비 IP (실IP 손실) |
🔄 롤백 방법 (Rollback)
문제가 발생하여 이전 상태(externalIPs 방식)로 되돌리는 방법입니다.
# 1. Gateway 주소를 다시 워커 노드 IP로 변경
kubectl patch gateway cmp-gateway -n envoy-gateway-system --type='merge' \
-p '{"spec":{"addresses":[{"type":"IPAddress","value":"<WORKER_NODE_IP>"}]}}'
# 2. PP 정책을 삭제했다면 재생성 (히어독 방식)
kubectl apply -f - <<'EOF'
apiVersion: gateway.envoyproxy.io/v1alpha1
kind: ClientTrafficPolicy
metadata:
name: enable-proxy-protocol
namespace: envoy-gateway-system
spec:
targetRef:
group: gateway.networking.k8s.io
kind: Gateway
name: cmp-gateway
enableProxyProtocol: true
EOF