ALB Elastic IP 자동 할당 이슈
문제 상황#
- 발생일: 2026-03-22
- 환경: EKS Staging (goormgb-staging-eks)
- 증상: Internet-facing ALB에 Elastic IP가 자동으로 할당되어 비용 발생
증상#
발견 경위#
- ArgoCD를
type: LoadBalancer(NLB)에서type: ClusterIP(ALB Ingress)로 변경 - NLB 삭제 후 EIP 2개가 남아있음을 발견
- EIP 연결 해제/릴리스 시도 시 권한 에러 발생
에러 메시지#
An error occurred (AuthFailure) when calling the DisassociateAddress operation:
You do not have permission to access the specified resource.
확인된 상태#
aws ec2 describe-network-interfaces \
--filters "Name=addresses.private-ip-address,Values=10.0.18.47" \
--query 'NetworkInterfaces[*].[Description,NetworkInterfaceId]'
# 결과: ELB app/k8s-stagingalb-4f414fcf8f/...
원인 분석#
AWS 공식 답변#
Internet-facing ALB의 자동 EIP 할당은 정상 동작입니다.
핵심 사항#
| 항목 | 설명 |
|---|---|
| 자동 할당 | Internet-facing ALB는 EC2 퍼블릭 IPv4 주소 풀에서 자동으로 EIP 할당 |
| 서비스 관리 | service_managed: ALB로 표시되며 AWS가 완전히 관리 |
| 수정 불가 | 수동으로 disassociate/release 불가능 (권한 에러 정상) |
| 할당량 미포함 | 계정의 EIP 제한(quota)에 포함되지 않음 |
| 자동 정리 | ALB 삭제 시 자동으로 해제됨 |
비용 분석#
Public IPv4 주소 비용 (2024년 2월부터 적용)#
- 시간당: $0.005 per IP
- ALB 구성: 2개 AZ = 2개 IP
- 월간 비용: 2 × $0.005 × 24 × 30 = 약 $7.20/월
Staging 환경 예상 비용#
ALB EIP (2개) : ~$7.20/월
NAT Gateway EIP : ~$3.60/월 (별도)
----------------------------
총 Public IP 비용 : ~$10.80/월
해결#
Option 1: 현재 유지 (권장 - Staging)#
인터넷 → ALB (Public IP) → Pod
장점:
- 설정 변경 없음
- 가장 간단한 구조
- Grafana, ArgoCD 등 관리 도구 직접 접근 가능
단점:
- 월 ~$7 비용 발생
적합한 경우:
- Staging/Dev 환경
- 관리 도구를 인터넷에서 직접 접근 필요
- 비용보다 편의성 우선
Option 2: Internal ALB + CloudFront VPC Origin#
인터넷 → CloudFront → (VPC Origin) → Internal ALB → Pod
장점:
- ALB Public IP 비용 없음
- CloudFront 캐싱/보안 이점
- WAF 적용 용이
단점:
- CloudFront 비용 별도 발생
- VPC Origin 설정 복잡
- 모든 도메인을 CloudFront로 라우팅해야 함
설정 방법:
# Ingress annotation 변경
alb.ingress.kubernetes.io/scheme: internal # internet-facing → internal
# CloudFront VPC Origin (Terraform)
resource "aws_cloudfront_vpc_origin" "alb" {
vpc_origin_endpoint_config {
name = "alb-origin"
arn = aws_lb.internal.arn
http_port = 80
https_port = 443
origin_protocol_policy = "https-only"
}
}
적합한 경우:
- Production 환경
- 강화된 보안 필요
- 모든 트래픽 CloudFront 경유 가능
Option 3: 관리 도구 VPN 전용 접근#
api.staging.playball.one → CloudFront → Internal ALB
grafana/argocd/kiali → VPN → Internal ALB
장점:
- 관리 도구 인터넷 미노출 (보안 강화)
- API만 public 노출
단점:
- VPN 설정/운영 필요
- 관리 도구 접근 불편
적합한 경우:
- 보안 요구사항 높은 환경
- 이미 VPN 인프라 있는 경우
Option 4: BYOIP + IPAM (Enterprise)#
자체 IP 블록 사용 → AWS IPAM 통합 → ALB 할당
장점:
- Public IPv4 비용 절감 가능
- 고정 IP 블록 사용 가능
- IP allowlist 관리 용이
단점:
- BYOIP 구매 필요
- 설정 복잡
- 대규모 환경에서만 비용 효율적
적합한 경우:
- 대규모 Production
- IP allowlist 요구사항 있는 경우
- 기존 IP 블록 보유
현재 Staging 결정#
선택: Option 1 (현재 유지)#
이유:
- Staging 환경으로 월 $7 비용 수용 가능
- Grafana, ArgoCD, Kiali 직접 접근 필요
- 추가 설정 복잡도 회피
- 프로젝트 종료 예정 (2026-04)으로 단기 운영
현재 아키텍처#
┌─────────────────────────────────────────┐
│ Internet │
└─────────────────┬───────────────────────┘
│
┌───────────────────────┼───────────────────────┐
│ │ │
▼ ▼ ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ CloudFront │ │ Direct Access │ │ Direct Access │
│ api.staging... │ │ grafana.staging │ │ argocd.staging │
└────────┬────────┘ └────────┬────────┘ └────────┬────────┘
│ │ │
└──────────────────────┼──────────────────────┘
│
▼
┌───────────────────────────────┐
│ ALB (k8s-stagingalb-...) │
│ - internet-facing │
│ - Auto EIP (AWS managed) │
│ - 2 AZ (ap-northeast-2a/c) │
└───────────────┬───────────────┘
│
┌─────────────────────┼─────────────────────┐
│ │ │
▼ ▼ ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Istio Gateway │ │ Grafana │ │ ArgoCD │
│ → VirtualService│ │ (monitoring) │ │ (argocd) │
│ → Backend Pods │ └─────────────────┘ └─────────────────┘
└─────────────────┘
관련 설정 파일#
ALB Ingress (staging/charts/alb-ingress/values.yaml)#
ingress:
annotations:
alb.ingress.kubernetes.io/scheme: internet-facing # internal로 변경 가능
alb.ingress.kubernetes.io/target-type: ip
ArgoCD Application (staging/root/values.yaml)#
gitCharts:
alb-ingress:
enabled: true
path: staging/charts/alb-ingress
namespace: istio-system
syncWave: "5"
syncOptions:
- ApplyOutOfSyncOnly=true
- PrunePropagationPolicy=foreground
- Prune=false # multi-namespace 배포로 prune 비활성화
참고 자료#
트러블슈팅 체크리스트#
EIP 관련 에러 발생 시#
- EIP가
service_managed: ALB인지 확인 - ALB가 internet-facing인지 확인
- EIP 직접 해제 불가 - ALB 삭제 필요
ALB 재생성 시 주의사항#
- External-DNS가 새 ALB 주소로 업데이트되는지 확인
- DNS 전파 시간 대기 (1-2분)
- Target Group 등록 확인
ArgoCD alb-ingress 앱 이슈#
-
Prune=false설정 확인 (multi-namespace 배포) - destination namespace가 아닌 다른 namespace 리소스 삭제 방지