반응형
문제 제기: ALB 상태검사 실패
EKS에서 Auto Scaling을 하다 보면 다음과 같은 문제가 발생할 수 있다:
- 스케일 인 시: 상태검사를 담당하던 Pod가 사라져서 ALB Target Group에서 Unhealthy 발생
- 스케일 아웃 시: 새 노드에는 상태검사 경로를 처리할 Pod가 없어 역시 Unhealthy 처리
해결 방안 정리
1. readinessProbe + preStop으로 graceful termination 처리
Pod가 종료되기 전에 ALB가 트래픽을 멈추게 하려면:
lifecycle:
preStop:
exec:
command: ["/bin/sh", "-c", "sleep 10"]
readinessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 3
periodSeconds: 5
종료 전에 sleep 등을 사용해 ALB가 Unhealthy로 인식하고 타겟에서 제거할 시간을 벌어줌.
2. 상태검사용 Dummy Pod를 모든 노드에 배포
ALB 상태검사는 /healthz 같은 단순 경로만 검사하므로, 이를 처리하는 경량화된 Pod를 DaemonSet 등으로 모든 노드에 배포하면 문제 예방 가능:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: health-check-daemon
spec:
template:
spec:
containers:
- name: healthz
image: hashicorp/http-echo
args: ["-text=ok"]
3. ALB Ingress에서 target-type: ip 사용
annotations:
alb.ingress.kubernetes.io/target-type: ip
- ALB가 Kubernetes 노드가 아닌 Pod의 IP를 직접 타겟으로 등록
- ClusterIP, NodePort 같은 Kubernetes Service를 우회함
Pod가 VPC 내부 IP를 갖고 있어야 하므로, aws-vpc-cni 플러그인을 사용하는 EKS에서만 유효
실무에서 생기는 오해 및 문제
Pod가 직접 ENI를 갖는 것처럼 보이지만...
- 대부분의 경우, Pod는 노드의 ENI에서 할당된 secondary IP를 사용
- Pod에 직접 ENI를 붙이는 경우는 보안 격리나 특수 목적에서만 사용됨
- 예외적으로 아래처럼 설정하면 Pod에 ENI가 붙기도 함:
metadata:
annotations:
vpc.amazonaws.com/pod-eni: "true"
target-type: ip는 편하지만 위험요소도 많음
항목위험 요소
| Service selector 무시 | kubectl get svc로 상태를 확인해도 의미 없음 |
| Pod IP 변동 | 재시작 시 IP 바뀌면 ALB 등록 갱신 전까지 트래픽 실패 가능성 |
| ENI 할당 제한 | Pod 수 늘어나면 서브넷 IP 부족/ENI 부족 문제 발생 가능 |
| NetworkPolicy 통제 어려움 | Pod가 VPC 사설 IP를 직접 가지므로 제어 복잡해짐 |
핵심 요약
| 항목 | 정리 |
| ALB 상태검사 실패 방지 | readinessProbe + preStop + Dummy health pod 사용 |
| target-type: ip 특징 | ALB가 Pod IP로 직접 트래픽 전달 (Service 우회) |
| Pod ENI | 일반적으로는 없음. Pod는 노드 ENI에서 IP 할당 |
| 실무 권장 | DaemonSet + SpreadConstraints + readinessProbe 조합 |
마무리
ALB와 EKS의 연동은 단순해보이지만, 상태검사와 트래픽 전달 경로에 대해 깊이 이해하고 있어야 운영 중 문제를 미리 방지할 수 있습니다. 특히 target-type: ip와 같이 Kubernetes Service를 우회하는 구조는 그에 맞는 관찰 및 제어 전략이 필요합니다.
반응형
'CLOUD > AWS' 카테고리의 다른 글
| api gateway 에서 root_method(/) 와 proxy_method({proxy+}) (1) | 2025.08.02 |
|---|---|
| [EKS + NLB 연동 시 Ingress Controller 구성 전략 비교] (0) | 2025.07.31 |
| AWS API Gateway + NLB + Ingress NGINX 연동 시 주의할 점과 라우팅 구조 (1) | 2025.07.29 |
| AWS EKS 의 OIDC와 IRSA 란? (1) | 2025.07.28 |
| [AWS EKS] aws-auth와 iam role 확인 (0) | 2025.07.24 |
댓글