전체 글

총 618개의 글

EKS Pod IP 할당이 안 될 때 서브넷 여유 IP·ENI·Prefix Delegation 점검하기

AWS EKS · 네트워크 오류 해결EKS Pod IP 할당이 안 될 때서브넷 여유 IP·ENI·Prefix Delegation 점검하기Pod 이벤트에서 실패 단계를 구분한 뒤 실제 Pod 서브넷, 노드 한도, Prefix 공간과 CNI 권한을 확인하세요.VPC CNI 진단조회 명령증상별 판단표2026.09.09 확인EKS Pod IP 할당 실패를 Pod 이벤트부터 서브넷 여유 IP, ENI 한도, Prefix Delegation 순서로 점검합니다. InsufficientCidrBlocks, Warm Pool, CNI 권한 오류를 구분하는 조회 명령과 진단표를 확인하세요.목차Pod IP 할당 실패인지 먼저 확인하기VPC CNI가 Pod IP를 할당하는 구조첫 점검: 해당 노드의 aws-node와 로그 확..

EKS에서 Calico가 필요한 경우: VPC CNI 정책 기능과 CNI 교체 판단 기준

AWS EKS · 네트워크 선택 기준EKS에서 Calico가 필요한 경우VPC CNI 정책 기능과 CNI 교체 판단 기준기본 통신 제어는 VPC CNI부터 검토하세요. Calico 정책이 필요한지, Pod 네트워크 자체를 바꿔야 하는지 나누면 도입 범위를 정하기 쉽습니다.VPC CNICalico 도입 판단구성 비교2026.09.09 확인EKS에서 Calico가 필요한 상황을 VPC CNI 유지, Calico 정책 추가, CNI 교체로 나눠 비교합니다. NetworkPolicy 지원 조건과 Pod IP 부족 대안, AWS 지원 범위 및 운영 전환 점검 기준을 확인하세요.목차EKS에서 Calico가 꼭 필요할까? 먼저 보는 선택 기준VPC CNI와 Calico의 역할: 정책 추가와 네트워킹 교체VPC CNI..

Codex·Claude Code·Google Antigravity 비교이용률·장점·요금과 결제 선택 가이드

AI 코딩 도구 · 선택과 비용Codex·Claude Code·Google Antigravity 비교이용률·장점·요금과 결제 선택 가이드이미 쓰는 구독과 개발 환경부터 확인하고, 실제 작업의 검토 부담과 추가 비용으로 선택하세요.업무용 이용률도구별 장점구독과 추가 과금2026.09.08 확인Codex·Claude Code·Google Antigravity의 업무용 이용률, 장점, 무료·유료 요금과 추가 과금 조건을 비교합니다. 구독료와 API 비용의 차이, 해지 시 확인할 점을 정리해 개인 개발자와 팀의 선택을 돕습니다.목차Codex·Claude Code·Google Antigravity, 어떤 도구를 선택할까AI 코딩 도구 점유율 비교: 이용률 통계는 어떻게 읽어야 할까Codex의 장점과 선택 전 확인..

쿠버네티스 PVC 용량 확장이 반영되지 않을 때: 요청 용량·CSI·파일시스템 점검하기

Kubernetes · 스토리지 장애 점검 쿠버네티스 PVC 용량 확장이 반영되지 않을 때요청 용량·CSI·파일시스템 점검하기 PVC 요청값, PV 용량, 컨테이너의 실제 파일시스템을 비교하면 확장이 멈춘 단계를 좁힐 수 있습니다. PVC 확장CSI 진단샘플 YAML2026.09.09 확인쿠버네티스 PVC 용량을 늘렸는데 반영되지 않을 때 요청값, PV 용량, CSI 이벤트와 파일시스템을 점검하는 순서를 정리합니다. EKS EBS CSI 샘플 YAML과 확장 명령, 완료 확인 및 데이터 보호 기준을 함께 확인하세요. 목차 PVC 용량 확장이 안 될 때 먼저 비교할 세 가지 확장 전제 조건: StorageClass와 드라이버부터 확인하기 샘플 YAML: 확장 가능한 테스트 볼륨 ..

GPT-6 Astra 사용법: ChatGPT Work에서 시작하는 새 모델 활용 가이드

GPT-6 Astra · Getting Started GPT-6 Astra 사용법ChatGPT Work에서 시작하기 새 모델의 특징부터 선택 방법, 첫 요청과 결과 검증까지 정리합니다. AstraChatGPT WorkCodexValidationGPT-6 Astra의 특징과 ChatGPT Work에서 시작하는 방법을 정리합니다. 모델 선택과 계정별 제공 여부, 첫 요청 예시, 결과 검증, 사용 한도와 API 요금의 차이를 확인하고 업무에 맞게 활용하세요. 목차 GPT-6 Astra란 무엇인가 무엇이 달라졌나: 긴 작업과 도구 활용에 초점 ChatGPT·ChatGPT Work·Codex·API는 어떻게 다른가 ChatGPT Work에서 Astra를 선택하고 시작하기 첫 ..

AWS LiteLLM과 Amazon Bedrock 연동 구조: IAM 인증·배포·비용 관리

AWS · LLM Gateway AWS LiteLLM과 Amazon Bedrock연동 구조와 운영 기준 모델 호출 흐름부터 IAM 인증, 배포 환경 선택과 팀별 사용량 관리까지 설계 기준을 정리합니다. LiteLLMAmazon BedrockIAM Role비용 관리LiteLLM Proxy는 애플리케이션과 Amazon Bedrock 사이에서 모델 호출과 접근 정책을 관리하는 LLM Gateway입니다. AWS 배포 방식, IAM 인증, 팀별 비용 관리와 도입 판단 기준을 설명합니다. 목차 LiteLLM이란 무엇인가 Amazon Bedrock 앞에 LiteLLM을 두는 이유 AWS에서 전체 요청 흐름 이해하기 AWS 배포 방식 선택하기 인증 구조 이해하기: 사용자 키와 I..

AWS Network Firewall 구성 방식 총정리 단일 NFW 중앙 Inspection VPC 이중 방화벽 설계 비교

AWS Network SecurityAWS Network Firewall 구성 방식 총정리: 단일 NFW, 중앙 Inspection VPC, 이중 방화벽 설계 비교AWS Network Firewall을 어디에 배치하고 어떤 라우팅으로 통과시킬지, 대표 구성별 장점과 주의점을 정리합니다.NFWInspection VPCTGWRoutingAWS Network Firewall은 VPC 트래픽을 검사하는 관리형 방화벽입니다. 이 글은 단일 VPC 구성, Distributed 구성, 중앙 Inspection VPC, 중앙 Egress, Ingress 앞단, 앞단·뒷단 이중 방화벽, Combined 구성, TGW-attached 구성을 공식 문서 기준으로 설명합니다.목차AWS Network Firewall 설계의 핵..

AWS Control Tower 설계 기준 정리: Landing Zone, OU 구조, Control 정책, 초기 배포 방식

AWS Multi-Account GovernanceAWS Control Tower 설계 기준 정리: Landing Zone, OU 구조, Control 정책, 초기 배포 방식AWS Control Tower를 도입할 때 필요한 Landing Zone 구조, OU별 정책 차이, 초기 배포 방식, 보안 기준을 정리합니다.Landing ZoneOUControlsAccount FactoryAWS Control Tower는 멀티 계정 환경을 표준화하고 지속적으로 거버넌스를 적용하기 위한 서비스입니다. 이 글은 처음 설계할 때 확인해야 할 구조, 정책, 보안 설정, Terraform과 CloudFormation 기반 초기 배포 예시를 설명합니다.목차AWS Control Tower가 필요한 이유기본 설계 방식OU 구조..

EKS에서 mTLS를 적용하는 방식: Service Mesh와 Gateway 기준

Kubernetes SecurityEKS에서 mTLS를 적용하는 방식: Service Mesh와 Gateway 기준EKS에서 mTLS가 어떤 문제를 해결하는지, Service Mesh와 Gateway 기준으로 어디에 적용하는지 간단히 정리합니다.mTLSEKSIstioGateway이 글은 EKS에서 mTLS를 이해할 때 필요한 TLS와 mTLS의 차이, Pod 간 통신 보호, Ingress Gateway의 클라이언트 인증, 인증서 관리, 운영 주의점을 공식 문서 기준으로 설명합니다.목차mTLS란 무엇인가EKS에서 mTLS가 직접 기능이 아닌 이유Service Mesh에서 Pod 간 통신을 보호하는 방식Istio에서 STRICT와 PERMISSIVE를 구분하는 이유Gateway에서 외부 클라이언트를 인증하는..

AWS Load Balancer Controller Deep Dive: EKS에서 ALB와 NLB가 생성되는 원리

EKS NetworkingAWS Load Balancer Controller Deep Dive: EKS에서 ALB와 NLB가 생성되는 원리AWS Load Balancer Controller가 EKS 리소스를 감시해 ALB, NLB, TargetGroupBinding을 만드는 흐름을 개념적으로 정리합니다.ALBNLBTargetGroupBindingReconcile이 글은 EKS에서 AWS Load Balancer Controller를 사용할 때 Ingress, Service, IngressClass, loadBalancerClass, TargetGroupBinding이 어떻게 연결되는지 설명합니다.목차AWS Load Balancer Controller란 무엇인가EKS에서 LB Controller를 사용할 ..

반응형

EKS Pod IP 할당이 안 될 때 서브넷 여유 IP·ENI·Prefix Delegation 점검하기

반응형

 

AWS EKS · 네트워크 오류 해결
EKS Pod IP 할당이 안 될 때
서브넷 여유 IP·ENI·Prefix Delegation 점검하기

Pod 이벤트에서 실패 단계를 구분한 뒤 실제 Pod 서브넷, 노드 한도, Prefix 공간과 CNI 권한을 확인하세요.

VPC CNI 진단조회 명령증상별 판단표2026.09.09 확인

EKS Pod IP 할당 실패를 Pod 이벤트부터 서브넷 여유 IP, ENI 한도, Prefix Delegation 순서로 점검합니다. InsufficientCidrBlocks, Warm Pool, CNI 권한 오류를 구분하는 조회 명령과 진단표를 확인하세요.

01

Pod IP 할당 실패인지 먼저 확인하기

EKS에서 Pod가 생성되지 않는다면 먼저 노드에 배치됐는지 확인하세요. 배치 전 FailedScheduling과 배치 후 네트워크 준비 실패는 진단 대상이 다릅니다. IP 할당 관련 메시지가 확인되면 실제 Pod용 서브넷의 주소, 노드 한도, Prefix 공간, CNI의 AWS API 호출 상태를 순서대로 좁혀갑니다.

이 글은 Amazon VPC CNI를 사용하는 일반 EKS EC2 Linux·IPv4 환경을 대상으로 합니다. Fargate, Auto Mode, Windows, IPv6 및 Calico 네트워킹 교체 환경에는 아래 명령과 판단을 그대로 적용하지 않습니다. Security Groups for Pods와 다중 인터페이스 사용 시에는 추가 인터페이스 구조도 확인해야 합니다.

ContainerCreating은 kubectl이 보여주는 상태이며 이것만으로 IP 부족을 뜻하지 않습니다. FailedCreatePodSandBox도 여러 원인으로 발생하므로 이벤트 본문에서 IP 할당 관련 오류를 확인해야 합니다. Kubernetes Pod 상태와 이벤트 진단

공식 문서 확인일은 2026년 9월 9일입니다. 아래는 Bash 계열 셸에서 사용하는 진단용 조회 명령 예시입니다. kubectl context와 AWS CLI 계정·리전을 먼저 맞추고 읽기 권한을 준비하세요. YOUR_로 시작하는 값은 자신의 확인 대상 값으로 교체합니다. PowerShell에서는 특히 JSONPath 인용부호 처리를 사용하는 버전에 맞춰 조정해야 합니다.

관찰 확인 대상
노드 미배치 + FailedScheduling 자원·taint·Pod 수 제한
노드 배치 + IP 할당 오류 해당 노드 CNI와 Pod 서브넷
IP 존재 + 통신 실패 DNS·경로·정책·보안 그룹
kubectl config current-context kubectl get pod YOUR_POD -n YOUR_NAMESPACE -o wide kubectl describe pod YOUR_POD -n YOUR_NAMESPACE kubectl get events -n YOUR_NAMESPACE --field-selector involvedObject.name=YOUR_POD --sort-by=.metadata.creationTimestamp
02

VPC CNI가 Pod IP를 할당하는 구조

기본 VPC CNI 구성에서는 노드에 연결한 ENI의 VPC 주소를 Pod에 사용합니다. 개별 보조 IP 모드와 Prefix 모드는 주소를 확보하는 단위가 다릅니다.

서브넷 주소 공간 → 노드 ENI → 개별 보조 IP 또는 Prefix → Pod IP. 이 흐름에서 ipamd가 주소 풀을 관리합니다. 이 구조는 기본 단일 인터페이스 구성의 이해를 위한 요약입니다. Amazon VPC CNI 주소 관리

서브넷이 충분해도 노드 한도에 걸릴 수 있고, Prefix 공간이 있어도 API 호출이 실패할 수 있습니다. 어느 단계가 막혔는지 나누어야 같은 Pending 상태에서도 맞는 조치를 선택할 수 있습니다.

03

첫 점검: 해당 노드의 aws-node와 로그 확인

문제 Pod의 NODE 값을 확인한 뒤 같은 노드에서 실행되는 aws-node를 찾습니다. 클러스터 전체 로그보다 장애 노드와 발생 시점을 맞추어 확인하세요. YOUR_AWS_NODE_POD는 첫 조회 결과의 Pod 이름으로 교체합니다.

describe 결과에서 이미지 버전, Ready 상태, 재시작과 환경변수를 확인합니다. --previous는 컨테이너가 재시작했고 이전 로그가 남아 있을 때만 사용할 수 있습니다.

kubectl logs에 IPAM 로그가 모두 나오는 것은 아닙니다. AWS_VPC_K8S_CNI_LOG_FILE이 파일 출력이면 설정된 수집 경로나 노드의 /var/log/aws-routed-eni/ipamd.log를 확인하세요. 컨테이너 내부 기본 경로는 /host/var/log/aws-routed-eni/ipamd.log입니다. IPAM 로그 저장 위치

조회 결과를 공유할 때는 계정·리소스 식별자를 제거하세요. 이 글은 실제 운영 로그를 사용하지 않습니다.

kubectl get pods -n kube-system -l k8s-app=aws-node --field-selector spec.nodeName=YOUR_NODE -o wide kubectl describe pod YOUR_AWS_NODE_POD -n kube-system kubectl logs YOUR_AWS_NODE_POD -n kube-system -c aws-node --since=30m --tail=200 kubectl logs YOUR_AWS_NODE_POD -n kube-system -c aws-node --previous --tail=200 kubectl describe daemonset aws-node -n kube-system
04

서브넷에 사용할 IP가 충분한가?

노드의 providerID에서 EC2 인스턴스를 식별하고 연결 ENI의 서브넷을 조회하세요. custom networking을 사용하면 Pod용 ENI가 노드의 기본 서브넷과 다른 서브넷에 있을 수 있습니다.

custom networking은 ENIConfig로 Pod용 서브넷 등을 지정합니다. 기능이 켜져 있다면 ENIConfig와 노드의 연결 설정도 대조하세요. ENIConfig 리소스 종류를 찾지 못하면 기능 사용 여부부터 확인합니다. Pod용 서브넷 선택

AvailableIpAddressCount는 사용할 수 있는 IPv4 주소 개수이며 연속된 /28 블록 수가 아닙니다. ENI나 Prefix로 이미 확보한 주소는 Pod에 배정하기 전이어도 서브넷의 가용 주소와 별도로 봐야 합니다. 서브넷 조회 필드

ENI 결과의 Subnet을 YOUR_SUBNET_ID로 넣어 각각 조회합니다. Prefix 목록과 개별 IP 배열도 구분하세요. ENI 조회 필터와 Prefix 필드

kubectl get node YOUR_NODE -o jsonpath='{.spec.providerID}' aws ec2 describe-network-interfaces --region YOUR_REGION --filters "Name=attachment.instance-id,Values=YOUR_INSTANCE_ID" --query 'NetworkInterfaces[].{ENI:NetworkInterfaceId,Subnet:SubnetId,Device:Attachment.DeviceIndex,PrivateIPCount:length(PrivateIpAddresses),Prefixes:Ipv4Prefixes}' --output json aws ec2 describe-subnets --region YOUR_REGION --subnet-ids YOUR_SUBNET_ID --query 'Subnets[].{Subnet:SubnetId,AZ:AvailabilityZone,AvailableIPv4:AvailableIpAddressCount}' --output table kubectl get eniconfigs.crd.k8s.amazonaws.com -o yaml kubectl describe node YOUR_NODE
05

ENI·주소 한도와 maxPods 구분하기

Too many pods가 나오면 스케줄러가 보는 Pod 수 한도를 확인합니다. 반면 노드 배치 후 IP 할당 실패는 주소 확보 경로를 확인해야 합니다. CPU·메모리 부족으로 인한 배치 실패도 별도 원인입니다.

YOUR_INSTANCE_TYPE은 노드 조회 결과의 유형으로 교체하세요. AWS 조회는 유형의 기본 네트워크 한도를 보여줍니다. 실제 ENI와 Prefix는 앞 절 결과와 대조합니다. PrivateIpAddresses 배열 길이가 Prefix 안의 모든 Pod 주소를 포함한다고 가정하면 안 됩니다.

Prefix 모드는 주소 슬롯 사용 방식을 바꾸며 ENI 최대 수 자체를 늘리지는 않습니다. 관리형 노드 그룹의 AMI 지정 여부 등에 따라 maxPods 설정 방법이 다릅니다. 임의로 숫자만 높이지 말고 allocatable 값과 지원 조건을 확인하세요. Prefix와 최대 Pod 수 설정

노드 추가는 서브넷에 충분한 주소가 있는지 확인한 뒤 선택해야 합니다. 주소가 부족한 같은 서브넷에 노드를 더 만들면 해결이 되지 않을 수 있습니다.

kubectl get node YOUR_NODE -L node.kubernetes.io/instance-type kubectl get node YOUR_NODE -o jsonpath='{.status.capacity.pods}{" / "}{.status.allocatable.pods}{"\n"}' kubectl get pods -A --field-selector spec.nodeName=YOUR_NODE -o wide aws ec2 describe-instance-types --region YOUR_REGION --instance-types YOUR_INSTANCE_TYPE --query 'InstanceTypes[].{Type:InstanceType,MaxENI:NetworkInfo.MaximumNetworkInterfaces,IPv4PerENI:NetworkInfo.Ipv4AddressesPerInterface}' --output table
06

Prefix Delegation을 켰는데도 실패하는 이유

IPv4 Prefix 할당에는 연속된 /28 공간이 필요합니다. 가상의 서브넷에 40개 여유 IP가 있어도 주소가 흩어져 있다면 필요한 블록을 확보하지 못할 수 있습니다. 이 숫자는 원리를 설명하기 위한 가정입니다.

InsufficientCidrBlocks가 보이면 연속 공간 부족을 검토하세요. 새 서브넷이나 Prefix용 CIDR 예약이 선택지입니다. 예약은 기존 사용 중 주소를 즉시 이동시켜 빈 블록을 만드는 기능은 아닙니다. Prefix 전제와 주소 단편화

Linux IPv4 Prefix는 VPC CNI 1.9.0 이상, Nitro 기반 노드 등의 조건을 확인해야 합니다. 최소 기능 버전이 현재 클러스터의 권장 버전을 의미하지는 않습니다. ENABLE_PREFIX_DELEGATION 설정과 실제 노드 조건을 함께 확인하세요.

아래 set env 명령은 --list를 붙인 조회입니다. 값 할당을 추가하지 말고 조회용으로 사용하세요. 실제 Pod 환경변수는 describe pod 결과와도 비교합니다.

kubectl set env daemonset/aws-node -n kube-system --list aws ec2 get-subnet-cidr-reservations --region YOUR_REGION --subnet-id YOUR_SUBNET_ID --output json
07

Warm Pool 설정이 IP 사용량에 미치는 영향

CNI는 새 Pod를 위해 여유 주소를 준비하므로 실행 중 Pod 수와 확보 주소 수가 다를 수 있습니다. 노드당 평상시 Pod 수와 한 번에 늘어나는 Pod 수를 함께 보고 조정하는 것이 좋습니다.

Prefix 모드에서는 WARM_IP_TARGET 또는 MINIMUM_IP_TARGET을 지정하면 WARM_PREFIX_TARGET보다 우선합니다. 확보 단위 때문에 실제 여유 주소가 IP 목표와 딱 맞지는 않을 수 있습니다. Prefix Warm Pool 설정

MINIMUM_IP_TARGET은 전체 확보 주소의 하한입니다. 이를 지정하고 WARM_IP_TARGET을 생략하면 추가 할당에 영향을 줄 수 있으므로 버전별 안내를 확인하세요. 최소 확보 주소 설정

큰 여유 값은 서브넷 소모를 늘리고 너무 작은 값은 급격한 확장 때 추가 요청을 늘릴 수 있습니다. 정답 숫자를 고정하기보다 실제 Pod 증가량과 API 오류·주소 사용량으로 판단하세요.

설정 의미
WARM_PREFIX_TARGET 미사용 Prefix 여유 목표
WARM_IP_TARGET 즉시 배정 가능한 여유 IP 목표
MINIMUM_IP_TARGET 전체 확보 IP의 하한 목표
08

IP 여유가 있어도 실패할 때: 권한·API·CNI 상태

같은 시각의 CNI 로그에서 UnauthorizedOperation·AccessDenied는 권한 경로, throttling·RequestLimitExceeded는 호출 제한, timeout은 DNS·연결 경로 등을 점검하는 단서입니다. 한 줄만으로 원인을 확정하지는 않습니다.

CNI의 IAM 역할은 애플리케이션이나 조회 명령 실행자의 역할과 다를 수 있습니다. IRSA·Pod Identity·노드 역할 중 실제 사용 방식을 확인하세요. 관리형 Add-on이 없다는 조회 오류가 나더라도 자체 관리 방식의 aws-node가 설치되어 있을 수 있습니다.

인터넷 접근을 제한한 환경에서는 EC2 API를 위한 Endpoint·보안 그룹·DNS를 확인합니다. 자격증명 방식에 따라 STS 또는 EKS Auth 접근도 필요할 수 있습니다. Private EKS 서비스별 Endpoint

aws-node 자체가 Ready가 아니면 이미지 다운로드·초기화 이벤트부터 확인하세요. 주소가 충분해도 CNI가 정상 기동하지 않으면 주소 할당이 진행되지 않을 수 있습니다.

Pod Identity 연결 목록에는 실제 IAM 역할이 생략됩니다. 연결이 있으면 associationId를 YOUR_ASSOCIATION_ID로 바꿔 상세 조회하세요. Pod Identity 연결 조회의 반환 범위

aws eks describe-addon --region YOUR_REGION --cluster-name YOUR_CLUSTER --addon-name vpc-cni --output json kubectl get serviceaccount aws-node -n kube-system -o yaml aws eks list-pod-identity-associations --region YOUR_REGION --cluster-name YOUR_CLUSTER --namespace kube-system --service-account aws-node --output json kubectl get daemonset aws-node -n kube-system aws eks describe-pod-identity-association --region YOUR_REGION --cluster-name YOUR_CLUSTER --association-id YOUR_ASSOCIATION_ID --output json
09

증상별 진단표와 조치 선택

아래 표는 관찰값을 연결하는 진단 제안입니다. 변경 전 오류 시각, 노드·서브넷, CNI 설정과 한도를 기록하세요. 재시작만으로 주소 고갈·단편화·권한 부족이 해결된다고 가정하지 마세요.

Prefix 전환은 새 노드 그룹을 준비해 검증하는 방안을 비교하세요. AWS도 새 노드 그룹과 기존 워크로드의 안전한 이동을 권장합니다. Prefix 전환 시 노드 교체

변경 후 새 Pod가 IP를 받고 Ready가 되는지 확인합니다. 이어서 필요한 DNS·서비스·외부 연결을 점검하세요. IP 확보와 애플리케이션 통신은 별도의 완료 조건입니다.

증상 다음 확인 조치 방향
FailedScheduling / Too many pods allocatable·배치된 Pod 수 노드 용량·maxPods 설계
Pod용 서브넷 가용 IP 부족 실제 ENI 서브넷·여유 풀 주소 공간·Pod 배치 검토
InsufficientCidrBlocks 연속 /28 공간·예약 새 서브넷·Prefix 공간 계획
노드 ENI·주소 한도 도달 유형 한도·실제 확보 상태 Prefix·노드 설계 검토
UnauthorizedOperation / AccessDenied CNI 역할·실패 API 필요한 권한 확인·수정
API 제한·timeout 호출량·Endpoint·DNS 호출·연결 원인 해소
IP 확보 후 통신 실패 DNS·경로·정책 통신 진단으로 전환
10

재발 방지와 다른 네트워크 구성의 검토 시점

서브넷별 가용 주소, 노드별 Pod 증가량, CNI 주소 할당 오류를 같은 시간축으로 보세요. 총 여유 IP 알람만으로 단편화를 탐지할 수 없으므로 Prefix 할당 오류도 함께 관찰하는 것을 권합니다.

여유 기준에는 배포 시 추가 복제본, 노드 교체와 자동 확장의 동시 용량을 포함하세요. 피크 수치를 확인하지 않고 절감률이나 권장 여유량을 고정하지 않는 것이 좋습니다.

IPv4 주소 계획 자체가 제약이라면 custom networking과 IPv6를 비교할 수 있습니다. CNI 교체 전에 기존 구성의 주소 설계 대안을 검토하세요. 주소 부족 시 custom networking 검토

Calico 정책만 추가하면 Pod 주소 할당 방식은 바뀌지 않습니다. 최근 Calico 도입 판단 글이 도구 선택을 다룬다면, 이번 글은 VPC CNI를 유지한 상태에서 장애 원인을 좁히는 데 집중합니다.

11

핵심 요약

단계
노드 미배치와 배치 후 IP 할당 실패를 먼저 나눕니다.
주소
실제 Pod용 서브넷과 노드의 ENI·Prefix를 함께 확인합니다.
Prefix
여유 IP 총량은 연속된 /28 공간을 보장하지 않습니다.
완료
새 Pod의 IP 확보와 필요한 통신을 각각 확인합니다.
12

FAQ

Pending이면 서브넷 IP 부족인가요?

아닙니다. 노드 배치 여부와 이벤트를 먼저 확인해야 합니다. 자원, taint, Pod 수 제한 또는 배치 후 초기화 문제일 수 있습니다.

Prefix Delegation을 켜면 서브넷 주소가 늘어나나요?

아닙니다. ENI에 주소를 확보하는 단위가 바뀝니다. 주소 공간을 늘리려면 별도 서브넷·CIDR 등 주소 설계가 필요합니다.

여유 IP가 많은데 InsufficientCidrBlocks가 나오는 이유는 무엇인가요?

IPv4 Prefix에 필요한 연속된 /28 공간이 없을 수 있습니다. 가용 주소 개수와 주소 블록의 연속성을 구분하세요.

aws-node 로그가 조용하면 CNI는 정상인가요?

그렇게 단정할 수 없습니다. IPAM 로그의 저장 위치를 확인하세요. 파일 출력으로 설정되어 있으면 kubectl logs에 해당 내용이 나오지 않을 수 있습니다.

CONCLUSION

Pod 이벤트에서 시작해 실제 Pod용 서브넷과 노드의 주소 확보 상태로 원인을 좁혀가세요. Prefix 공간과 권한·API 문제까지 확인하면 불필요한 CNI 교체나 노드 추가를 줄일 수 있습니다. 변경은 관찰한 원인에 맞춰 선택하고 새 Pod의 IP 확보와 통신까지 확인하세요.

...
Trace allocation failures from the Pod to the subnet and node.
EKS Pod IP 할당 실패 시 서브넷 여유 IP, ENI 한도, Prefix 연속 공간을 점검
반응형

EKS에서 Calico가 필요한 경우: VPC CNI 정책 기능과 CNI 교체 판단 기준

반응형

 

AWS EKS · 네트워크 선택 기준
EKS에서 Calico가 필요한 경우
VPC CNI 정책 기능과 CNI 교체 판단 기준

기본 통신 제어는 VPC CNI부터 검토하세요. Calico 정책이 필요한지, Pod 네트워크 자체를 바꿔야 하는지 나누면 도입 범위를 정하기 쉽습니다.

VPC CNICalico 도입 판단구성 비교2026.09.09 확인

EKS에서 Calico가 필요한 상황을 VPC CNI 유지, Calico 정책 추가, CNI 교체로 나눠 비교합니다. NetworkPolicy 지원 조건과 Pod IP 부족 대안, AWS 지원 범위 및 운영 전환 점검 기준을 확인하세요.

01

EKS에서 Calico가 꼭 필요할까? 먼저 보는 선택 기준

일반적인 EKS EC2 환경에서 Calico는 필수 구성 요소가 아닙니다. 필요한 통신 제어를 VPC CNI 정책으로 구현할 수 있다면 이를 우선 검토하고, 기존 Calico 정책 활용이나 별도 Pod 주소 공간이 필요한 경우에 도입 범위를 넓히는 것이 이 글의 권장 순서입니다.

이 글은 EKS 도입·운영 담당자가 네트워크 도구를 선택하는 데 필요한 판단 기준을 다룹니다. 설치 완료를 보여주는 실습이 아니라 구성 선택과 검증 계획을 위한 초안이며, 공식 문서 확인일은 2026년 9월 9일입니다. Calico의 기본 개념을 반복하기보다 EKS에서 달라지는 지원 조건과 운영 부담에 집중합니다.

선택 우선 검토할 상황 바뀌는 범위
VPC CNI 유지 기본 통신 제어와 AWS 연동 중심 기존 네트워크에 정책 설정
Calico 정책 추가 Calico 정책 API·운영 체계 활용 정책 엔진
Calico 네트워킹 사용 VPC와 분리된 Pod 주소 설계 필요 IP 할당·통신 경로·정책
02

VPC CNI와 Calico의 역할: 정책 추가와 네트워킹 교체

CNI는 Pod가 네트워크에 연결되는 구성을 담당하고, IPAM은 사용할 IP 주소를 관리합니다. 정책 엔진은 그 통신을 허용하거나 차단합니다. Calico를 설치했다는 사실만으로 이 세 역할이 모두 Calico로 바뀌었다고 판단할 수 없습니다.

VPC CNI와 Calico 정책을 함께 쓰면 Pod 주소 할당과 VPC 연결은 AWS 구성을 유지합니다. Calico 네트워킹을 선택하면 별도 IPAM과 오버레이를 사용하는 구성이 가능합니다. 아래 비교도는 역할 구분을 위한 개념도이며 패킷이 처리되는 정확한 순서를 나타내지는 않습니다. Calico EKS 구성 안내

기본 정책 개념은 Calico NetworkPolicy와 네트워크 보안 구조에서 확인하세요. 이번 글에서는 해당 개념을 EKS 구성 선택에 적용합니다.

세 가지 구성 비교: IP 할당과 정책 담당

① VPC CNI 유지

Pod

VPC CNI
VPC IP 할당·연결

VPC CNI 정책
필요한 통신 제어

② Calico 정책 추가

Pod

VPC CNI
VPC IP 할당·연결

Calico 정책
VPC CNI 정책 기능 비활성화

③ Calico 네트워킹

Pod

Calico IPAM·네트워킹
별도 Pod IP·오버레이

Calico 정책
외부 접근 경로 별도 검토

역할 구분을 위한 개념도입니다. ②는 VPC IP 사용량을 줄이지 않으며, ③도 노드 등 VPC 리소스의 IP 사용은 남습니다.

03

VPC CNI의 NetworkPolicy로 충분한 경우

가상의 예약 서비스에서 프런트엔드는 예약 API에만 접근하고, 다른 업무의 Pod는 API에 접근하지 못하게 하려는 요구를 생각해 보세요. 필요한 제어가 Pod·네임스페이스 선택과 IP·포트 범위에 해당한다면 표준 NetworkPolicy를 먼저 검토할 수 있습니다.

현재 AWS 문서에는 표준 NetworkPolicy뿐 아니라 클러스터 범위의 ClusterNetworkPolicy도 안내되어 있습니다. 따라서 중앙 정책이나 클러스터 전체 차단이 필요하다는 이유만으로 Calico가 유일한 선택이라고 볼 수 없습니다. AWS의 ClusterNetworkPolicy는 networking.k8s.aws API를 사용하므로 표준 NetworkPolicy와 이식성도 구분하세요.

확인한 AWS 문서는 표준·관리자 정책을 함께 사용하는 조건으로 VPC CNI 1.21.0 이상을 제시합니다. 이는 표준 NetworkPolicy가 해당 버전에서 처음 등장했다는 뜻이 아닙니다. EC2 Linux 노드 등 적용 조건과 설치 버전의 기능을 함께 확인하세요. VPC CNI 정책 종류와 지원 조건

정책 객체를 생성하는 것과 정책 엔진을 활성화하는 것은 다릅니다. 또한 시작 시 기본 허용하는 standard 모드와 기본 차단하는 strict 모드의 차이를 검토해야 합니다. strict 모드는 DNS 등 필수 통신을 허용하는 준비가 필요합니다. VPC CNI 정책 활성화와 시작 모드

04

VPC CNI를 유지하면서 Calico 정책을 추가하는 경우

이미 온프레미스에서 Calico 정책을 관리하고 있고 EKS에서도 같은 정책 API와 검토 절차를 유지하려는 팀이라면 정책만 추가하는 방식을 검토할 수 있습니다. 이것은 도입 판단 예시이며 서로 다른 환경에서 정책 파일이 수정 없이 동작한다는 보장은 아닙니다.

Calico의 GlobalNetworkPolicy는 네임스페이스에 한정되지 않는 정책 리소스이며 order, selector, Allow·Deny 등의 필드로 동작을 정의합니다. 필요한 필드를 현재 VPC CNI 기능과 항목별로 비교하세요. 이름이 비슷한 정책도 평가 순서와 적용 대상이 같다고 가정하지 않는 것이 좋습니다. Calico GlobalNetworkPolicy 정의

도입 검토표에는 필요한 기능 이름, 오픈소스 또는 상용 제품 여부, 지원 버전, 담당자를 함께 기록하는 것을 권합니다. 특정 보안·관측 기능이 Calico 전체 제품에서 동일하게 제공된다고 가정하면 비용과 구현 범위를 잘못 산정할 수 있습니다.

05

Pod IP 부족 때문에 Calico로 교체해야 할까?

IP 부족은 서브넷에 주소가 없는 상황과 노드가 더 이상 Pod IP를 확보하지 못하는 상황을 나누어 보아야 합니다. 가령 서브넷에는 공간이 있지만 노드별 밀도에 막힌 상황과, 서브넷 주소 자체가 소진된 상황은 같은 해결책으로 다루기 어렵습니다.

Prefix Delegation은 ENI에 주소 묶음을 할당해 노드당 Pod 밀도를 높이는 방식입니다. IPv4에서는 연속된 /28 공간이 필요하므로 빈 주소 총량이 있어도 단편화로 실패할 수 있습니다. 서브넷의 전체 주소 공간을 늘리는 기능은 아닙니다. Prefix Delegation과 주소 단편화

custom networking은 Pod에 사용할 별도 서브넷과 주소 공간을 구성하는 VPC CNI의 선택지입니다. IPv4 부족이라면 이 방식과 IPv6 설계를 먼저 비교할 수 있습니다. AWS는 아직 IPv6를 사용할 수 없는 IPv4 부족 상황에서 custom networking을 검토하도록 안내합니다. custom networking 선택 기준

Calico 정책만 추가하면 IP 할당 방식은 그대로입니다. 별도 Pod 주소 대역을 통한 VPC 주소 소모 완화는 Calico 네트워킹을 선택할 때 검토할 수 있는 효과입니다. Calico 네트워킹 선택 기준

관찰한 문제 먼저 비교할 항목 판단 시 주의점
노드별 Pod 밀도 제한 Prefix Delegation·노드 설정 CPU·메모리와 maxPods도 확인
서브넷 주소 부족 주소 공간 추가·custom networking·IPv6 주소 계획과 외부 연결 영향 확인
VPC 주소와 Pod 주소 분리 필요 Calico 오버레이 클러스터 외부에서 Pod 접근 방식 변경
통신 차단 규칙만 필요 VPC CNI 정책 또는 Calico 정책 정책 추가는 IP 부족 해결책이 아님
06

Calico 네트워킹으로 교체하면 달라지는 통신 구조

Calico 오버레이를 선택하면 Pod 주소가 VPC에서 직접 라우팅되는 기존 구조와 달라집니다. 외부 서비스가 Pod IP를 직접 목적지로 쓰는지 먼저 조사하세요. 클러스터 밖에서 도달하지 못하는 주소를 로드밸런서 대상으로 등록하면 정상 연결을 기대하기 어렵습니다. AWS에서 Calico 오버레이를 선택할 때의 외부 접근 제한

Tigera의 EKS 안내는 제어 평면이 Calico Pod로 연결을 시작할 수 없는 제약을 설명합니다. Admission webhook처럼 제어 평면에서 접근해야 하는 구성은 별도 설계가 필요합니다. 문서의 hostNetwork 우회 방안도 신뢰 가능한 구성 요소에 대한 선택지이므로 일괄 적용하지 말고 노드 포트와 정책 경계를 검토하세요. Calico EKS 제어 평면 연결 주의사항

실무 검증에서는 로드밸런서 대상 유형과 헬스 체크, 외부 API로 나가는 NAT 경로, 반환 트래픽, DNS, MTU를 하나의 통신 목록으로 묶는 것을 권합니다. 짧은 요청뿐 아니라 큰 응답과 장시간 연결도 시험 항목에 포함하면 경로 변경의 영향을 확인하기 쉽습니다.

07

EKS 실행 환경과 AWS 지원 범위 확인하기

설치 가능한 구성과 AWS가 지원하는 구성은 구분해야 합니다. 아래는 확인일 기준 AWS 안내를 요약한 표입니다. 일반 EC2 노드에서 대체 CNI를 선택한다면 공급업체 지원 또는 내부 장애 대응 역량을 확보하는 것이 필요합니다. EKS 대체 CNI 지원 범위

실행 환경 확인한 지원 조건 도입 판단
일반 EC2 노드 AWS 지원 CNI는 VPC CNI, 호환 대체 CNI 설치 가능 Calico 장애 대응 주체를 별도 확보
Fargate VPC CNI만 사용 가능 Calico CNI 교체 대상에서 제외
EKS Auto Mode 대체 CNI·네트워크 정책 플러그인 미지원 일반 EC2 구성의 절차를 적용하지 않음
Hybrid Nodes Calico·Cilium 핵심 기능 별도 지원 일반 EC2와 구분해 해당 지원 범위 확인
08

정책 충돌과 적용 예외: 설치 전에 확인할 사항

Calico를 정책 엔진으로 선택할 때 VPC CNI의 정책 기능을 동시에 켜지 않도록 구성해야 합니다. Tigera는 두 정책 엔진의 충돌을 명시합니다. 같은 트래픽을 두 엔진이 관리하면 허용·차단 원인을 구분하기도 어려워집니다.

VPC CNI와 Calico 정책을 조합하는 설치 안내에는 ANNOTATE_POD_IP=true와 aws-node의 Pod patch 권한 요구가 있습니다. IPv6 Pod에서 ENABLE_V4_EGRESS=true인 경우의 Calico 정책 적용 제한도 확인해야 합니다. Calico 정책 구성의 권한·IPv6 조건

또한 AWS는 Pod에 보안 그룹이 연결된 경우 해당 트래픽이 Calico 정책 집행 대상에 포함되지 않는다고 안내합니다. Security Groups for Pods와 Calico를 조합할 때 모든 트래픽에 두 통제가 중첩된다고 가정하면 안 됩니다. Calico와 Pod 보안 그룹 주의사항

가상의 예약 서비스 검증에서는 허용된 프런트엔드 접근, 다른 업무 Pod의 차단, DNS 조회, 외부 결제 연동용 더미 API 접근을 각각 구분하는 것을 권합니다. 기대 결과를 먼저 적고 허용과 차단을 모두 확인해야 정책의 목적을 판단할 수 있습니다.

09

운영 전환 전에 검증할 통신과 복구 기준

아래 표는 신규 검증 환경에서 사용할 제안입니다. 실제 운영 전환 절차는 현재 설치 방식과 버전에 맞춰 별도로 작성해야 합니다. 특히 CNI 교체를 기존 aws-node 삭제 한 단계로 취급하지 마세요. 새 환경에서 경로를 확인한 뒤 워크로드를 옮기는 방안을 우선 비교하는 것이 좋습니다.

검증 결과에는 연결 성공 여부 외에도 지연, 오류율, 노드 자원 사용량과 정책 로그를 남기세요. 전환 전후의 요청 크기와 부하 조건을 맞춰야 성능 비교가 의미를 갖습니다. Calico 도입만으로 속도 향상이나 비용 절감을 단정할 수 없습니다.

검증 영역 시험 내용 완료 판단 예시
정책 허용·비허용 Pod에서 동일 목적지 접근 의도한 허용과 차단 모두 재현
운영 연결 DNS·웹훅·로드밸런서·외부 API 모든 필수 경로가 정상 동작
노드 수명주기 노드 추가·교체와 Pod 재생성 새 노드에서도 정책과 경로 유지
업그레이드 Kubernetes·CNI·운영자 버전 조합 지원 조건 및 회귀 점검 통과
복구 기존 환경으로 트래픽을 되돌리는 과정 담당자·시간 기준·중단 조건 명시
비용 추가 컴퓨팅·관측 저장·지원·운영 시간 실제 견적과 측정값으로 비교
10

최종 도입 판단표: 필요한 범위만 선택하기

도입 결정은 도구 이름보다 현재 해결하지 못하는 요구사항을 중심으로 내리는 것이 좋습니다. 아래 표는 앞서 확인한 기능과 지원 조건을 바탕으로 정리한 설계 제안입니다. 정책 요구와 주소 설계 요구가 함께 있으면 두 항목을 따로 평가하세요.

우리 팀의 요구 우선 검토할 선택 다음 확인
Pod·네임스페이스 간 기본 통신 통제 VPC CNI 정책 지원 환경·버전·필수 허용 규칙
중앙에서 클러스터 정책 관리 VPC CNI와 Calico 정책 기능 비교 필요한 API·평가 순서·이식성
기존 Calico 정책 운영 체계 활용 VPC CNI + Calico 정책 정책 충돌·적용 예외
VPC IP 부족 해결 VPC CNI 주소 설계 대안부터 비교 서브넷 고갈인지 노드 밀도인지 확인
Pod IP를 VPC와 분리 Calico 네트워킹 검토 외부 접근·웹훅·복구 경로
AWS 관리 범위 중심의 단순한 운영 VPC CNI 유지 기본 기능으로 요구 충족 가능한지 확인
11

핵심 요약

구분
Calico 정책 추가와 CNI 교체는 변경 범위가 다릅니다.
기능
VPC CNI도 정책을 지원하므로 필요한 API와 적용 조건을 비교합니다.
IP
정책 엔진 변경만으로 VPC IP 부족이 해결되지는 않습니다.
운영
교체 전에는 외부 접근과 제어 평면 연결, 지원·복구 범위를 확인합니다.
12

FAQ

Calico를 설치하면 VPC CNI를 삭제해야 하나요?

정책만 추가하는 구성에서는 VPC CNI를 유지합니다. Calico 네트워킹을 사용하는 경우에만 별도 전환 설계를 검토합니다. 운영 클러스터에서 설치 모드를 확인하지 않고 aws-node를 삭제하지 마세요.

클러스터 전체 정책을 쓰려면 Calico가 필수인가요?

아닙니다. 현재 AWS 문서에도 ClusterNetworkPolicy가 안내되어 있습니다. 필요한 기능과 API, 설치 버전 및 지원 조건을 비교해 선택하세요.

Calico를 쓰면 Pod IP 부족과 성능 문제가 함께 해결되나요?

정책만 추가하면 주소 할당 방식은 바뀌지 않습니다. 오버레이는 주소 설계 대안이 될 수 있지만 성능은 경로·부하·노드 조건을 맞춰 측정해야 합니다.

Calico 오픈소스에는 운영 비용이 없나요?

라이선스 구매 여부와 별개로 추가 구성 요소의 자원, 관측 데이터 저장, 업그레이드·장애 대응 시간이 필요합니다. 상용 지원이나 기능을 선택하면 해당 견적도 포함하세요.

CONCLUSION

먼저 VPC CNI로 해결되지 않는 요구사항을 한 문장으로 적어보세요. Calico 정책이 필요하면 정책 추가를, 별도 Pod 주소 설계가 필요하면 네트워킹 변경을 검토하면 됩니다. 외부 통신과 복구 경로를 검증하고 운영 담당자가 지원 범위를 감당할 수 있을 때 도입을 결정하는 것이 좋습니다.

...
Choose the required policy and networking scope.
VPC CNI 유지, Calico 정책 추가, CNI 교체의 세 가지 선택
반응형

Codex·Claude Code·Google Antigravity 비교이용률·장점·요금과 결제 선택 가이드

반응형

 

AI 코딩 도구 · 선택과 비용
Codex·Claude Code·Google Antigravity 비교
이용률·장점·요금과 결제 선택 가이드

이미 쓰는 구독과 개발 환경부터 확인하고, 실제 작업의 검토 부담과 추가 비용으로 선택하세요.

업무용 이용률도구별 장점구독과 추가 과금2026.09.08 확인

Codex·Claude Code·Google Antigravity의 업무용 이용률, 장점, 무료·유료 요금과 추가 과금 조건을 비교합니다. 구독료와 API 비용의 차이, 해지 시 확인할 점을 정리해 개인 개발자와 팀의 선택을 돕습니다.

01

Codex·Claude Code·Google Antigravity, 어떤 도구를 선택할까

AI 코딩 도구를 처음 선택한다면 이미 보유한 구독과 익숙한 개발 환경부터 확인하세요. 그다음 실제로 반복하는 오류 수정이나 기능 추가 작업을 맡겨 보고, 결과를 검토하는 시간과 추가 비용을 비교하는 것이 좋습니다. 이용률이 높다는 이유만으로 자신의 프로젝트에도 가장 적합하다고 판단할 수는 없습니다.

이 글은 유료 도입을 고민하는 개인 개발자와 소규모 팀을 위한 선택 가이드입니다. 공식 문서 확인일은 2026년 9월 8일이며, 요금은 미국 달러 표시 기준입니다. 한국 계정의 원화 결제 금액·세금·할인 적용 여부는 확인하지 않았습니다. 기능 설명과 별도로 제시한 평가 방법은 작성자의 제안이며, 세 도구를 직접 실행해 성능을 측정한 후기는 아닙니다.

먼저 확인할 조건 검토할 후보 결정 전에 볼 항목
기존 ChatGPT 구독과 개발 작업을 함께 활용 Codex 현재 구독의 포함 범위와 남은 한도
터미널과 편집기를 오가며 코드 수정 Claude Code 기존 작업 흐름과 인증·과금 방식
Google 계정 기반의 에이전트 작업 환경 Google Antigravity 무료 한도, 개발 환경 연동과 구독 혜택
선택표의 의미

위 표는 처음 평가할 후보를 좁히는 제안입니다. 특정 작업을 한 도구만 할 수 있다는 뜻은 아닙니다. 공통 기능이 많으므로 실제 프로젝트에서 검토 가능한 결과가 나오는지 확인해야 합니다.

02

AI 코딩 도구 점유율 비교: 이용률 통계는 어떻게 읽어야 할까

JetBrains의 Developer Ecosystem Survey 2026에 따르면 업무용 이용률은 Claude Code 39%, Codex 16%, Google Antigravity 6%입니다. 조사 기간은 2026년 5~7월이며 전체 조사에는 전 세계 전문 개발자 15,000명 이상이 참여했습니다. JetBrains 업무용 이용률 조사

이 수치는 전체 시장의 매출이나 유료 구독자 비중이 아닙니다. 여러 도구를 함께 사용하는 상황을 배제한 점유율로 해석하거나, 세 수치를 합쳐 100%로 다시 계산하면 안 됩니다. 비교 대상 세 도구의 순서이며 시장 전체의 상위 3개 순위도 아닙니다.

조사에는 지역·고용 상태·프로그래밍 언어·JetBrains 제품 친숙도에 대한 통계 보정이 적용됐습니다. 다만 해당 문항의 정확한 유효 응답자 수와 복수 응답 설정은 이번 확인 범위에서 확인하지 못했습니다. Google 수치는 Gemini CLI가 아닌 Antigravity이며, 9월의 실시간 이용률을 뜻하지 않습니다.

도구 업무용 이용률 동일한 비교 조건
Claude Code 39% 2026년 5~7월 전문 개발자 조사
OpenAI Codex 16% 동일 조사
Google Antigravity 6% 동일 조사
03

Codex의 장점과 선택 전 확인할 점

Codex는 CLI와 IDE 확장, 웹 기반 작업 등 여러 환경에서 사용할 수 있습니다. 구독 방식에서는 클라우드 코드 리뷰 같은 연동도 제공되며, API 키 방식은 사용 가능한 기능 범위가 다릅니다. Codex 환경별 기능과 요금

선택 관점에서 볼 장점은 이미 쓰고 있는 ChatGPT 구독의 포함 기능을 개발 작업에도 활용할 수 있다는 점입니다. 추가 결제 전에 현재 계정으로 작은 수정 작업을 진행할 수 있는지 확인하면 도입 판단이 쉬워집니다.

예를 들어 코드 변경 요청에는 수정할 범위, 유지할 동작, 실행할 테스트를 함께 적어 보세요. 결과를 받을 때는 변경 파일과 실패한 검사, 직접 확인하지 못한 부분을 분리해 달라고 요청하는 편이 검토에 도움이 됩니다. 이는 이 글에서 제안하는 활용 방식이며 정확성이나 시간 절감을 실측한 결과는 아닙니다.

팀에서는 도구의 명령 실행 범위, 저장소 접근 권한과 검토 절차가 기존 개발 규칙에 맞는지 평가하세요. 요청이 완료됐다는 설명만으로 병합을 결정하지 말고 실제 변경 내용과 테스트 결과를 확인해야 합니다.

04

Claude Code의 장점과 선택 전 확인할 점

Claude Code는 코드베이스 읽기, 파일 수정, 명령 실행을 개발 도구와 연결하는 코딩 에이전트입니다. 터미널 외에도 IDE, 데스크톱 앱과 웹에서 사용할 수 있어 CLI 전용 도구로만 설명하면 범위가 좁아집니다. Claude Code 공식 기능 소개

터미널을 자주 사용하는 개발자라면 기존 명령 실행과 코드 탐색 흐름에 자연어 요청을 추가하는 방식부터 평가할 수 있습니다. 익숙한 편집기에서 변경 내용을 확인하고 필요한 부분만 직접 조정할 수 있는지가 중요한 선택 기준입니다.

비용 측면에서는 로그인 방식이 중요합니다. ANTHROPIC_API_KEY가 설정된 환경은 구독 대신 API 인증과 과금이 적용될 수 있습니다. 구독을 결제했다는 사실과 지금 실행 중인 세션이 구독 한도를 사용한다는 사실을 구분하세요. Claude Code 구독 연결과 API 과금 구분

이 글의 평가 예제에서는 오류 원인을 설명하는 능력뿐 아니라 수정 범위를 지키는지, 테스트 실패를 숨기지 않는지, 재요청 없이 검토할 수 있는 결과를 주는지를 함께 기록하도록 제안합니다.

05

Google Antigravity의 장점과 선택 전 확인할 점

Google Antigravity는 독립형 앱을 중심으로 에이전트 작업을 관리하며 IDE 확장도 제공합니다. Google의 2026년 8월 안내에는 VS Code, Visual Studio, JetBrains, Zed, Xcode 연동이 소개되어 있습니다. 일부 환경은 미리보기이므로 지원 버전과 조직 계정 사용 조건을 함께 확인해야 합니다. Antigravity 앱과 IDE 확장 안내

개발자가 평가할 지점은 작업을 맡기는 화면과 변경 내용을 직접 살펴보는 편집기가 얼마나 편리하게 연결되는가입니다. 독립형 앱으로 전체 작업을 관리하고 익숙한 IDE에서 세부 코드를 검토하는 방식을 선호한다면 후보에 넣을 수 있습니다.

이 글에서 비교하는 제품은 Google Antigravity입니다. Google은 별도로 Antigravity CLI도 소개하고 있으며 Gemini CLI 사용자에게 이전을 안내합니다. 예전 Gemini CLI의 요청 한도나 가격을 Antigravity 통계·요금에 그대로 적용하면 안 됩니다. Google 개발 도구 구분과 이전 안내

계정에서 선택할 수 있는 모델은 별도로 확인하세요. 이번 확인에서는 Antigravity 가격 소개와 상세 플랜 문서의 외부 모델 제공 설명이 일치하지 않아, 특정 외부 모델을 무료로 쓸 수 있다고 단정하지 않았습니다.

06

같은 개발 작업으로 비교하는 실전 선택 기준

비교 예제로 가상의 동아리 장비 대여 앱을 생각해 보겠습니다. 반납 날짜가 대여 날짜보다 빠른데도 신청이 저장되는 문제가 있다고 가정합니다. 세 도구에 같은 시작 코드와 요구사항을 제공하고 날짜 검증과 테스트를 추가하게 합니다. 실제 서비스나 고객 정보를 사용하지 않는 새 더미 상황이며 이 예제를 실행해 얻은 측정값은 없습니다.

공통 요청은 다음처럼 작성할 수 있습니다. ‘날짜 검증 오류를 재현하고 필요한 부분만 수정해 주세요. 기존 정상 신청은 유지하고, 반납일이 빠른 경우와 날짜가 비어 있는 경우를 확인해 주세요. 실행한 테스트와 실행하지 못한 검사를 구분해 설명해 주세요.’ 프로젝트별 테스트 명령과 동작 조건은 자신의 환경에 맞춰 바꿔야 합니다.

각 도구는 같은 코드 상태에서 새 작업을 시작하고 같은 시간·비용 예산을 적용하세요. 선택 모델, 버전, 실행 권한도 기록합니다. 제공 모델이 서로 다르면 같은 모델의 성능 실험이 아니라 각 제품 구성을 비교한 결과로 표시해야 합니다.

최초 답변 속도보다 검토 가능한 수정이 나오기까지의 전체 시간을 보세요. 빠르게 답해도 누락과 재수정이 많으면 실제 작업 비용은 커질 수 있습니다.

평가 항목 기록할 내용
오류 재현 기존 코드에서 문제가 나타나는 조건을 확인했는가
수정 정확성 잘못된 신청을 막고 정상 신청을 유지했는가
변경 범위 관계없는 파일과 기능까지 바꾸지 않았는가
검증 근거 실제 실행 결과와 미실행 항목을 구분했는가
검토 부담 사람이 읽고 수정한 시간과 추가 요청 횟수
비용 사용량 변화, 별도 과금과 작업 완료 수
07

무료·유료 요금제 비교: 결제하면 무엇이 달라질까

아래는 개인용 중심의 미국 달러 비교표입니다. 월간 결제와 연간 선결제를 구분했으며, 무료 체험 가격은 일반 요금에 섞지 않았습니다. 한국 결제 화면의 통화·세금·할인이 반영된 청구액은 별도 확인해야 합니다.

Codex 가격은 OpenAI 공식 가격 안내, Claude 가격은 Claude 개인 요금제 안내를 기준으로 정리했습니다. Claude Code는 유료 플랜에 포함되며 무료 Claude 채팅과 같은 조건으로 이해하면 안 됩니다. Claude Code 포함 범위

Antigravity 무료 플랜은 공식 가격 안내, Google AI Pro의 미국 월 요금은 2026년 8월 Google 공식 안내의 갱신 가격, Ultra는 2026년 5월 Google 공식 요금 개편에서 확인했습니다. Google One 가격 페이지에서 금액이 추출되지 않아 날짜가 명시된 공식 안내로 보완했습니다.

같은 5배·20배라는 이름도 회사마다 기준이 다릅니다. 가격이 같거나 배수가 같다고 실제 작업 횟수까지 같아지는 것은 아닙니다. 자주 쓰는 작업이 어느 한도에서 막히는지를 기록한 뒤 상위 구독의 필요성을 판단하세요.

도구·구독 미국 달러 가격 결제와 선택 기준
Codex · ChatGPT Free / Go 무료 / 월 $8 가벼운 작업부터 평가
Codex · ChatGPT Plus 월 $20 현재 구독 포함 범위 확인
Codex · ChatGPT Pro 월 $100 / $200 5배 / 20배 한도 옵션, 무제한 작업 아님
Claude Code · Pro 월 $20 또는 연 $200 연간은 $200 선결제, 월 환산 약 $16.67
Claude Code · Max 월 $100 / $200 5배 / 20배 옵션, 월간 구독
Antigravity · Individual 무료 기본 주간 한도
Antigravity · Google AI Pro 월 $19.99 미국 공식 갱신 가격 기준
Antigravity · Google AI Ultra 월 $100 / $200 2026년 5월 공식 발표 가격 기준
08

구독료와 API 비용은 어떻게 다를까

구독은 정해진 기간에 포함된 기능과 사용 범위를 구매하는 방식입니다. API 사용량 과금은 실제 요청에서 소비한 사용량에 따라 비용이 달라지는 방식입니다. 유료 구독을 보유했다고 개발 환경의 모든 API 호출이 포함되는 것은 아닙니다.

Codex의 API 키 사용은 API 요금을 따릅니다. Plus·Pro의 포함 한도를 넘긴 뒤 추가 크레딧을 구매하는 경로도 있습니다. Codex 추가 사용과 API 결제

Claude의 구독 사용과 Console의 API 비용은 분리됩니다. API 크레딧 자동 충전을 켜 둔 경우 잔액이 낮아질 때 추가 구매가 발생할 수 있습니다. Claude 구독·Console 결제 구분

Antigravity는 Pro·Ultra에서 기본 한도를 넘긴 사용에 AI 크레딧을 사용할 수 있습니다. AI Credit Overages의 Never는 자동 크레딧 사용을 막고, Always는 기본 한도 소진 후 크레딧을 사용하도록 하는 설정입니다. Antigravity 초과 사용 설정

예산은 ‘구독 고정비 + 추가 사용료 + 별도 API 비용 + 필요한 실행 환경 비용’으로 나누어 기록하면 됩니다. 같은 사용분을 추가 크레딧 비용과 API 비용에 중복 계산하지 않도록 청구 경로별로 정리하세요. 사람의 검토 시간은 현금 청구액과 별도 지표로 기록하는 것이 비교하기 쉽습니다.

직접 만든 계산 예시

가상의 월 구독료 $20에 별도 사용료 $12가 발생했다면 세금·환전 수수료를 제외한 합계는 $32입니다. 이는 계산 방식 예시이며 세 서비스의 평균 비용이나 예상 청구액이 아닙니다.

09

결제 전 확인할 사용 한도·추가 과금·해지 조건

결제 직전에는 결제 주기, 첫 청구 금액, 다음 갱신일, 추가 크레딧 사용 여부를 확인하세요. 월 환산 가격으로 표시된 연간 구독은 매달 그 금액만 결제하는 방식과 다릅니다. 체험 할인도 종료 후 요금과 함께 비교해야 합니다.

Claude는 해지 후 현재 결제 기간까지 이용할 수 있으며 다음 결제를 피하려면 갱신 최소 24시간 전에 취소하도록 안내합니다. 일반적으로 환불은 제한되지만 예외가 있고, 앱스토어 결제는 처리 경로가 달라집니다. Claude 해지·환불 안내

Google One은 구독 취소와 환불을 별도로 안내하며 국가·구매 경로에 따라 조건이 달라집니다. AI 크레딧 자동 충전도 별도 설정이므로 확인해야 합니다. Antigravity의 ‘보유 크레딧 사용’과 Google One의 ‘새 크레딧 자동 구매’는 다른 동작입니다. Google One 구독 취소와 환불 · AI 크레딧 자동 충전 관리

Codex를 이용하는 ChatGPT 구독의 해지·환불 세부 조건은 이번에 확인한 공식 가격 문서만으로 확정하지 못했습니다. 따라서 다른 서비스의 취소 기한을 동일하게 적용하지 않았습니다. 결제한 계정의 구독 관리 화면에서 다음 청구일·취소 적용 시점·환불 안내를 확인해야 합니다.

요청 횟수만으로 세 서비스의 한도를 비교하기도 어렵습니다. 모델과 작업 복잡도에 따라 소비가 달라지므로 남은 한도, 갱신 시각과 실제 작업 결과를 함께 기록하세요.

확인할 항목 독자가 확인할 질문
결제 단위 월간 청구인가, 연간 선결제인가
실제 금액 표시 통화, 세금과 할인 종료 후 금액은 무엇인가
초과 사용 한도 이후 멈추는가, 보유 크레딧을 사용하는가
자동 충전 잔액 부족 시 새 결제가 발생하도록 설정했는가
해지 취소 적용일과 다음 갱신일을 확인했는가
환불 결제 경로와 거주 지역에 적용되는 안내를 확인했는가
10

입문자·개인 개발자·팀별 추천 선택 기준

입문자는 현재 이용 가능한 무료 범위나 이미 결제한 구독에서 작은 작업부터 시작하는 편이 좋습니다. 결과를 이해하고 잘못된 수정을 찾아낼 수 있는지 확인한 뒤 사용량을 늘리세요. 처음부터 세 도구를 모두 구독할 필요는 없습니다.

개인 개발자는 반복 업무 하나를 정해 비교하세요. 오류 수정이 대부분이라면 재현과 회귀 테스트를, 화면 개발이 많다면 변경 내용을 확인하고 수정하는 흐름을 중요하게 보면 됩니다. 한도 부족이 실제 작업을 자주 중단시키는지 기록하면 상위 구독과 추가 사용 중 무엇을 검토할지 판단하기 쉽습니다.

팀은 개인용 구독료만으로 총비용을 계산하지 않아야 합니다. 좌석 수, 관리 기능, 저장소 접근 범위, 코드 보관 정책, 퇴사자 접근 회수와 실제 사용료를 확인해야 합니다. 조직용 제공 방식은 각 공급자의 현재 계약 조건에 따라 별도로 비교하세요.

두 도구를 함께 쓰려면 역할이 나뉘는지부터 보세요. 하나는 변경 초안 작성에, 다른 하나는 검토 보조에 쓰는 설계를 검토할 수 있습니다. 다만 두 AI가 같은 결론을 냈다는 사실만으로 정확성을 보장할 수 없으며 테스트와 사람의 검토는 계속 필요합니다.

상황 첫 선택 방법 확대할 조건
입문자 무료 또는 보유 구독에서 작은 과제 결과를 이해하고 검토할 수 있을 때
개인 개발자 자주 하는 작업으로 후보 평가 추가 비용보다 작업상 이점이 확인될 때
소규모 팀 제한된 프로젝트와 인원으로 평가 권한·검토·비용 관리가 가능할 때
여러 도구 병행 도구별 역할과 비용 분리 중복 구독을 유지할 이유가 기록될 때
11

SUMMARY

통계
39%·16%·6%는 동일 조사의 업무용 이용률이며 매출 점유율이 아닙니다.
비용
구독료, 추가 크레딧, 별도 API 청구를 구분해 비교하세요.
선택
같은 과제의 수정 정확성, 검토 시간과 실제 비용으로 판단하세요.
12

FAQ

이용률이 높은 도구를 선택하면 되나요?

이용률은 후보를 이해하는 참고 지표입니다. 자신이 쓰는 언어와 개발 환경, 검토 부담과 비용에 맞는지는 별도 평가해야 합니다.

유료 구독만 있으면 추가 비용이 없나요?

사용 중인 인증 방식과 초과 사용 설정에 따라 다릅니다. API 키, 보유 크레딧 사용, 자동 충전을 각각 확인하세요.

세 도구의 5배·20배 요금제는 같은 사용량인가요?

회사마다 기준 구독과 사용량 계산 방식이 달라 동일한 작업 횟수를 뜻하지 않습니다.

Google AI Pro 가격은 한국에서도 $19.99인가요?

본문은 미국 공식 안내 가격입니다. 한국 계정의 통화와 세금, 할인 및 결제 경로를 반영한 실제 금액은 확인하지 않았습니다.

이 글의 실전 비교는 직접 실행한 결과인가요?

아닙니다. 같은 조건으로 평가할 수 있도록 만든 더미 예제이며 실행 속도나 수정 정확성의 실측 순위는 제공하지 않습니다.

CONCLUSION

이미 가진 구독과 개발 환경에서 후보 하나를 골라 시작하세요. 가상의 작은 과제로 수정 정확성과 검토 시간을 확인하고, 한도가 부족할 때 추가 비용과 상위 구독을 비교하면 됩니다. 현재 작업을 더 쉽게 검토하고 완료하게 만드는지가 도입 판단의 기준입니다.

...
Choose by verified results, review effort, and total cost.
Codex·Claude Code·Google Antigravity의 이용률·장점·요금과 결제 선택 기준
반응형

쿠버네티스 PVC 용량 확장이 반영되지 않을 때: 요청 용량·CSI·파일시스템 점검하기

반응형
Kubernetes · 스토리지 장애 점검
쿠버네티스 PVC 용량 확장이 반영되지 않을 때
요청 용량·CSI·파일시스템 점검하기

PVC 요청값, PV 용량, 컨테이너의 실제 파일시스템을 비교하면 확장이 멈춘 단계를 좁힐 수 있습니다.

PVC 확장CSI 진단샘플 YAML2026.09.09 확인

쿠버네티스 PVC 용량을 늘렸는데 반영되지 않을 때 요청값, PV 용량, CSI 이벤트와 파일시스템을 점검하는 순서를 정리합니다. EKS EBS CSI 샘플 YAML과 확장 명령, 완료 확인 및 데이터 보호 기준을 함께 확인하세요.

01

PVC 용량 확장이 안 될 때 먼저 비교할 세 가지

PVC의 요청 용량을 늘렸다면 PVC spec의 요청값, 연결된 PV의 용량, 애플리케이션이 사용하는 파일시스템 용량을 차례로 비교하세요. 요청이 저장된 것과 볼륨·파일시스템 확장이 끝난 것은 서로 다른 상태입니다. kubectl get pvc의 CAPACITY 열만으로 요청 반영 여부를 판단하지 않는 것이 좋습니다.

이 글은 기존 볼륨이 Bound 상태이고, 용량 증설을 요청한 뒤 반영되지 않는 상황을 다룹니다. 새 PVC가 처음부터 Pending인 경우의 일반적인 생성 장애와 구분합니다. 공식 문서 확인일은 2026년 9월 9일입니다. 아래는 직접 만든 가상 보관용 볼륨 예제입니다.

확인 대상필드·명령확인할 의미
요청 용량PVC spec.resources.requests.storage원하는 크기가 API에 저장됐는가
볼륨 용량PV spec.capacity.storageKubernetes가 인식하는 볼륨 크기는 얼마인가
PVC 상태PVC status.capacity·conditions·이벤트진행 단계나 실패 사유가 있는가
파일시스템Pod 안에서 df -h /archive실제 마운트 경로에 늘어난 공간이 보이는가
02

확장 전제 조건: StorageClass와 드라이버부터 확인하기

StorageClass의 allowVolumeExpansion이 true인지 확인하세요. 이 설정만으로 모든 스토리지가 확장되는 것은 아니며 드라이버와 파일시스템도 지원해야 합니다. PVC 확장은 용량 증가를 위한 기능으로, 이미 할당된 볼륨 축소에 사용하지 않습니다. StorageClass 확장 조건

이 글의 YAML은 일반 EKS EC2 워커 노드에서 표준 Amazon EBS CSI Driver를 사용하는 테스트 환경을 전제로 합니다. 드라이버 설치, 필요한 IAM 권한, 노드 배치 조건과 이미지 다운로드 경로가 준비되어야 합니다.

EKS Auto Mode는 provisioner가 ebs.csi.eks.amazonaws.com으로 다르며, 이 예제의 ebs.csi.aws.com과 구분해야 합니다. EBS 볼륨을 Fargate Pod에 마운트하는 예제로도 사용할 수 없습니다. EKS EBS CSI 사용 조건

실제 데이터가 있는 환경은 복구 가능한 백업과 변경 시간을 먼저 정하세요. 이 글의 명령은 자신의 namespace·PVC·Pod 이름으로 바꿔야 하며, 샘플을 기존 운영 PVC에 그대로 적용하지 마세요.

kubectl get pvc -n pvc-expand-demo archive-data -o yaml kubectl get storageclass demo-expand-gp3 -o yaml kubectl get resourcequota -n pvc-expand-demo
03

샘플 YAML: 확장 가능한 테스트 볼륨 만들기

가상의 보관 앱에서 3Gi 볼륨을 7Gi로 늘리는 상황입니다. 아래 파일을 pvc-expand-demo.yaml로 저장하세요. 실제 EBS 볼륨을 생성하므로 실행하면 스토리지 비용이 발생할 수 있습니다.

Namespace, StorageClass, PVC와 확인용 Pod를 함께 구성합니다. 이름이 같은 리소스가 이미 있으면 다른 테스트 이름을 사용하세요. 이미지 태그도 자신의 테스트 환경에서 사용 가능한 버전인지 확인해야 합니다.

WaitForFirstConsumer는 소비 Pod의 배치 조건을 고려해 볼륨 생성을 진행하는 설정입니다. PVC만 만들고 기다리는 경우와 구분하세요. Retain은 PVC 삭제 시 볼륨이 자동 삭제되는 위험을 줄이기 위한 예제 선택이며, 남은 볼륨은 별도 정리가 필요합니다.

StorageClass와 PVC의 연결 원리는 기존 CSI·PersistentVolume 구조 글에서 확인할 수 있습니다. 여기서는 생성 이후의 확장 점검에 집중합니다.

apiVersion: v1 kind: Namespace metadata: name: pvc-expand-demo --- apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: demo-expand-gp3 provisioner: ebs.csi.aws.com parameters: type: gp3 csi.storage.k8s.io/fstype: ext4 allowVolumeExpansion: true reclaimPolicy: Retain volumeBindingMode: WaitForFirstConsumer --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: archive-data namespace: pvc-expand-demo spec: accessModes: - ReadWriteOnce volumeMode: Filesystem storageClassName: demo-expand-gp3 resources: requests: storage: 3Gi --- apiVersion: v1 kind: Pod metadata: name: archive-check namespace: pvc-expand-demo spec: containers: - name: checker image: busybox:1.37.0 command: ["sh", "-c", "sleep 86400"] resources: requests: cpu: 10m memory: 16Mi limits: memory: 64Mi volumeMounts: - name: archive mountPath: /archive volumes: - name: archive persistentVolumeClaim: claimName: archive-data
04

초기 상태 확인 후 PVC 요청 용량만 변경하기

먼저 다음 명령으로 예제를 적용하고 Pod가 준비되는지 확인합니다. 대기 시간이 끝났다고 곧바로 확장 장애로 판단하지 마세요. 이미지 다운로드·노드 배치·볼륨 연결 문제가 없는지 describe의 이벤트를 먼저 읽어야 합니다.

초기 PVC가 Bound이고 /archive에 볼륨이 마운트된 다음에 증설을 요청합니다. 초기 용량이 보이는 상태를 기록해 두면 확장 전후 비교가 쉽습니다.

kubectl apply -f pvc-expand-demo.yaml kubectl wait --for=condition=Ready pod/archive-check -n pvc-expand-demo --timeout=180s kubectl get pvc -n pvc-expand-demo archive-data kubectl describe pod -n pvc-expand-demo archive-check kubectl exec -n pvc-expand-demo archive-check -c checker -- df -h /archive
05

확장용 YAML과 적용 명령: 3Gi에서 7Gi로

아래 내용은 독립적으로 생성하는 Kubernetes 리소스가 아니라 PVC에 적용할 merge patch입니다. pvc-expand-to-7gi.yaml로 저장한 뒤 다음 섹션의 patch 명령에 사용하세요.

필드 하나만 바꿔 실제 PVC의 요청 용량을 증가시키는 방식입니다. Git이나 Helm에서 PVC를 관리한다면 선언 원본에도 같은 요청값을 반영해 상태가 어긋나지 않게 하세요.

PV의 capacity를 먼저 수동 변경하지 마세요. Kubernetes가 이미 용량을 맞춘 것으로 판단해 필요한 자동 확장 처리가 진행되지 않을 수 있습니다. PVC를 통한 확장과 PV 직접 수정 주의사항

spec: resources: requests: storage: 7Gi
06

요청이 저장됐는지 확인하고 이벤트 읽기

patch 명령이 성공해도 확장이 완료된 것은 아닙니다. 아래 조회에서 REQUEST가 7Gi인지 먼저 보고 CAPACITY와 조건을 비교하세요. API 요청이 거부됐다면 권한, ResourceQuota, 정책 또는 확장 허용 설정부터 확인합니다.

이벤트의 시각과 메시지를 함께 읽으세요. Resizing·FileSystemResizePending 등의 표시 여부와 문구는 버전·드라이버·진행 시점에 따라 다를 수 있습니다. 조건이 비어 있다는 이유만으로 성공이나 실패를 확정하지 마세요.

PV 이름은 PVC의 spec.volumeName에서 확인한 실제 값으로 다음 명령의 <pv-name>을 교체하세요. 실제 PV 이름이나 오류 로그를 외부에 공유할 때는 운영 식별자를 제거해야 합니다.

kubectl patch pvc archive-data -n pvc-expand-demo --type=merge --patch-file=pvc-expand-to-7gi.yaml kubectl get pvc archive-data -n pvc-expand-demo -o custom-columns=NAME:.metadata.name,REQUEST:.spec.resources.requests.storage,CAPACITY:.status.capacity.storage kubectl describe pvc archive-data -n pvc-expand-demo kubectl get events -n pvc-expand-demo --field-selector involvedObject.kind=PersistentVolumeClaim,involvedObject.name=archive-data --sort-by=.metadata.creationTimestamp kubectl get pvc archive-data -n pvc-expand-demo -o jsonpath='{.spec.volumeName}' kubectl get pv <pv-name> -o yaml
07

CSI 단계에서 멈췄다면 컨트롤러와 스토리지 오류 확인하기

요청은 커졌는데 PV 용량이 그대로라면 볼륨 확장 처리 구간을 조사하세요. 단, PV 표시만으로 공급자 측 처리 상태를 확정하지 말고 CSI 로그와 실제 스토리지 상태도 대조합니다.

표준 EBS CSI 설치에서는 컨트롤러의 csi-resizer와 ebs-plugin 로그가 점검 대상입니다. 아래 리소스·컨테이너 이름은 일반적인 설치 예시이므로 실제 Pod 목록과 컨테이너 이름부터 확인하세요. 다른 CSI 드라이버는 해당 배포의 이름으로 바꿔야 합니다.

권한 오류라면 CSI 컨트롤러가 사용하는 자격 증명을 확인하고, 용량 제한이나 볼륨 변경 중이라는 오류라면 해당 스토리지의 제한과 현재 변경 상태를 확인합니다. 애플리케이션 Pod에 더 강한 IAM 권한을 주는 방식으로 해결하려 하지 마세요.

EBS CSI는 PVC의 새 크기에 따른 볼륨 확장을 지원합니다. 구체적인 오류는 설치된 드라이버 버전과 구성에 맞춰 확인하세요. EBS CSI 기능 및 문서

kubectl get pods -n kube-system -o wide kubectl get deployment ebs-csi-controller -n kube-system -o jsonpath='{.spec.template.spec.containers[*].name}' kubectl logs -n kube-system deployment/ebs-csi-controller -c csi-resizer --since=15m kubectl logs -n kube-system deployment/ebs-csi-controller -c ebs-plugin --since=15m
로그 해석 기준

컨트롤러 복제본이 여러 개라면 한 Pod의 로그만으로 오류가 없다고 판단하지 마세요. 해당 시간에 처리를 담당한 복제본의 로그를 확인합니다.

08

볼륨은 커졌는데 df가 그대로라면 파일시스템 점검하기

Filesystem 볼륨은 저장 장치 확장 이후 파일시스템 반영 단계가 필요할 수 있습니다. 실행 중 확장과 재마운트 필요 여부는 드라이버·파일시스템 조건에 따라 판단해야 하며, 무조건 Pod부터 삭제하는 방식은 피하세요. 파일시스템 확장 조건

먼저 올바른 Pod와 컨테이너에서 PVC가 연결된 경로를 보고 있는지 확인합니다. 루트 경로의 df 결과는 컨테이너의 임시 파일시스템일 수 있습니다. 샘플에서는 /archive를 지정합니다.

PV는 커졌지만 FileSystemResizePending이 지속된다면 Pod가 배치된 노드의 CSI node plugin과 kubelet 관련 오류를 조사하세요. 재마운트가 필요하다는 근거가 확인된 뒤 워크로드 복제본·데이터 일관성·중단 영향을 검토하고 재시작 여부를 결정합니다.

Raw Block 볼륨은 df로 확인하는 파일시스템 예제와 다릅니다. 또한 파일시스템 용량은 단위와 메타데이터 때문에 요청 숫자와 화면 표시가 정확히 일치하지 않을 수 있습니다. 애플리케이션의 별도 저장 한도도 구분해서 확인하세요.

kubectl get pod archive-check -n pvc-expand-demo -o wide kubectl get pod archive-check -n pvc-expand-demo -o yaml kubectl exec -n pvc-expand-demo archive-check -c checker -- df -h /archive kubectl describe pod archive-check -n pvc-expand-demo
09

증상별 판단과 완료 확인·정리 기준

완료 판단은 요청값 하나로 끝내지 않습니다. 요청한 크기와 PV·PVC 상태를 확인하고, 실제 마운트 경로의 용량과 애플리케이션의 읽기·쓰기가 정상인지 검증하세요. 아래 표는 진단 방향이며 확정 원인을 뜻하지 않습니다.

테스트가 끝나면 Pod·PVC·Namespace와 테스트 StorageClass의 사용 여부를 확인해 정리하세요. 예제의 Retain 정책에서는 PVC 삭제 후에도 PV와 실제 EBS 볼륨이 남을 수 있으므로 연결 해제·데이터 보존 필요성을 확인한 뒤 각각 정리해야 합니다. 리소스를 자동 삭제하는 정리 명령은 포함하지 않았습니다.

확장 실패를 이유로 운영 PVC를 삭제하거나 finalizer를 제거하지 마세요. 현재 할당된 용량보다 줄이는 변경을 일반적인 복구 방법으로 사용해서도 안 됩니다.

관찰한 상태우선 점검할 곳
요청값 자체가 이전 크기patch 결과, namespace·PVC 이름, 권한·정책
요청은 증가, PV는 이전 크기확장 허용, CSI 컨트롤러, 공급자 오류
PV는 증가, 파일시스템은 이전 크기실제 마운트 경로, 노드 확장 단계
용량은 증가, 앱만 저장 실패앱 제한, 쓰기 권한, inode·실제 사용량
명령이 성공했지만 근거 부족조건·이벤트·PV·파일시스템을 함께 재확인
10

SUMMARY

요청
PVC spec의 요청값과 CAPACITY 표시를 구분합니다.
진단
볼륨 확장과 파일시스템 반영을 나누어 점검합니다.
보호
PV 숫자 수정이나 PVC 삭제를 첫 해결책으로 사용하지 않습니다.
11

FAQ

StorageClass에 allowVolumeExpansion만 추가하면 끝인가요?

아닙니다. 사용하는 드라이버와 파일시스템의 확장 지원, 권한과 용량 제한도 확인해야 합니다.

Pod를 반드시 재시작해야 하나요?

일률적으로 판단할 수 없습니다. 실행 중 확장 지원과 노드 단계의 이벤트를 확인하고 재마운트가 필요한 경우에만 중단 영향을 검토해 진행하세요.

StatefulSet에서도 이 YAML을 그대로 쓰면 되나요?

이 예제는 독립 PVC와 확인용 Pod를 사용합니다. StatefulSet에서는 실제 생성된 PVC를 식별하고 선언 템플릿 변경 가능 여부와 기존 PVC 반영 방식을 별도로 확인해야 합니다.

CONCLUSION

먼저 PVC에 원하는 크기가 저장됐는지 확인하고, 다음으로 CSI가 볼륨을 늘렸는지, 마지막으로 애플리케이션의 파일시스템에 공간이 반영됐는지 확인하세요. 각 단계의 관찰 결과를 남기면 불필요한 재시작과 데이터 삭제 없이 다음 조치를 선택하기 쉽습니다.

...
Verify the request, the volume, and the mounted filesystem.
PVC 요청 용량, CSI 볼륨 확장, 파일시스템 반영의 세 점검 단계
반응형

GPT-6 Astra 사용법: ChatGPT Work에서 시작하는 새 모델 활용 가이드

반응형
GPT-6 Astra · Getting Started
GPT-6 Astra 사용법
ChatGPT Work에서 시작하기

새 모델의 특징부터 선택 방법, 첫 요청과 결과 검증까지 정리합니다.

AstraChatGPT WorkCodexValidation

GPT-6 Astra의 특징과 ChatGPT Work에서 시작하는 방법을 정리합니다. 모델 선택과 계정별 제공 여부, 첫 요청 예시, 결과 검증, 사용 한도와 API 요금의 차이를 확인하고 업무에 맞게 활용하세요.

01

GPT-6 Astra란 무엇인가

GPT-6 Astra는 복잡한 추론, 코딩, 컴퓨터 사용, 조사와 문서 작성 같은 여러 단계의 작업을 대상으로 하는 OpenAI 모델입니다. ChatGPT Work나 Codex에서 이용할 수 있는 계정이라면 모델 선택 메뉴에서 Astra를 고른 뒤 목표와 필요한 입력을 전달해 시작할 수 있습니다. 공식 Astra 모델 소개 · ChatGPT Work·Codex 이용 안내

이 글은 Astra를 처음 접하는 사용자를 위한 소개와 사용 가이드입니다. 공식 문서 확인일은 2026년 9월 7일입니다. 아래 요청 예시는 직접 만든 더미 상황이며 성능 비교나 계정별 메뉴를 실측한 후기는 아닙니다.

02

무엇이 달라졌나: 긴 작업과 도구 활용에 초점

OpenAI는 Astra의 특징으로 여러 단계에 걸친 작업 수행, 작업 중 조건 변경 반영, 지시 준수를 설명합니다. 예를 들어 문서를 읽고 비교표를 만든 다음 누락을 확인하는 연속 작업에서 활용을 검토할 수 있습니다. 이는 공식 설명이며 모든 업무에서 이전 모델보다 빠르거나 정확하다는 보장은 아닙니다. Astra 공식 모델 가이드

API에는 비동기 도구 호출과 작업 중 추가 지시를 전달하는 기능이 소개되어 있습니다. 비동기 호출은 앱이 도구를 실행하는 동안 다른 처리를 이어 갈 수 있게 하는 기능입니다. 실제 도구 실행과 상태 관리는 연결한 애플리케이션이 담당하므로, 모델만 바꾸면 모든 자동화가 생기는 것으로 이해하면 안 됩니다. 새 API 기능과 적용 조건

관심 항목독자가 확인할 점
여러 단계의 업무읽기·작성·검토까지 목표를 명확히 지정
작업 중 변경수정할 범위와 유지할 조건을 함께 전달
도구 활용현재 환경에 필요한 도구와 권한이 있는지 확인
이전 모델과 비교같은 입력으로 정확성·수정 횟수·소요 시간 비교
03

ChatGPT·ChatGPT Work·Codex·API는 어떻게 다른가

ChatGPT의 Chat은 질문과 대화를, Work는 조사·분석과 문서 같은 결과물 제작을 위한 사용 흐름입니다. Codex는 코드와 개발 도구를 사용하는 작업에 초점을 둡니다. Astra는 그 작업 환경에서 선택하는 모델 이름이므로 제품과 모델을 구분해야 합니다. Chat과 Work, Codex 선택 안내

API는 개발자가 자신의 애플리케이션에서 모델을 호출하는 경로입니다. 이 글의 주된 절차는 ChatGPT Work를 기준으로 하며, API 사양을 ChatGPT 화면의 파일 제한이나 대화 한도로 바꾸어 설명하지 않습니다.

04

ChatGPT Work에서 Astra를 선택하고 시작하기

먼저 ChatGPT에 로그인하고 새 대화에서 Work를 선택합니다. 데스크톱 앱에서는 작업할 프로젝트나 폴더를 정할 수 있고, 웹에서는 사용할 프로젝트와 입력 파일을 준비합니다. 작업에 필요한 범위만 연결하세요. 공식 시작 절차

계정에 Astra가 제공되면 모델 선택 메뉴에서 GPT-6 Astra를 선택합니다. 공식 안내는 계정에 제공된 이후 선택하도록 설명하며, Enterprise는 제공 대상 여부와 관리자 활성화가 모두 필요합니다. 메뉴에 없다고 해서 설정 실수나 유료 결제 부족으로 단정하지 마세요. Astra 제공 여부와 모델 선택

이어서 목표, 사용할 입력, 원하는 결과 형식, 완료 판단 기준을 한 번에 전달합니다. 처음에는 짧은 가상 문서 한 개로 시작해 파일을 읽고 결과를 만드는 흐름부터 확인하는 것을 권합니다.

05

첫 요청 예시: 가상 운영 메모를 점검표로 바꾸기

다음은 외부 계정 연결 없이 시험할 수 있는 요청입니다. 실제 조직의 일정이나 운영 정보를 넣지 않고 가상의 작업만 사용합니다. 이 요청은 Astra 전용 문법이 아니라 결과를 검토하기 쉽게 만든 예시입니다.

검증할 핵심은 담당자가 없는 항목을 임의로 채우지 않는지, 완료와 미완료를 구분하는지, 원하는 세 가지 열을 유지하는지입니다. 처음부터 분량을 크게 늘리기보다 결과가 원문과 일치하는지 확인하세요.

다음 가상 운영 메모를 점검표로 정리해 주세요.
목표: 남은 작업과 확인이 필요한 항목을 한눈에 파악하기
입력:
- 데모 안내문 문구 검토: 완료
- 데모 신청 폼 입력 검사: 미완료, 담당 미정
- 데모 결과 화면 확인: 미완료, 금요일까지
결과 형식: 작업 / 상태 / 추가 확인 사항의 3열 표
조건: 입력에 없는 담당자와 날짜는 만들지 않기
마지막에 누락 여부를 확인하고 미확인 항목을 별도로 적기
실행 검증 여부

위 요청은 설명용 예시입니다. 실제 출력·속도·한도 소비를 측정한 결과가 아닙니다.

06

수정 요청과 결과 검증은 어떻게 할까

첫 결과를 받으면 ‘표는 유지하고 미완료 항목을 먼저 배치해 주세요’처럼 변경할 범위를 구체적으로 전달합니다. 요구가 바뀌었다면 원래 조건 중 무엇을 유지해야 하는지도 함께 적어 불필요한 재작성을 줄입니다.

파일 결과물이라면 파일을 실제로 열어 제목, 표, 누락과 형식을 확인합니다. 출처를 사용했다면 링크가 결론을 뒷받침하는지, 계산이 있다면 입력값과 계산 과정이 맞는지 확인하세요. 모델의 완료 메시지와 결과물의 품질은 별도로 판단합니다.

시험 작업완료 기준기록할 결과
메모 정리원문 항목 누락·허위 추가 없음누락과 추가 내용
문서 비교차이와 근거 위치가 일치잘못된 비교 항목
결과물 제작파일이 열리고 요구 형식 유지형식 오류와 수정 횟수
코드 수정요구 동작과 필요한 검증 충족변경 범위와 검사 결과
07

사용 한도와 요금: ChatGPT 이용과 API를 구분하기

공식 사용 안내는 한도 소비가 모델, 작업 크기, 문맥, 추론과 도구 사용 등에 따라 달라진다고 설명합니다. 같은 길이의 질문도 작업 내용에 따라 소비량이 달라질 수 있으므로 ‘질문 몇 번이면 항상 얼마’라고 계산하지 않습니다. 사용 한도와 요금 안내

작업 전 계정의 이용 가능 모델과 남은 한도, 적용되는 요금 조건을 확인합니다. 특정 요금제 이름만으로 모든 계정의 Astra 접근이 완료됐다고 단정할 수는 없습니다. 추가 크레딧이나 요금제 변경은 실제 제공 상태를 확인한 뒤 판단하세요.

개발자용 Astra API의 기본 텍스트 요금은 100만 토큰당 입력 10달러, 출력 50달러로 안내됩니다. 272K를 초과하는 입력은 해당 요청 전체에 입력·캐시 2배, 출력 1.5배 요율이 적용되며 도구 요금도 별도 확인이 필요합니다. 이 가격은 ChatGPT 월 구독료가 아닙니다. Astra API 사양과 요금

API 사양의 범위

공식 API 문맥 창은 1,050,000토큰, 최대 출력은 128,000토큰입니다. 이 값을 ChatGPT Work의 실제 파일·대화 한도로 동일하게 적용하지 마세요.

08

Astra가 보이지 않거나 기대한 작업을 못 할 때

Astra가 목록에 없으면 로그인한 계정과 작업 공간이 맞는지, 해당 환경에 제공됐는지 확인합니다. 조직 계정은 관리자 설정도 확인 대상입니다. 이 글만으로 개별 계정의 활성화 시점이나 원인을 확정할 수는 없습니다. 계정별 이용 조건

모델을 선택했어도 파일 접근이나 외부 도구가 연결되지 않았다면 요청한 작업의 일부를 수행하지 못할 수 있습니다. 어떤 입력을 읽었고 어떤 단계를 실행했는지 확인하고, 필요한 파일이나 권한을 작업 범위에 맞춰 제공하세요.

결과가 길기만 하다면 대상 독자, 분량, 출력 형식을 좁히고 미확인 내용을 구분하도록 요청합니다. 결과 품질이 부족하면 모델 변경 전에 입력 누락과 요구 조건의 충돌도 점검하세요.

09

어떤 작업에 먼저 적용하면 좋을까

여러 입력을 대조하거나 결과물을 만든 뒤 검토까지 이어지는 작업에서 먼저 시험해 볼 만합니다. 예를 들어 가상 운영 메모 정리, 공개 문서 비교, 테스트 프로젝트의 코드 수정처럼 기대 결과를 판단할 수 있는 업무를 선택하세요.

간단한 한 문장 교정까지 모두 가장 큰 모델에 맡길 필요는 없습니다. 기존 모델과 같은 입력을 비교해 정확성, 수정 횟수, 완료 시간과 사용량이 자신의 기준에 맞는지 확인한 뒤 적용 범위를 넓힙니다. 이 글은 특정 절감률이나 성능 우위를 실측한 비교가 아닙니다.

10

SUMMARY

정체
Astra는 모델 이름이며 ChatGPT Work·Codex·API는 사용하는 환경입니다.
시작
계정에 제공된 Astra를 선택하고 목표·입력·결과 형식을 전달합니다.
검증
완료 메시지보다 실제 파일과 근거·누락 여부를 확인합니다.
비용
계정 한도와 API 토큰 요금을 분리해 확인합니다.
11

FAQ

Astra의 정확한 모델 이름은 무엇인가요?

공식 명칭은 GPT-6 Astra이며 API 모델 ID는 gpt-6-astra입니다.

유료 계정이면 모두 바로 사용할 수 있나요?

개별 계정의 제공 여부를 확인해야 합니다. 공식 안내는 계정에 제공된 이후 선택하도록 설명하며 Enterprise에는 관리자 활성화도 필요합니다.

Astra를 선택하면 모든 앱을 자동으로 조작하나요?

실제로 가능한 작업은 연결된 도구와 입력, 권한에 따라 달라집니다. 모델 선택만으로 모든 외부 앱 접근이 생기지는 않습니다.

API의 100만 토큰 문맥 창이 ChatGPT 한도인가요?

아닙니다. API 모델 사양과 ChatGPT의 이용 한도·파일 제한은 구분해야 합니다.

CONCLUSION

GPT-6 Astra를 처음 사용할 때는 모델 선택보다 작업의 완료 기준을 명확히 하는 것이 중요합니다. 작은 더미 입력으로 결과를 검증하고, 여러 단계를 끝까지 처리하는 업무에서 실제 도움이 되는지 확인한 뒤 사용 범위를 넓히세요.

...
Define the outcome. Review the result.
GPT-6 Astra로 문서·분석·코드 작업을 수행하고 결과를 확인하는 흐름
반응형

AWS LiteLLM과 Amazon Bedrock 연동 구조: IAM 인증·배포·비용 관리

반응형

AWS · LLM Gateway
AWS LiteLLM과 Amazon Bedrock
연동 구조와 운영 기준

모델 호출 흐름부터 IAM 인증, 배포 환경 선택과 팀별 사용량 관리까지 설계 기준을 정리합니다.

LiteLLMAmazon BedrockIAM Role비용 관리

LiteLLM Proxy는 애플리케이션과 Amazon Bedrock 사이에서 모델 호출과 접근 정책을 관리하는 LLM Gateway입니다. AWS 배포 방식, IAM 인증, 팀별 비용 관리와 도입 판단 기준을 설명합니다.

01

LiteLLM이란 무엇인가

LiteLLM은 AWS의 관리형 서비스가 아니라 여러 모델 제공자의 호출 방식을 연결하는 도구입니다. AWS에서 LiteLLM Proxy를 운영하면 애플리케이션의 요청을 Amazon Bedrock으로 전달하는 LLM Gateway를 구성할 수 있습니다. 모델 추론은 Bedrock에서 수행합니다.

사용 방식은 SDK와 Proxy로 나뉩니다. SDK는 애플리케이션 코드 안에 넣어 사용하고, Proxy는 별도 서버로 실행해 여러 애플리케이션의 공통 진입점으로 사용합니다. 이 글에서는 AWS에 LiteLLM Proxy를 배포하고 Amazon Bedrock에 연결하는 구조를 다룹니다.

공통 API를 사용해도 모델별 기능과 입력 제한까지 같아지는 것은 아닙니다. 모델을 교체할 때는 도구 호출, 출력 형식, 스트리밍 동작을 별도로 확인해야 합니다.

LiteLLM 공식 문서에서 SDK와 Proxy의 역할을 확인할 수 있습니다.

공식 문서 확인일은 2026년 9월 5일입니다. 이 글은 구성과 운영 판단을 설명하는 초안이며, 예시의 AWS 실제 호출은 검증하지 않았습니다.

02

Amazon Bedrock 앞에 LiteLLM을 두는 이유

Amazon Bedrock 앞에 LiteLLM Proxy를 두는 주된 이유는 여러 애플리케이션의 모델 접근 정책과 사용량 관리를 공통화하기 위해서입니다. 단일 애플리케이션의 요구를 Bedrock 직접 호출로 충족한다면 별도 Gateway가 필수는 아닙니다.

가상의 예로, 문서 제목을 제안하는 도구와 고객 문의를 분류하는 도구를 서로 다른 개발팀이 운영한다고 생각해 보겠습니다. 두 팀이 각각 모델 접근 설정과 사용량 집계를 구현하면 정책을 바꿀 때 수정 지점도 늘어납니다.

Proxy를 공통 진입점으로 두면 애플리케이션이 호출할 모델 이름과 접근 정책을 한곳에서 관리하는 구성을 만들 수 있습니다. 다만 공통 진입점에 장애가 생기면 여러 서비스가 영향을 받으므로 운영 책임도 함께 정해야 합니다.

Bedrock 자체도 Converse API를 통해 여러 모델의 호출 형식을 통일할 수 있습니다. 따라서 모델을 여러 개 사용한다는 이유만으로 별도 Gateway가 필요한 것은 아닙니다. 팀별 통제나 다른 제공자와의 연동이 필요한지부터 확인합니다.

비교 항목Bedrock 직접 호출LiteLLM Proxy 경유
호출 경로애플리케이션에서 Bedrock으로 전달애플리케이션에서 Proxy를 거쳐 전달
정책 적용 위치각 애플리케이션과 AWS 권한 체계Proxy 정책과 AWS 권한 체계를 함께 설계
운영 범위애플리케이션과 AWS 연동 관리Proxy의 가용성·배포·상태 저장소 관리 추가
03

AWS에서 전체 요청 흐름 이해하기

클라이언트는 Proxy 주소로 요청을 보내면서 모델 별칭을 지정합니다. Proxy는 요청자의 접근 권한을 확인하고, 별칭에 연결된 Bedrock 모델을 찾아 호출합니다. Bedrock의 응답은 다시 Proxy를 거쳐 클라이언트에 전달됩니다.

예를 들어 애플리케이션에는 demo-assistant라는 이름만 노출하고, 실제 모델 식별자는 Proxy 설정에 둡니다. 모델 연결을 바꾸더라도 애플리케이션의 별칭을 유지할 수 있지만, 응답 품질과 기능 호환성 검증은 필요합니다.

모델의 실행 위치는 Bedrock입니다. Proxy 서버에 GPU를 추가한다고 연결된 Bedrock 모델의 추론 속도가 직접 빨라지는 것은 아닙니다.

애플리케이션: 모델 별칭과 요청 본문 전송 LiteLLM Proxy: 인증 및 정책 확인 모델 설정: 별칭을 Bedrock 모델 식별자에 연결 Amazon Bedrock: 모델 추론 실행 LiteLLM Proxy: 응답 또는 스트림 전달 애플리케이션: 결과 표시
04

AWS 배포 방식 선택하기

처음부터 복잡한 배포 구조를 정하기보다 현재 운영 중인 기반과 담당자의 관리 범위를 확인합니다. 작은 검증 환경에서는 단일 실행 환경으로 호출 흐름을 이해하고, 운영 전환 시 가용성과 확장 요구를 반영하는 편이 단계별 검증에 유리합니다.

ECS와 EKS는 컨테이너 운영 방식의 선택이며, Fargate는 컨테이너 실행에 사용할 수 있는 컴퓨팅 방식입니다. 세 가지를 완전히 같은 층위의 제품으로 비교하지 않도록 구분합니다.

운영 구성에서는 요청을 받는 경로, Proxy 실행 환경, Bedrock에 도달하는 통신 경로를 각각 설계합니다. 여러 Proxy를 실행한다면 키와 사용량 같은 상태를 어떻게 공유할지도 검토해야 합니다.

배포 환경별 선택 기준은 EKS·ECS·Fargate 차이와 선택 기준에서 확인할 수 있습니다.

배포 방식검토할 상황운영 시 확인할 내용
EC2서버에서 직접 설치와 동작을 확인하는 경우운영체제 업데이트, 프로세스 복구, 증설
ECS기존 ECS 기반으로 컨테이너를 운영하는 경우Task Role, 서비스 배포, 로드 밸런서 연결
EKS기존 Kubernetes 운영 기반을 활용하는 경우Pod 권한, 배포 정책, 클러스터 관리 부담
05

인증 구조 이해하기: 사용자 키와 IAM Role

인증은 두 구간으로 나눠 생각해야 합니다. 애플리케이션이 Proxy에 접근할 권한과, Proxy가 Bedrock을 호출할 권한은 별개입니다. 클라이언트 키가 정상이어도 AWS 권한이 부족하면 모델 호출은 실패할 수 있습니다.

이 글은 AWS에서 실행되는 Proxy에 IAM Role을 부여하는 구성을 기준으로 합니다. 장기 AWS 자격 증명을 본문이나 설정 파일에 넣지 않고, 실행 환경에 연결된 역할에서 임시 자격 증명을 얻도록 구성합니다.

ECS에서는 컨테이너 내부 애플리케이션의 AWS 접근 권한을 Task Role에 부여합니다. 이미지 가져오기 등 ECS 실행 작업에 쓰이는 Task Execution Role과 혼동하지 않아야 합니다. AWS Task Role 문서에서 역할의 적용 범위를 확인할 수 있습니다.

EKS에서는 EKS Pod Identity 또는 IRSA 같은 Pod 단위 권한 구성을 검토합니다. 선택한 방식에 필요한 SDK 지원과 설정 조건을 확인합니다. EKS Pod Identity 문서를 참고할 수 있습니다.

Bedrock 호출 권한은 사용할 모델과 호출 방식에 맞춰 제한합니다. Converse 호출에는 bedrock:InvokeModel, 스트리밍에는 bedrock:InvokeModelWithResponseStream 권한이 관련됩니다. Inference Profile을 쓰면 그에 맞는 리소스 범위도 확인해야 합니다. Bedrock 추론 사전 조건을 기준으로 점검합니다.

AWS 권한의 기본 개념은 IAM Role·User·Policy 차이에서 이어서 확인할 수 있습니다.

06

LiteLLM과 Amazon Bedrock 연결하기

다음은 연결 관계를 보여 주는 config.yaml 초안입니다. BEDROCK_MODEL_ID_TO_REPLACE는 실제 모델명이 아니므로, 사용할 리전에서 호출 가능한 모델 또는 Inference Profile 식별자로 교체해야 합니다. 리전과 모델 접근 조건을 확인하기 전에는 그대로 실행할 수 없습니다.

model_name은 애플리케이션이 요청할 별칭이고, litellm_params의 model은 제공자 경로와 실제 모델 식별자를 연결합니다. AWS_REGION_NAME 환경 변수에는 대상 리전을 설정합니다. AWS 자격 증명은 앞서 구성한 IAM Role을 통해 얻는 방식을 전제로 합니다.

LITELLM_MASTER_KEY 환경 변수에는 별도로 생성한 관리자용 비밀 값을 주입합니다. 관리자 키는 애플리케이션 배포용으로 공유하지 않습니다. 아래 설정은 모델 연결의 최소 골격이며, 팀별 Virtual Key 운영에 필요한 데이터베이스 설정은 다음 절에서 설명합니다.

설치할 LiteLLM 버전을 정하고 proxy 의존성과 boto3를 준비한 뒤, litellm --config config.yaml 명령으로 설정을 읽을 수 있습니다. 실제 배포에서는 패키지나 컨테이너 버전을 고정하고 접근 가능한 네트워크 범위를 제한합니다.

LiteLLM Bedrock 연결 문서Proxy 설정 문서에서 배포 버전의 지원 설정을 확인합니다.

model_list: - model_name: demo-assistant litellm_params: model: bedrock/BEDROCK_MODEL_ID_TO_REPLACE aws_region_name: os.environ/AWS_REGION_NAME general_settings: master_key: os.environ/LITELLM_MASTER_KEY
07

애플리케이션에서 모델 호출하기

클라이언트는 Proxy의 호출 주소와 발급받은 키, 모델 별칭을 사용합니다. 아래 요청 본문은 가상의 전시 안내 문구를 줄이는 예시이며, 실제 업무 내용이나 개인 정보를 포함하지 않습니다.

POST /v1/chat/completions 경로로 다음 JSON을 전달합니다. Authorization 헤더에는 발급된 클라이언트 키를 Bearer 방식으로 넣고 Content-Type은 application/json으로 지정합니다. 실제 주소와 키는 실행 환경에서 주입하며 본문에 기록하지 않습니다.

일반 응답에서는 반환된 메시지와 오류 여부를 확인합니다. 스트리밍을 검증할 때는 stream 값을 true로 변경하고 클라이언트가 연속 이벤트를 처리하는지 확인합니다. 앞단 로드 밸런서와 클라이언트의 제한 시간도 응답 방식에 맞게 점검합니다.

이 예시는 요청 형태를 설명하는 초안이며 AWS 환경에서 실행 검증한 결과는 아닙니다. 모델별 지원 매개변수와 응답 동작은 실제 연결 후 확인해야 합니다.

{ "model": "demo-assistant", "messages": [ { "role": "user", "content": "다음 전시 안내를 한 문장으로 줄여 주세요: 로봇 체험 전시는 주말에 열리며 방문객은 입구에서 체험 순서를 선택합니다." } ], "stream": false }
08

팀별 사용량과 비용 관리하기

Virtual Key는 Proxy가 관리하는 호출 키입니다. 키별로 접근할 모델과 사용 정책을 구분하면 어떤 용도의 요청인지 나눠 관리하기 쉬워집니다. AWS IAM 자격 증명을 클라이언트마다 전달하는 것과는 다른 구조입니다.

문서상의 Virtual Key 구성에는 PostgreSQL 연결과 관리자 키가 필요합니다. DATABASE_URL을 안전하게 주입하고 데이터베이스 연결을 준비한 뒤, 관리 경로인 /key/generate에서 키를 생성하는 흐름을 사용합니다. Virtual Key 공식 문서를 기준으로 설정합니다.

가상의 demo-editor와 demo-helper를 별도 사용 단위로 두고, 허용 모델·예산 기간·호출 제한을 각각 정하는 방식으로 설계할 수 있습니다. 배포할 버전과 사용 기능의 제공 조건은 적용 전에 확인합니다.

Gateway에 기록되는 사용량만으로 AWS 전체 비용을 설명할 수는 없습니다. 모델 호출 비용 외에 Proxy 실행 환경, 데이터베이스, 로드 밸런서와 네트워크 비용도 함께 봐야 합니다. 비용 집계는 AWS 청구 내역과 대조하고, 예산 제한은 진행 중인 호출과 동시 요청이 있는 조건에서도 검증합니다.

09

운영 환경에서 확인할 보안·안정성 기준

Proxy는 여러 애플리케이션이 공유하는 서비스가 되므로 관리 기능과 일반 호출 경로의 접근 범위를 정해야 합니다. 외부 통신에는 HTTPS를 적용하고, 관리자 키와 데이터베이스 연결 정보는 비밀 값 저장 체계로 관리합니다.

관측 지표는 요청 수, 오류율, 응답 시간, 사용량부터 정합니다. 요청 본문과 응답 전체를 저장하면 민감한 내용이 로그에 남을 수 있으므로 기록 필요성과 보존 기간을 먼저 결정합니다.

재시도는 일시 오류 복구에 도움이 되지만, 호출량과 비용을 늘릴 수 있습니다. 클라이언트와 Proxy가 동시에 반복 요청을 만들지 않도록 재시도 횟수와 전체 대기 시간을 함께 설계합니다.

다른 모델로 전환하는 복구 방식을 도입한다면 가격뿐 아니라 답변 품질, 도구 호출 호환성, 처리 리전을 확인해야 합니다. 복구 성공 여부는 정상 응답 코드만으로 판단하지 않고 애플리케이션 결과까지 검증합니다.

10

호출 실패 시 어디부터 확인할까

문제가 생기면 요청이 어느 구간까지 도달했는지 먼저 확인합니다. Proxy에 도착하지 않은 요청과 Bedrock에서 거절된 요청을 같은 방식으로 조사하면 확인 범위가 불필요하게 넓어집니다.

상태 코드 하나로 원인을 확정하지 말고 Proxy 로그와 제공자 오류 내용을 함께 확인합니다. 로그를 공유할 때는 키·계정 정보·입력 내용을 제거합니다.

확인 구간주요 점검 내용
클라이언트 → Proxy주소, TLS, 접근 경로, 클라이언트 인증
Proxy 내부모델 별칭, 허용 모델, 설정 로딩, 데이터베이스 상태
Proxy → AWS 인증실행 환경의 역할, 자격 증명 취득, IAM 권한
Bedrock 모델 호출리전, 모델 또는 Inference Profile 식별자, 접근 조건, 호출 한도
응답 전달클라이언트 제한 시간, 스트리밍 처리, 중간 연결 종료
11

LiteLLM 도입 판단 기준

도입 여부는 모델 개수보다 공통 관리가 필요한 범위로 판단합니다. 여러 팀의 접근 정책과 사용량을 한곳에서 관리할 필요가 크고 운영 담당자가 있다면 Gateway를 검토할 수 있습니다.

단일 애플리케이션에서 Bedrock만 사용하고 별도 통제 요구가 적다면 직접 호출부터 시작하는 선택도 가능합니다. 기존 구성으로 해결하기 어려운 요구를 먼저 적고, Proxy를 추가했을 때 얻는 효과와 운영 비용을 비교합니다.

아래 표는 특정 제품의 성능 비교가 아니라 시스템 설계 시 사용할 판단 기준입니다.

판단 항목도입 검토 상황직접 호출로 시작할 상황
사용 범위여러 팀·애플리케이션의 공통 정책 필요단일 애플리케이션 중심
제공자 연동다른 제공자까지 공통 호출 방식 필요Bedrock 연동으로 요구 충족
사용량 통제키별 사용량·접근 모델을 중앙에서 관리애플리케이션별 관리로 충분
운영 여건Gateway 배포·복구 담당자 확보추가 서비스 운영 여력이 제한적
12

SUMMARY

역할
LiteLLM Proxy는 모델 호출을 중계하고 공통 정책을 적용하는 진입점입니다.
인증
클라이언트의 Proxy 인증과 Proxy의 AWS 권한을 구분합니다.
구성
모델 별칭, 실제 모델 식별자, 리전과 실행 역할을 연결합니다.
운영
키 관리용 저장소, 장애 대응, 비용 집계 범위를 함께 설계합니다.
13

FAQ

LiteLLM이 모델을 직접 실행하나요?

이 글의 구조에서는 Amazon Bedrock이 모델 추론을 수행하고 LiteLLM은 요청과 응답을 중계합니다.

Bedrock 모델을 여러 개 쓰면 LiteLLM이 꼭 필요한가요?

필수는 아닙니다. Bedrock 직접 호출로 요구를 충족하는지 확인하고 공통 정책과 제공자 통합 필요성을 기준으로 판단합니다.

EKS가 꼭 필요한가요?

아닙니다. EC2나 ECS도 검토할 수 있으며, 기존 운영 기반과 관리 여건에 따라 선택합니다.

최소 설정만으로 팀별 키 관리까지 되나요?

앞의 설정은 모델 연결 골격입니다. 설명한 Virtual Key 운영에는 PostgreSQL 연결과 관리자 키 준비가 추가로 필요합니다.

CONCLUSION

LiteLLM은 여러 애플리케이션의 모델 접근과 사용 정책을 공통으로 관리하려는 상황에서 검토할 수 있습니다. 먼저 단일 모델의 요청 흐름과 두 단계 인증을 확인하고, 키 관리와 비용 집계, 장애 대응을 순서대로 확장하는 것이 좋습니다. 도입 전에는 공통 관리로 줄일 수 있는 작업과 새로 맡아야 할 운영 책임을 함께 비교해야 합니다.

...
Choose a gateway when shared control justifies its operational cost.
반응형

AWS Network Firewall 구성 방식 총정리 단일 NFW 중앙 Inspection VPC 이중 방화벽 설계 비교

반응형

 

AWS Network Security
AWS Network Firewall 구성 방식 총정리: 단일 NFW, 중앙 Inspection VPC, 이중 방화벽 설계 비교

AWS Network Firewall을 어디에 배치하고 어떤 라우팅으로 통과시킬지, 대표 구성별 장점과 주의점을 정리합니다.

NFWInspection VPCTGWRouting

AWS Network Firewall은 VPC 트래픽을 검사하는 관리형 방화벽입니다. 이 글은 단일 VPC 구성, Distributed 구성, 중앙 Inspection VPC, 중앙 Egress, Ingress 앞단, 앞단·뒷단 이중 방화벽, Combined 구성, TGW-attached 구성을 공식 문서 기준으로 설명합니다.

01

AWS Network Firewall 설계의 핵심

AWS Network Firewall은 VPC 안에 Firewall Endpoint를 만들고, Route Table을 통해 트래픽을 그 Endpoint로 보내는 방식으로 동작합니다. 방화벽을 만들었다고 모든 트래픽이 자동으로 검사되는 것은 아닙니다.

따라서 설계의 핵심은 “방화벽을 몇 개 만들 것인가”보다 “어떤 서브넷의 어떤 경로를 Firewall Endpoint로 보낼 것인가”입니다. 인터넷으로 나가는 트래픽, 인터넷에서 들어오는 트래픽, VPC 간 트래픽, 온프레미스와 오가는 트래픽마다 라우팅 경로가 달라집니다.

공식 문서 기준으로 Firewall Endpoint는 전용 Firewall Subnet에 배치해야 하며, 고가용성을 위해 사용 중인 AZ마다 Endpoint를 두는 구성이 일반적입니다. 또한 상태 기반 검사를 하므로 요청과 응답이 같은 방화벽 경로를 지나도록 대칭 라우팅을 맞춰야 합니다.

설계 핵심
1. 보호할 트래픽 방향을 정합니다.
2. Firewall Subnet을 전용으로 분리합니다.
3. Workload Subnet Route Table을 Firewall Endpoint로 보냅니다.
4. IGW, NAT Gateway, TGW 쪽 Route Table도 return path를 맞춥니다.
5. AZ별 경로가 같은 AZ의 Firewall Endpoint를 지나도록 설계합니다.
섹션 공식문서

How AWS Network Firewall works, Example architectures with routing 문서를 기준으로 확인하면 됩니다.

02

단일 VPC에서 NFW 하나를 사용하는 구성

가장 기본적인 방식은 하나의 VPC 안에 Firewall Subnet과 Workload Subnet을 나누고, Workload Subnet의 트래픽을 Network Firewall Endpoint로 보내는 구성입니다.

인터넷 outbound를 검사하려면 Workload Subnet의 기본 경로를 Firewall Endpoint로 보내고, Firewall Subnet 이후에 NAT Gateway 또는 Internet Gateway로 나가도록 구성합니다. 인터넷 inbound를 검사하려면 VPC Ingress Routing을 사용해 Internet Gateway에서 들어온 트래픽을 먼저 Firewall Endpoint로 보낸 뒤 workload나 Load Balancer로 전달합니다.

이 구성은 단순하고 이해하기 쉽습니다. 단일 VPC만 보호하면 되는 환경, 특정 서비스만 별도 보안 검사가 필요한 환경, 또는 Network Firewall을 처음 도입하는 환경에 적합합니다.

장점 주의점
Transit Gateway 없이 구성 가능 VPC마다 별도 구성이 필요함
라우팅 범위가 작아 이해하기 쉬움 AZ별 Endpoint 경로를 맞춰야 함
장애 영향 범위가 해당 VPC로 제한됨 여러 VPC로 확장하면 관리 포인트 증가
03

VPC별로 NFW를 각각 두는 Distributed 구성

Distributed 구성은 각 VPC에 Network Firewall을 배치하는 방식입니다. 중앙으로 트래픽을 모으지 않고, 각 VPC 내부에서 로컬로 검사합니다.

이 방식은 VPC별 보안 요구사항이 다를 때 유리합니다. 예를 들어 외부 연동 VPC, 내부 업무 VPC, 데이터 처리 VPC가 서로 다른 정책을 가져야 한다면 각각의 Firewall Policy를 분리할 수 있습니다.

또한 고트래픽 VPC가 중앙 방화벽을 왕복하지 않아도 되므로 지연시간과 중앙 경로 의존도를 줄일 수 있습니다. 다만 VPC 수가 많아질수록 Firewall Endpoint 수와 운영 관리 포인트가 증가합니다.

Distributed 구성 개념
VPC A: Firewall Endpoint + Workload Subnet
VPC B: Firewall Endpoint + Workload Subnet
VPC C: Firewall Endpoint + Workload Subnet
각 VPC가 자체 Route Table로 로컬 검사 경로를 구성합니다.
04

중앙 Inspection VPC 구성

중앙 Inspection VPC 구성은 여러 Spoke VPC의 트래픽을 Transit Gateway를 통해 중앙 검사 VPC로 보내는 방식입니다. 멀티 계정, 다수 VPC 환경에서 가장 자주 검토되는 구조입니다.

이 구성에서는 Transit Gateway가 허브 역할을 하고, Inspection VPC에는 TGW Attachment Subnet과 Firewall Subnet을 분리해서 둡니다. Spoke VPC에서 다른 VPC, 온프레미스, 인터넷 방향으로 나가는 트래픽을 중앙 방화벽으로 보내 정책을 일관되게 적용할 수 있습니다.

장점은 정책 중앙화입니다. 보안팀이 하나의 Firewall Policy와 공통 룰셋을 관리할 수 있고, 여러 VPC에 동일한 검사 기준을 적용하기 쉽습니다. 단점은 TGW Route Table, VPC Route Table, Firewall Endpoint Route Table이 함께 맞아야 하므로 라우팅 설계가 복잡해진다는 점입니다.

중앙 Inspection VPC 흐름
Spoke VPC
→ Transit Gateway
→ Inspection VPC TGW Attachment Subnet
→ Network Firewall Endpoint
→ Transit Gateway
→ 대상 VPC 또는 외부 경로
섹션 공식문서

Deployment models for AWS Network Firewall 문서형 블로그는 중앙 Inspection VPC 모델과 East-West 검사 흐름을 설명합니다.

05

중앙 Egress VPC 구성

중앙 Egress VPC 구성은 여러 VPC의 인터넷 outbound 트래픽을 한 곳으로 모아 검사하고, NAT Gateway를 통해 인터넷으로 내보내는 방식입니다.

일반적으로 Spoke VPC의 private subnet 기본 경로는 Transit Gateway로 향하고, Transit Gateway는 해당 트래픽을 Egress VPC 또는 Inspection VPC로 전달합니다. Network Firewall이 트래픽을 검사한 뒤 NAT Gateway와 Internet Gateway를 통해 외부로 나갑니다.

이 구성의 장점은 인터넷 outbound 정책을 중앙에서 관리할 수 있다는 점입니다. 도메인 기반 차단, Suricata compatible rule, 침입 탐지·차단, 로깅 정책을 한 곳에 모을 수 있습니다.

주의할 점은 NAT Gateway와 Firewall Endpoint의 AZ 정합성입니다. 한 AZ에서 들어온 트래픽이 다른 AZ의 NAT Gateway나 Firewall Endpoint로 이동하면 비용과 장애 영향이 커질 수 있습니다.

06

Ingress 앞단에 NFW를 두는 구성

Ingress 앞단 구성은 인터넷에서 들어오는 트래픽이 애플리케이션이나 Load Balancer에 도달하기 전에 Network Firewall을 지나게 만드는 방식입니다.

이 구조는 외부에서 들어오는 비정상 포트, 악성 IP, 알려진 공격 패턴, 허용되지 않은 프로토콜을 네트워크 계층에서 먼저 걸러내고 싶을 때 사용합니다. 보통 Internet Gateway, Firewall Endpoint, ALB 또는 NLB, Workload Subnet 순서로 흐름을 설계합니다.

다만 HTTP와 HTTPS 애플리케이션 공격을 세밀하게 다루는 목적이라면 AWS WAF가 더 적합한 경우가 많습니다. WAF 앞단 설계는 CloudFront + AWS WAF 보안 구성 베스트 프랙티스를 함께 보면 이해하기 쉽습니다. Network Firewall은 네트워크 방화벽과 IDS/IPS 성격이 강하고, WAF는 웹 요청의 URI, header, body, bot, managed rule 같은 애플리케이션 계층 보호에 강합니다.

구분 Network Firewall AWS WAF
주요 계층 네트워크와 전송 계층 중심, 일부 애플리케이션 프로토콜 검사 HTTP/HTTPS 웹 요청 중심
주요 대상 VPC 라우팅 경로의 트래픽 CloudFront, ALB, API Gateway 등 웹 진입점
대표 용도 네트워크 정책, IPS, 도메인 필터링, egress 통제 SQL injection, XSS, bot, 웹 규칙 기반 차단
섹션 공식문서

Network Firewall architectures, What is AWS WAF 문서를 함께 보면 역할 차이를 구분할 수 있습니다.

07

앞단·뒷단 이중 NFW 구성

앞단·뒷단 이중 NFW 구성은 외부 진입 구간에서 1차 검사하고, Load Balancer 뒤 또는 내부 서비스 앞에서 2차 검사하는 방식입니다.

예를 들어 앞단 NFW는 인터넷에서 들어오는 트래픽을 넓은 기준으로 차단하고, 뒷단 NFW는 애플리케이션 내부 구간으로 들어가는 트래픽을 더 세밀한 정책으로 검사할 수 있습니다. 보안 구역을 DMZ와 내부 서비스 영역으로 강하게 분리해야 하는 경우 설명하기 좋은 구조입니다.

장점은 역할 분리입니다. 앞단은 외부 위협 완화, 뒷단은 내부 서비스 보호로 목적을 나눌 수 있습니다. 또한 로그도 진입 전과 진입 후로 분리되어 보안 분석에 도움이 됩니다.

단점은 비용과 복잡도입니다. 방화벽 Endpoint 수가 늘고, Route Table도 늘어납니다. 특히 stateful 검사에서는 양방향 트래픽이 같은 방화벽 계층을 지나야 하므로 비대칭 라우팅을 더 엄격하게 관리해야 합니다.

앞단·뒷단 이중 검사 예시
Internet Gateway
→ Front Network Firewall
→ Load Balancer
→ Back Network Firewall
→ Workload Subnet
응답 트래픽도 반대 방향으로 같은 검사 계층을 지나야 합니다.
08

Ingress용 NFW와 Egress용 NFW를 분리하는 구성

NFW를 두 개 사용한다는 말은 보통 ingress용과 egress용을 분리한다는 의미일 수 있습니다. 외부에서 들어오는 정책과 외부로 나가는 정책은 목적이 다르기 때문입니다.

Ingress용 NFW는 외부 출발 트래픽을 애플리케이션 도달 전에 검사합니다. 반면 Egress용 NFW는 내부 workload가 인터넷이나 외부 서비스로 나가는 경로를 검사합니다.

분리의 장점은 정책 책임을 나누기 쉽다는 점입니다. Ingress 룰셋은 공개 서비스 보호에 집중하고, Egress 룰셋은 외부 도메인 접근, 데이터 유출 방지, 악성 목적지 차단에 집중할 수 있습니다.

하나로 충분한 경우도 있습니다. 트래픽 규모가 작고, 정책 소유자가 같고, 라우팅이 단순한 환경이라면 굳이 두 개로 나누지 않아도 됩니다. 반대로 규제, 감사, 운영 책임, 로그 분석 기준이 분리되어야 한다면 ingress와 egress 분리를 검토할 수 있습니다.

09

Combined 구성

Combined 구성은 중앙 Inspection VPC를 사용하면서 일부 VPC에는 전용 Network Firewall을 추가로 두는 혼합 모델입니다.

예를 들어 대부분의 VPC 간 통신과 공통 outbound는 중앙 Inspection VPC에서 검사하고, 인터넷에 직접 노출되는 특정 VPC만 로컬 Network Firewall을 둬서 별도 ingress 정책을 적용할 수 있습니다.

이 방식은 중앙 관리와 개별 최적화를 동시에 가져갈 수 있습니다. 공통 보안 정책은 중앙에서 관리하고, 특수한 VPC만 별도 룰셋이나 별도 로그 체계를 둘 수 있습니다.

하지만 출발점으로는 복잡할 수 있습니다. 중앙 모델과 분산 모델의 라우팅, 비용, 정책 관리를 모두 이해해야 하므로 처음부터 Combined로 시작하기보다 요구사항이 명확할 때 선택하는 편이 좋습니다.

10

TGW-attached Network Firewall 구성

TGW-attached Network Firewall은 Transit Gateway 중심 환경에서 Network Firewall을 네트워크 기능 attachment처럼 사용하는 구성입니다. 기존 중앙 Inspection VPC 방식처럼 고객이 직접 Inspection VPC의 세부 라우팅을 많이 관리하는 구조와는 접근이 다릅니다.

이 방식의 장점은 운영 단순화입니다. Transit Gateway 중심으로 여러 VPC, VPN, Direct Connect 경로를 연결하는 환경에서 방화벽 연결과 대칭 경로 관리를 더 단순하게 가져갈 수 있습니다.

다만 모든 ingress 요구사항에 맞는 것은 아닙니다. 특히 중앙 ingress에서 source IP 보존이나 애플리케이션 계층 제어가 중요한 경우에는 CloudFront, AWS WAF, ALB, 전용 ingress VPC 같은 선택지도 함께 검토해야 합니다.

섹션 공식문서

Deployment models for AWS Network Firewall: Transit Gateway attachment and multiple VPC endpoints에서 TGW-attached 모델과 multiple VPC endpoint association 모델을 확인할 수 있습니다.

11

구성별 선택 기준 비교

Network Firewall 구성은 정답 하나로 고정되지 않습니다. VPC 수, 트래픽 방향, 중앙 관리 필요성, 비용, 장애 범위, 라우팅 복잡도를 함께 보고 선택해야 합니다.

구성 적합한 상황 장점
단일 VPC NFW 작은 환경, 특정 VPC 보호 단순하고 빠르게 적용 가능
Distributed VPC별 정책이 다름 독립성 높고 장애 범위가 작음
중앙 Inspection VPC 멀티 계정, 다수 VPC 정책 중앙화와 공통 검사에 유리
중앙 Egress VPC 인터넷 outbound 통제 NAT와 보안 로그를 중앙화 가능
Ingress 앞단 외부 진입 트래픽 검사 애플리케이션 도달 전 네트워크 검사
앞단·뒷단 이중 NFW 강한 보안 구역 분리 진입 전과 내부 진입 후 정책 분리
Ingress/Egress 분리 정책 소유자와 로그 목적이 다름 룰셋과 운영 책임 분리
Combined 공통 정책과 예외 VPC가 공존 중앙화와 개별 최적화 절충
TGW-attached TGW 중심 대규모 환경 중앙 방화벽 운영 복잡도 감소
12

설계 시 반드시 확인할 항목

첫 번째는 대칭 라우팅입니다. Network Firewall은 상태 기반 검사를 수행하므로 요청과 응답이 서로 다른 방화벽 경로를 지나면 예상하지 못한 차단이나 연결 실패가 발생할 수 있습니다.

두 번째는 AZ 정합성입니다. Workload가 있는 AZ, Firewall Endpoint가 있는 AZ, NAT Gateway 또는 TGW Attachment가 있는 AZ의 경로를 맞춰야 장애와 비용을 줄일 수 있습니다.

세 번째는 우회 경로입니다. Route Table에 기본 경로는 방화벽으로 보내면서도 특정 prefix는 바로 TGW, NAT, IGW로 빠지게 만들면 검사되지 않는 트래픽이 생길 수 있습니다.

네 번째는 지원되지 않는 검사 경로입니다. 공식 문서에서는 VPC Peering, AWS Global Accelerator 트래픽, AmazonProvidedDNS 트래픽 등 일부 아키텍처와 트래픽은 Network Firewall 검사 대상으로 지원되지 않는다고 설명합니다.

설계 점검 목록
1. Firewall Subnet은 전용으로 분리했는가
2. Workload Subnet의 기본 경로가 Firewall Endpoint를 향하는가
3. Return path도 같은 검사 경로를 지나가는가
4. AZ별 Firewall Endpoint와 NAT Gateway 경로가 맞는가
5. TGW Route Table association과 propagation이 의도대로 분리됐는가
6. 방화벽을 우회하는 static route가 없는가
7. Stateful rule과 stateless rule 평가 순서를 이해했는가
8. Flow log와 alert log를 수집하고 있는가
섹션 공식문서

Example architectures with routing 문서의 unsupported architectures와 avoiding asymmetric routing 항목을 확인해야 합니다.

13

참고 공식문서

아래 문서는 글 전체를 검증할 때 참고한 대표 공식문서입니다. 섹션마다 모두 넣지 않고, 전체 구조를 다시 확인할 때 사용할 수 있도록 마지막에 모았습니다.

14

SUMMARY

핵심
Network Firewall은 Route Table로 트래픽을 Firewall Endpoint에 보내야 동작합니다.
단일 구성
단일 VPC 보호에 적합하고 구조가 가장 단순합니다.
중앙 구성
멀티 계정과 다수 VPC에서 정책 중앙화에 유리하지만 TGW 라우팅 설계가 중요합니다.
이중 구성
앞단과 뒷단을 나눠 강한 보안 경계를 만들 수 있지만 비용과 복잡도가 증가합니다.
검토 기준
대칭 라우팅, AZ 정합성, 우회 경로, 전용 Firewall Subnet, 로그 수집을 반드시 확인해야 합니다.
15

FAQ

Network Firewall을 만들면 VPC 트래픽이 자동으로 검사되나요?

아닙니다. Route Table에서 검사할 트래픽을 Firewall Endpoint로 보내야 합니다.

NFW 하나와 두 개 구성 중 무엇이 더 좋은가요?

정답은 없습니다. 트래픽 방향, 정책 소유자, 로그 분리, 비용, 라우팅 복잡도를 기준으로 결정해야 합니다.

웹 애플리케이션 앞에는 Network Firewall만 두면 되나요?

웹 공격 방어가 목적이라면 AWS WAF도 함께 검토해야 합니다. Network Firewall과 WAF는 보호 계층과 역할이 다릅니다.

CONCLUSION

AWS Network Firewall 설계는 방화벽 개수보다 트래픽 경로 설계가 중요합니다. 단일 VPC, 중앙 Inspection VPC, Distributed, Combined, TGW-attached, 앞단·뒷단 이중 구성은 모두 사용할 수 있지만 목적이 다릅니다. 실제 설계에서는 Route Table, AZ 정합성, 대칭 라우팅, Firewall Subnet 분리, 로그 수집을 먼저 확인해야 합니다.

...
Design the route path first, then choose the firewall deployment model.
AWS Network Firewall 구성 방식 총정리 단일 NFW 중앙 Inspection VPC 이중 방화벽 설계 비교
반응형

AWS Control Tower 설계 기준 정리: Landing Zone, OU 구조, Control 정책, 초기 배포 방식

반응형
AWS Multi-Account Governance
AWS Control Tower 설계 기준 정리: Landing Zone, OU 구조, Control 정책, 초기 배포 방식

AWS Control Tower를 도입할 때 필요한 Landing Zone 구조, OU별 정책 차이, 초기 배포 방식, 보안 기준을 정리합니다.

Landing ZoneOUControlsAccount Factory

AWS Control Tower는 멀티 계정 환경을 표준화하고 지속적으로 거버넌스를 적용하기 위한 서비스입니다. 이 글은 처음 설계할 때 확인해야 할 구조, 정책, 보안 설정, Terraform과 CloudFormation 기반 초기 배포 예시를 설명합니다.

01

AWS Control Tower가 필요한 이유

AWS 계정이 하나일 때는 IAM, CloudTrail, AWS Config, 보안 로그, 백업, 네트워크 기준을 직접 관리해도 운영이 가능합니다. 하지만 계정이 늘어나면 계정마다 보안 설정이 달라지고, 로그 위치가 흩어지고, 권한 기준이 서로 달라질 수 있습니다.

AWS Control Tower는 이런 문제를 줄이기 위해 멀티 계정 환경의 기본 틀을 제공합니다. Landing Zone을 만들고, OU와 계정을 관리하며, Control을 통해 보안과 컴플라이언스 기준을 지속적으로 적용합니다.

핵심은 계정 생성 자동화가 아니라 거버넌스 표준화입니다. 계정이 많아져도 동일한 보안 기준, 로깅 기준, 접근 기준을 유지하는 것이 Control Tower의 목적입니다.

02

기본 설계 방식

Control Tower의 기본 단위는 Landing Zone입니다. Landing Zone은 AWS Organizations 기반의 멀티 계정 환경이며, 그 안에 OU, 계정, 사용자 접근, 로그 계정, 감사 계정, Control이 포함됩니다.

공식 기본 구조에는 Security OU가 포함됩니다. Security OU에는 보통 Log Archive Account와 Audit Account가 위치합니다. Log Archive Account는 중앙 로그 저장 역할을 하고, Audit Account는 보안 감사와 읽기 전용 점검 역할을 담당합니다.

Sandbox OU는 초기 설정에서 선택적으로 만들 수 있습니다. 운영 환경이 커지면 Workloads, Infrastructure, PolicyStaging, Suspended 같은 OU를 추가해 목적별로 계정을 분리하는 방식이 일반적입니다.

기본 구조 예시
AWS Organizations Root
├─ Security OU
│ ├─ Log Archive Account
│ └─ Audit Account
├─ Sandbox OU
├─ Infrastructure OU
├─ Workloads OU
├─ PolicyStaging OU
└─ Suspended OU
섹션 공식문서

How AWS Control Tower works 문서에서 Landing Zone 기본 구조와 Security OU, Log Archive, Audit Account 구성을 확인할 수 있습니다.

03

OU 구조에 따라 정책을 다르게 적용하는 이유

Control Tower에서 Control은 OU 단위로 적용됩니다. 그래서 OU 구조는 단순한 폴더 구분이 아니라 정책 적용 범위를 결정하는 설계 단위입니다.

예를 들어 운영 서비스 계정에는 강한 제한이 필요하지만, Sandbox 계정에는 실험을 허용해야 할 수 있습니다. 반대로 Sandbox 계정에는 비용과 리전 제한을 강하게 두고, 운영 계정에는 변경 권한과 배포 경로를 엄격히 제한할 수 있습니다.

OU와 SCP 설계를 더 깊게 이해하려면 AWS Organizations + SCP 설계 방법을 함께 보면 좋습니다. Control Tower의 예방 통제는 Organizations 정책과 연결되기 때문에 OU 상속 구조를 같이 이해해야 합니다.

OU주요 목적정책 방향
Security로그와 감사변경 제한, 중앙 보안 접근
Workloads-Prod운영 서비스강한 변경 통제, 리전 제한, 보안 필수화
Workloads-NonProd개발과 검증운영보다 완화된 정책, 기본 보안 기준 유지
Sandbox실험비용 제한, 위험 서비스 제한, 데이터 반입 제한
PolicyStaging정책 검증운영 적용 전 Control과 SCP 영향 검토
섹션 공식문서

AWS multi-account strategy for your AWS Control Tower landing zone 문서에서 OU 확장 전략과 flat OU, nested OU 기준을 확인할 수 있습니다.

04

Control 정책의 차이

Control Tower의 Control은 동작 방식에 따라 preventive, detective, proactive로 나뉩니다. 이름은 비슷하지만 적용 시점과 구현 방식이 다릅니다.

Preventive control은 위반 작업이 실행되지 못하게 차단합니다. Detective control은 이미 만들어진 리소스나 이벤트를 감지해 위반 상태를 보여줍니다. Proactive control은 CloudFormation으로 리소스가 만들어지기 전에 정책 위반 여부를 검사합니다.

Control 유형구현 방식적용 의미
PreventiveSCP, RCP, declarative policy위반 작업을 사전에 차단
DetectiveAWS Config Rule위반 상태를 탐지하고 표시
ProactiveCloudFormation Hook리소스 생성 전에 정책 위반 확인

시험이나 설계 검토에서 중요한 부분은 “정책이 언제 동작하는가”입니다. 차단이 필요한지, 탐지만 필요한지, 배포 전에 막아야 하는지에 따라 선택하는 Control 유형이 달라집니다.

섹션 공식문서

Control behavior and guidance, How controls work 문서를 기준으로 Control 유형을 확인하면 됩니다.

05

일반적인 설계 방안

처음부터 복잡한 OU 계층을 만들면 운영이 어려워질 수 있습니다. 초기에는 Security, Infrastructure, Workloads, Sandbox, PolicyStaging 정도로 목적을 분리하고, 계정 수와 운영 요구가 커질 때 세분화하는 방식이 현실적입니다.

Production과 NonProduction은 분리하는 것이 좋습니다. 운영 계정에는 변경 통제와 보안 기준을 강하게 적용하고, 개발·검증 계정은 실험과 배포 속도를 고려해 일부 정책을 다르게 둘 수 있습니다.

Security OU와 Management Account는 일상 작업 계정으로 사용하지 않는 편이 좋습니다. Management Account는 조직과 Landing Zone 관리에 집중하고, 보안 점검은 Audit Account, 로그 보관은 Log Archive Account로 분리하는 구조가 관리하기 쉽습니다.

06

초기 배포 방식: 콘솔, API, CloudFormation, Terraform

Control Tower Landing Zone은 콘솔로 시작할 수 있고, API 또는 CloudFormation으로도 생성할 수 있습니다. Landing Zone 배포에는 manifest가 사용되며, manifest에는 IAM Identity Center 연동, 중앙 로깅, AWS Config, 보안 역할, governed Region 같은 기본 설정이 들어갑니다.

CloudFormation은 Landing Zone 자체나 EnabledControl 같은 Control Tower 리소스를 선언적으로 관리할 때 사용할 수 있습니다. 다만 실제 배포 전에는 사용하려는 Landing Zone 버전과 manifest 스키마를 확인해야 합니다.

Terraform은 Control Tower의 Account Factory for Terraform, 즉 AFT에서 많이 사용됩니다. AFT는 Terraform 기반 계정 요청과 계정 커스터마이징을 GitOps 방식으로 처리합니다. 단, AFT는 애플리케이션 리소스 배포용 파이프라인이 아니라 계정 프로비저닝과 초기 계정 설정 자동화를 위한 도구로 이해하는 것이 정확합니다.

섹션 공식문서

Launch a landing zone using CloudFormation, Account Factory for Terraform overview 문서를 기준으로 배포 방식을 확인하면 됩니다.

07

CloudFormation과 Terraform 샘플 코드

아래 코드는 구조 이해를 위한 더미 예시입니다. 실제 계정 ID, KMS Key ARN, OU ARN, Control ARN은 운영 환경 값을 그대로 공개하지 말고 별도 보안 기준에 따라 관리해야 합니다.

# CloudFormation Landing Zone 예시
AWSTemplateFormatVersion: '2010-09-09'
Description: Demo AWS Control Tower Landing Zone
Resources:
DemoLandingZone:
Type: AWS::ControlTower::LandingZone
Properties:
Version: '4.0'
Manifest:
accessManagement:
enabled: true
centralizedLogging:
enabled: true
accountId: '123456789012'
configurations:
loggingBucket:
retentionDays: 365
accessLoggingBucket:
retentionDays: 365
config:
enabled: true
accountId: '123456789012'
configurations:
loggingBucket:
retentionDays: 365
accessLoggingBucket:
retentionDays: 365
securityRoles:
enabled: true
accountId: '123456789012'
# AFT 계정 요청 예시
module \"sandbox_account\" {
source = \"./modules/aft-account-request\"
control_tower_parameters = {
AccountEmail = \"aws-sandbox@example.com\"
AccountName = \"demo-sandbox\"
ManagedOrganizationalUnit = \"Sandbox\"
SSOUserEmail = \"admin@example.com\"
SSOUserFirstName = \"Demo\"
SSOUserLastName = \"Admin\"
}
account_tags = {
Environment = \"Sandbox\"
Owner = \"Platform\"
}
change_management_parameters = {
change_requested_by = \"platform-team\"
change_reason = \"demo account provisioning\"
}
account_customizations_name = \"sandbox-baseline\"
}

CloudFormation 예시는 Landing Zone 설정을 선언적으로 표현하는 흐름이고, Terraform 예시는 AFT에서 계정 요청 파일을 통해 새 계정을 만드는 흐름입니다. 실제 운영에서는 계정 생성, 네트워크 기본값, 보안 로그, 기본 VPC 삭제, 태그 정책 같은 초기 설정을 함께 표준화합니다.

08

보안 설정 기준

Control Tower 보안 설계의 핵심은 Management Account를 일상 작업에서 분리하고, 보안 감사와 로그 보관을 별도 계정으로 나누는 것입니다. Management Account는 조직 관리와 Landing Zone 관리에 집중해야 합니다.

사용자 접근은 IAM Identity Center를 기준으로 표준화하는 것이 좋습니다. 계정별 IAM User를 직접 늘리는 방식은 장기적으로 관리가 어려워지고, 권한 회수와 감사가 복잡해집니다.

계정 간 역할 전환 구조를 이해하려면 AWS IAM AssumeRole 이해하기를 함께 보면 좋습니다. Control Tower 환경에서도 여러 계정에 접근할 때는 역할 기반 접근 흐름을 이해해야 합니다.

초기 보안 점검 기준
1. Management Account는 일상 작업에 사용하지 않습니다.
2. Log Archive Account에 조직 로그를 중앙 저장합니다.
3. Audit Account는 보안 감사와 읽기 권한 중심으로 운영합니다.
4. IAM Identity Center로 사용자 접근을 표준화합니다.
5. Production OU에는 강한 preventive control을 적용합니다.
6. Sandbox OU에는 비용, 리전, 위험 서비스 제한을 둡니다.
7. PolicyStaging OU에서 SCP와 Control을 먼저 검증합니다.
8. CloudTrail, AWS Config, Security Hub, GuardDuty 연계를 검토합니다.
9. Account Factory 또는 AFT로 계정 생성 방식을 표준화합니다.
섹션 공식문서

Security in AWS Control Tower, What is AWS Control Tower 문서를 기준으로 보안 역할과 통제 개념을 확인하면 됩니다.

09

운영 시 주의할 점

첫 번째 주의점은 기존 AWS Organizations 환경에 Control Tower를 도입하는 경우입니다. 기존 OU와 계정이 이미 있다면 Control Tower를 새로 시작하는 것과 기존 조직에 거버넌스를 확장하는 것은 다르게 봐야 합니다.

두 번째는 Control 변경 전 검증입니다. OU에 적용되는 preventive control이나 SCP는 계정 내부 IAM 권한보다 상위에서 동작할 수 있으므로, 잘못 적용하면 정상 서비스 작업도 차단될 수 있습니다.

세 번째는 drift 관리입니다. Control Tower가 관리하는 리소스를 외부에서 임의로 변경하면 Landing Zone이나 계정이 의도한 기준에서 벗어날 수 있습니다. 운영에서는 변경 경로를 표준화하고, 정책 변경은 PolicyStaging OU에서 먼저 검증하는 흐름이 안전합니다.

10

참고 공식문서

아래 문서는 글 전체를 검증할 때 참고한 대표 공식문서입니다. 주요 섹션에는 필요한 링크만 넣고, 전체 확인용 문서는 마지막에 모았습니다.

11

SUMMARY

목적
Control Tower는 멀티 계정 환경의 보안과 운영 기준을 표준화합니다.
구조
Landing Zone, OU, Account, Control, Account Factory가 핵심 구성요소입니다.
정책
Preventive, Detective, Proactive Control은 적용 시점과 구현 방식이 다릅니다.
배포
Landing Zone은 콘솔, API, CloudFormation으로 구성할 수 있고, AFT는 Terraform 기반 계정 자동화에 적합합니다.
보안
Management, Log Archive, Audit 계정 역할을 분리하고 IAM Identity Center 기반 접근을 표준화해야 합니다.
12

FAQ

Control Tower는 AWS Organizations를 대체하나요?

아닙니다. Control Tower는 AWS Organizations, IAM Identity Center, Service Catalog 같은 서비스를 조합해 멀티 계정 거버넌스를 쉽게 구성하도록 돕습니다.

Terraform으로 Landing Zone을 바로 만드는 것이 맞나요?

Terraform은 주로 AFT를 통해 계정 요청과 계정 커스터마이징 자동화에 사용합니다. Landing Zone 자체는 콘솔, API, CloudFormation 경로를 먼저 검토하는 것이 좋습니다.

모든 OU에 같은 Control을 적용해야 하나요?

아닙니다. OU의 목적이 다르면 정책도 달라져야 합니다. 운영, 비운영, 보안, 실험 계정은 서로 다른 기준이 필요합니다.

CONCLUSION

AWS Control Tower 설계는 계정을 많이 만드는 작업이 아니라 멀티 계정 환경의 기준을 정하는 작업입니다. Landing Zone으로 기본 구조를 만들고, OU로 정책 범위를 나누고, Control로 예방·탐지·사전 검증 기준을 적용합니다. 초기에는 단순한 OU 구조로 시작하고, 정책은 PolicyStaging에서 검증한 뒤 운영 OU에 적용하는 방식이 안정적입니다.

...
Start with a clear OU model, then apply controls according to account purpose.
반응형

EKS에서 mTLS를 적용하는 방식: Service Mesh와 Gateway 기준

반응형

 

Kubernetes Security
EKS에서 mTLS를 적용하는 방식: Service Mesh와 Gateway 기준

EKS에서 mTLS가 어떤 문제를 해결하는지, Service Mesh와 Gateway 기준으로 어디에 적용하는지 간단히 정리합니다.

mTLSEKSIstioGateway

이 글은 EKS에서 mTLS를 이해할 때 필요한 TLS와 mTLS의 차이, Pod 간 통신 보호, Ingress Gateway의 클라이언트 인증, 인증서 관리, 운영 주의점을 공식 문서 기준으로 설명합니다.

01

mTLS란 무엇인가

mTLS는 mutual TLS의 약자입니다. 일반 TLS가 주로 클라이언트가 서버 인증서를 확인하는 방식이라면, mTLS는 서버도 클라이언트 인증서를 확인합니다.

즉, mTLS는 통신을 암호화하는 것에서 끝나지 않고 “요청을 보낸 쪽이 신뢰할 수 있는 주체인지”까지 확인합니다. 마이크로서비스 환경에서는 서비스 A가 서비스 B를 호출할 때 서로의 신원을 검증하는 데 사용할 수 있습니다.

구분 일반 TLS mTLS
인증 방향 클라이언트가 서버를 확인 클라이언트와 서버가 서로 확인
주요 목적 서버 신뢰 확인과 암호화 서비스 간 신원 확인과 암호화
활용 예 일반 HTTPS Service Mesh, B2B API, 내부 API 보호
섹션 공식문서

AWS App Mesh mutual TLS authentication 문서는 mTLS를 양방향 peer authentication으로 설명합니다.

02

EKS에서 mTLS가 직접 기능이 아닌 이유

EKS는 Kubernetes Control Plane을 제공하는 관리형 서비스입니다. EKS 자체가 모든 Pod 간 트래픽에 mTLS를 자동으로 적용하는 구조는 아닙니다.

EKS에서 mTLS를 적용하려면 보통 Service Mesh, Ingress Gateway, 애플리케이션 TLS 설정 중 하나를 사용합니다. AWS 공식 모범 사례에서도 EKS 네트워크 보안을 설명할 때 Service Mesh를 암호화와 보안 정책을 추가하는 계층으로 분리해서 설명합니다.

NetworkPolicy나 Security Group for Pods는 주로 어떤 트래픽을 허용할지 제어합니다. mTLS는 그 트래픽이 암호화되었는지, 그리고 상대가 신뢰할 수 있는 주체인지 확인하는 역할에 가깝습니다.

섹션 공식문서

Amazon EKS Network security 문서는 NetworkPolicy, Security Group for Pods, Service Mesh의 역할 차이를 함께 설명합니다.

03

Service Mesh에서 Pod 간 통신을 보호하는 방식

Service Mesh는 애플리케이션 코드 바깥에서 서비스 간 통신을 제어하는 계층입니다. Istio 기준으로 보면 Pod 옆의 proxy 또는 node 단위 구성요소가 트래픽을 가로채고, 서비스 간 통신에 mTLS를 적용합니다.

이 방식의 장점은 애플리케이션마다 TLS 로직을 직접 구현하지 않아도 된다는 점입니다. 서비스는 기존처럼 HTTP 또는 gRPC 요청을 보내고, Mesh 계층이 인증서 기반 신원 확인과 암호화를 처리합니다.

EKS에서 Istio를 사용할 경우, 서비스 계정 기반의 workload identity와 인증서가 연결됩니다. 그래서 “어떤 Pod IP에서 왔는가”보다 “어떤 workload identity가 호출했는가”를 기준으로 보안 정책을 설계할 수 있습니다.

섹션 공식문서

Istio Security Model 문서는 mTLS, workload identity, proxy 기반 보안 모델을 설명합니다.

04

Istio에서 STRICT와 PERMISSIVE를 구분하는 이유

Istio에서 mTLS를 적용할 때 자주 보는 개념이 `PERMISSIVE`와 `STRICT`입니다. `PERMISSIVE`는 mTLS 트래픽과 일반 평문 트래픽을 모두 받을 수 있는 전환용 모드입니다.

반면 `STRICT`는 mTLS가 아닌 트래픽을 허용하지 않는 모드입니다. 운영 중인 시스템을 한 번에 바꾸기 어렵다면 먼저 PERMISSIVE로 관찰하고, 준비가 끝난 뒤 STRICT로 전환하는 흐름을 사용할 수 있습니다.

시험 관점에서는 “mTLS를 켰다”는 말만으로는 부족합니다. 실제로 평문 트래픽이 차단되는지, namespace 전체에 적용하는지, 특정 workload에만 적용하는지를 구분해야 합니다.

섹션 공식문서

Istio PeerAuthentication 문서는 mTLS mode와 적용 범위를 설명합니다.

05

Gateway에서 외부 클라이언트를 인증하는 방식

Service Mesh의 mTLS가 주로 내부 서비스 간 통신을 보호한다면, Gateway의 mTLS는 외부에서 들어오는 클라이언트를 인증하는 데 사용합니다.

예를 들어 파트너 시스템이 EKS 안의 API를 호출해야 한다면 일반 HTTPS만으로는 “서버가 진짜인지”만 확인할 수 있습니다. mTLS Gateway를 사용하면 서버가 클라이언트 인증서까지 확인하므로, 허용된 클라이언트만 진입하도록 만들 수 있습니다.

Istio Gateway에서는 TLS mode를 `MUTUAL`로 설정하고, 서버 인증서와 클라이언트 인증서를 검증할 CA 정보를 함께 구성합니다. 실제 운영 값은 Secret에 저장하고, 블로그나 문서에는 노출하지 않는 것이 안전합니다.

섹션 공식문서

Istio Secure Gateways, Istio Gateway reference 문서를 기준으로 Gateway mTLS 구성을 확인할 수 있습니다.

06

인증서와 신뢰 체인 관리

mTLS의 핵심은 인증서입니다. 서버 인증서, 클라이언트 인증서, 그리고 이 인증서를 신뢰할 수 있는지 판단하는 CA가 필요합니다.

Service Mesh를 사용하면 인증서 발급과 갱신을 Mesh가 자동화할 수 있습니다. Istio는 기본 CA를 사용할 수 있고, 필요하면 외부 CA와 연동하는 방식도 검토할 수 있습니다.

Gateway mTLS에서는 서버 인증서뿐 아니라 클라이언트 인증서를 검증할 CA 정보도 필요합니다. 인증서가 만료되거나 신뢰 체인이 맞지 않으면 연결은 암호화 이전 단계에서 실패할 수 있습니다.

섹션 공식문서

Amazon EKS Network security 문서의 encryption in transit 항목과 Istio Security Model의 Certificate Authority 설명을 함께 보면 됩니다.

07

mTLS와 AuthorizationPolicy의 차이

mTLS는 상대의 신원을 확인합니다. 하지만 신원이 확인되었다고 해서 모든 접근을 허용해야 한다는 뜻은 아닙니다.

예를 들어 `order-api`와 `payment-api`가 모두 유효한 인증서를 가지고 있더라도, `payment-api`에는 특정 namespace나 service account만 접근하도록 제한할 수 있어야 합니다. 이때 필요한 것이 AuthorizationPolicy 같은 접근 제어 정책입니다.

정리하면 mTLS는 “누구인지 확인”이고, AuthorizationPolicy는 “무엇을 할 수 있는지 제한”입니다. 둘을 함께 사용해야 서비스 간 통신 보안이 완성됩니다.

섹션 공식문서

Istio Security Best Practices 문서는 mTLS와 authorization policy를 함께 사용하는 이유를 설명합니다.

08

EKS에서 설계할 때 주의할 점

mTLS는 보안성을 높이지만 운영 복잡도도 함께 증가합니다. 인증서 수명, CA 관리, rollout 순서, sidecar 또는 mesh 구성요소의 리소스 사용량을 함께 봐야 합니다.

모든 통신에 무조건 mTLS를 적용하는 것보다 보호해야 할 경계가 어디인지 먼저 정하는 것이 좋습니다. 내부 서비스 간 호출을 보호하려면 Service Mesh가 적합하고, 외부 파트너나 내부 운영 클라이언트의 진입을 제한하려면 Gateway mTLS가 적합합니다.

AWS App Mesh는 mTLS를 지원하지만, 공식 문서 기준으로 2026년 9월 30일 지원 종료가 공지되어 있습니다. 신규 설계에서는 이 일정을 고려해 Istio, Linkerd, Gateway 중심 구성을 검토하는 것이 안전합니다.

섹션 공식문서

AWS App Mesh mutual TLS authentication 문서에는 지원 종료 일정과 mTLS 동작 방식이 함께 안내되어 있습니다.

09

대표 YAML 예시

아래 예시는 실제 환경 값이 아닌 더미 예시입니다. 실제 인증서 이름, Secret 이름, namespace, 도메인 값은 운영 환경에 맞게 관리하고 외부에 노출하지 않아야 합니다.

# Namespace 전체에 mTLS STRICT 적용 예시
apiVersion: security.istio.io/v1
kind: PeerAuthentication
metadata:
name: default
namespace: demo-namespace
spec:
mtls:
mode: STRICT
---
# 특정 서비스만 허용하는 AuthorizationPolicy 예시
apiVersion: security.istio.io/v1
kind: AuthorizationPolicy
metadata:
name: allow-order-to-payment
namespace: demo-namespace
spec:
selector:
matchLabels:
app: payment-api
rules:
- from:
- source:
principals:
- cluster.local/ns/demo-namespace/sa/order-api
---
# Istio Gateway에서 외부 클라이언트 인증서를 요구하는 예시
apiVersion: networking.istio.io/v1
kind: Gateway
metadata:
name: partner-api-gateway
namespace: istio-system
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 443
name: https
protocol: HTTPS
tls:
mode: MUTUAL
credentialName: demo-gateway-credential
hosts:
- api.example.com

이 예시에서 첫 번째 설정은 내부 서비스 간 통신을 mTLS로 강제하는 흐름입니다. 두 번째 설정은 인증된 주체 중에서도 특정 service account만 허용하는 흐름입니다. 세 번째 설정은 외부 클라이언트가 Gateway에 접근할 때 클라이언트 인증서를 요구하는 흐름입니다.

섹션 공식문서

Istio PeerAuthentication, Istio Secure Gateways 문서를 기준으로 실제 필드를 확인하면 됩니다.

10

SUMMARY

mTLS
클라이언트와 서버가 서로 인증서를 검증하는 TLS 방식입니다.
EKS
mTLS를 직접 자동 적용하기보다 Service Mesh, Gateway, 애플리케이션 계층에서 구현합니다.
Service Mesh
Pod 간 통신에 신원 기반 암호화와 인증을 적용하는 데 적합합니다.
Gateway
외부 클라이언트가 진입할 때 클라이언트 인증서를 검증하는 데 적합합니다.
주의점
mTLS는 인증이고, 세부 접근 제어는 AuthorizationPolicy 같은 정책과 함께 설계해야 합니다.
11

FAQ

EKS에서 mTLS를 켜는 버튼이 있나요?

일반적으로 없습니다. EKS 위에 Service Mesh나 Gateway 구성을 올려 mTLS를 적용합니다.

mTLS만 적용하면 서비스 보안이 끝나나요?

아닙니다. mTLS는 신원 확인과 암호화를 담당하고, 접근 허용 범위는 별도 정책으로 제한해야 합니다.

Gateway mTLS와 Service Mesh mTLS는 같은 용도인가요?

용도가 다릅니다. Gateway mTLS는 외부 진입 클라이언트 인증에 가깝고, Service Mesh mTLS는 내부 서비스 간 통신 보호에 가깝습니다.

CONCLUSION

EKS에서 mTLS는 하나의 단일 기능으로 보기보다 적용 위치를 나누어 이해하는 것이 좋습니다. 내부 Pod 간 통신은 Service Mesh 기준으로, 외부에서 들어오는 클라이언트 인증은 Gateway 기준으로 보면 구조가 명확해집니다. 그리고 mTLS는 인증과 암호화를 담당하므로, 실제 접근 범위는 AuthorizationPolicy 같은 정책과 함께 설계해야 합니다.

...
Use mTLS to verify identity, then use policy to control access.

 

EKS에서 mTLS를 적용하는 방식 Service Mesh와 Gateway 기준
반응형

AWS Load Balancer Controller Deep Dive: EKS에서 ALB와 NLB가 생성되는 원리

반응형

 

EKS Networking
AWS Load Balancer Controller Deep Dive: EKS에서 ALB와 NLB가 생성되는 원리

AWS Load Balancer Controller가 EKS 리소스를 감시해 ALB, NLB, TargetGroupBinding을 만드는 흐름을 개념적으로 정리합니다.

ALBNLBTargetGroupBindingReconcile

이 글은 EKS에서 AWS Load Balancer Controller를 사용할 때 Ingress, Service, IngressClass, loadBalancerClass, TargetGroupBinding이 어떻게 연결되는지 설명합니다.

01

AWS Load Balancer Controller란 무엇인가

AWS Load Balancer Controller는 Kubernetes 리소스를 보고 AWS Load Balancer 리소스를 생성하고 관리하는 컨트롤러입니다. 사용자가 AWS 콘솔에서 ALB나 NLB를 직접 만드는 방식이 아니라, Kubernetes에 선언한 상태를 AWS 리소스로 맞추는 방식입니다.

대표적으로 `Ingress`는 ALB 생성 흐름과 연결되고, `Service type: LoadBalancer`는 NLB 생성 흐름과 연결됩니다. Controller는 Kubernetes API를 감시하다가 필요한 AWS 리소스를 만들고, 변경 사항이 생기면 다시 맞춥니다.

핵심은 Controller가 “Kubernetes 리소스와 AWS Load Balancer 사이의 번역기” 역할을 한다는 점입니다.

02

EKS에서 LB Controller를 사용할 수 있는 이유

Kubernetes Controller는 API Server에 저장된 리소스 상태를 계속 관찰합니다. AWS Load Balancer Controller도 같은 방식으로 `Ingress`, `Service`, `TargetGroupBinding` 같은 리소스를 감시합니다.

Controller Pod는 EKS 안에서 실행되지만, ALB, NLB, Target Group, Listener 같은 AWS 리소스를 만들려면 AWS API 호출 권한이 필요합니다. 그래서 IRSA 또는 EKS Pod Identity 같은 방식으로 Controller에 IAM 권한을 부여합니다.

이 구조 덕분에 사용자는 Kubernetes YAML을 적용하고, Controller는 그 YAML을 보고 AWS 네트워크 리소스를 생성하는 방식으로 운영할 수 있습니다.

03

NLB는 언제 생성되는가

NLB는 주로 `Service` 리소스에서 생성됩니다. `type: LoadBalancer`를 사용하고 `spec.loadBalancerClass: service.k8s.aws/nlb`를 지정하면 AWS Load Balancer Controller가 해당 Service를 NLB 대상으로 처리합니다.

NLB는 L4 계층에서 TCP, UDP, TLS 트래픽을 처리하는 데 적합합니다. HTTP 경로 기반 라우팅보다 네트워크 계층의 빠른 전달과 고정적인 연결 처리가 필요할 때 자주 사용합니다.

과거 방식에서는 annotation으로 NLB 생성을 지정하는 예시도 많지만, 새 구성에서는 `loadBalancerClass`를 함께 이해하는 것이 좋습니다.

04

NLB 생성 시 EKS 안에 생기는 리소스

NLB를 만들 때 사용자가 직접 생성하는 핵심 리소스는 `Service`입니다. 이 Service가 어떤 Pod로 트래픽을 보낼지는 selector와 EndpointSlice를 통해 연결됩니다.

AWS Load Balancer Controller는 Service를 처리하는 과정에서 `TargetGroupBinding`을 사용할 수 있습니다. TargetGroupBinding은 Kubernetes Service와 AWS Target Group을 연결하는 CRD입니다.

트러블슈팅할 때는 Service만 보면 부족합니다. Service, EndpointSlice, TargetGroupBinding, Event, Controller 로그를 같이 봐야 실제로 어떤 단계에서 막혔는지 알 수 있습니다.

05

ALB는 언제 생성되는가

ALB는 주로 `Ingress` 리소스에서 생성됩니다. `ingressClassName: alb`를 지정하거나 관련 IngressClass를 구성하면 AWS Load Balancer Controller가 해당 Ingress를 처리합니다.

ALB는 L7 계층에서 HTTP/HTTPS 요청을 처리합니다. Host 기반 라우팅, Path 기반 라우팅, TLS 종료, Listener Rule 같은 웹 트래픽 제어가 필요할 때 적합합니다.

Ingress annotation을 사용하면 internet-facing 또는 internal scheme, target type, health check path, certificate, listener port 같은 세부 동작을 설정할 수 있습니다.

06

ALB 생성 시 EKS 안에 생기는 리소스

ALB 흐름에서 사용자가 주로 작성하는 리소스는 `Ingress`, `Service`, `Deployment`입니다. Ingress는 외부 요청 규칙을 정의하고, Service는 Pod 집합의 접근 지점을 제공합니다.

추가로 `IngressClass`와 `IngressClassParams`를 사용할 수 있습니다. IngressClass는 어떤 Controller가 Ingress를 처리할지 지정하고, IngressClassParams는 ALB 관련 기본 설정을 묶는 데 사용할 수 있습니다.

Controller는 이 정보를 기반으로 AWS에 ALB, Listener, Listener Rule, Target Group을 생성합니다. EKS 안에서는 관련 Event와 TargetGroupBinding 상태를 확인할 수 있습니다.

07

TargetGroupBinding이 중요한 이유

TargetGroupBinding은 Kubernetes Service와 AWS Target Group을 연결하는 리소스입니다. 쉽게 말해 “이 Service의 대상 Pod 또는 Node를 이 Target Group에 등록하라”는 연결 정보입니다.

AWS Load Balancer Controller는 Ingress, Service, Gateway 흐름을 처리할 때 TargetGroupBinding을 내부적으로 사용할 수 있습니다. 공식 문서에서도 TargetGroupBinding은 controller에 의해 자동 생성될 수 있다고 설명합니다.

또한 이미 존재하는 AWS Target Group을 Kubernetes Service와 연결하고 싶을 때 TargetGroupBinding을 직접 작성하는 방식도 가능합니다.

08

IngressClass, loadBalancerClass, GatewayClass 차이

`IngressClass`는 어떤 Controller가 Ingress를 처리할지 나타냅니다. ALB Ingress를 만들 때 `ingressClassName: alb`를 쓰는 이유가 여기에 있습니다.

`loadBalancerClass`는 Service type LoadBalancer를 어떤 Controller가 처리할지 나타냅니다. AWS Load Balancer Controller에서 NLB를 처리할 때 `service.k8s.aws/nlb` 값을 사용할 수 있습니다.

`GatewayClass`는 Gateway API에서 어떤 구현체가 Gateway를 처리할지 나타냅니다. 사용자가 말한 `lb choice`는 공식 리소스명으로 확인되지는 않으며, 문맥상 `loadBalancerClass` 또는 `IngressClass`를 의미한 것으로 보는 것이 맞습니다.

리소스 적용 대상 의미
IngressClass Ingress Ingress 처리 Controller 선택
loadBalancerClass Service type LoadBalancer LoadBalancer Service 처리 Controller 선택
GatewayClass Gateway API Gateway 구현체 선택
09

Instance Target과 IP Target 차이

Target Group에는 대상 등록 방식이 있습니다. `instance` 모드는 Worker Node를 Target으로 등록하고 NodePort를 통해 Pod로 전달합니다.

`ip` 모드는 Pod IP를 Target Group에 직접 등록합니다. 이 방식은 Pod로 더 직접적인 경로를 만들 수 있지만, VPC CNI와 Pod IP 접근 가능성을 고려해야 합니다.

ALB와 NLB 모두 어떤 target type을 사용할지에 따라 보안 그룹, health check, 트래픽 경로, 장애 분석 방식이 달라질 수 있습니다.

10

대표 YAML 예시

아래 예시는 실제 환경 값이 아닌 더미 예시입니다. 실제 도메인, 계정 ID, Target Group ARN, 인증서 ARN, subnet ID는 블로그에 노출하지 않는 것이 안전합니다.

# NLB 생성 예시: Service type LoadBalancer
apiVersion: v1
kind: Service
metadata:
name: app-nlb
namespace: demo-namespace
spec:
type: LoadBalancer
loadBalancerClass: service.k8s.aws/nlb
selector:
app: demo-app
ports:
- port: 80
targetPort: 8080
protocol: TCP
---
# ALB 생성 예시: Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: app-alb
namespace: demo-namespace
annotations:
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/target-type: ip
spec:
ingressClassName: alb
rules:
- host: app.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: app-service
port:
number: 80
---
# IngressClass 예시
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: alb
spec:
controller: ingress.k8s.aws/alb
---
# TargetGroupBinding 예시
apiVersion: elbv2.k8s.aws/v1beta1
kind: TargetGroupBinding
metadata:
name: app-tgb
namespace: demo-namespace
spec:
serviceRef:
name: app-service
port: 80
targetGroupARN: arn:aws:elasticloadbalancing:ap-northeast-2:123456789012:targetgroup/example-tg/exampleid
targetType: ip

YAML을 볼 때는 어떤 리소스가 AWS Load Balancer 생성을 트리거하는지 먼저 보면 됩니다. ALB는 Ingress 중심, NLB는 Service 중심, TargetGroupBinding은 Service와 Target Group 연결 중심입니다.

11

트러블슈팅 시 봐야 할 것

문제가 생기면 Kubernetes 리소스와 AWS 리소스를 함께 봐야 합니다. Controller는 두 세계를 연결하므로 한쪽만 보면 원인을 놓치기 쉽습니다.

1. Controller Pod 상태 확인
2. Controller 로그 확인
3. Ingress 또는 Service Event 확인
4. TargetGroupBinding 생성 여부와 상태 확인
5. EndpointSlice에 대상 Pod가 있는지 확인
6. AWS Target Group Health Check 확인
7. Subnet tag와 Security Group rule 확인
8. IAM 권한과 IRSA 또는 Pod Identity 확인
9. annotation 오타 확인
10. ingressClassName 또는 loadBalancerClass 확인

특히 Target Group Health Check가 실패하면 Load Balancer는 생성되어 있어도 실제 트래픽은 Pod로 전달되지 않을 수 있습니다. 그래서 “LB가 생성됐는가”와 “Target이 healthy인가”를 분리해서 확인해야 합니다.

공식 문서 기준

최신 동작은 How it works, TargetGroupBinding, IngressClass, NLB Service 문서를 기준으로 확인하는 것이 좋습니다.

12

SUMMARY

Controller
Kubernetes 리소스를 감시하고 AWS Load Balancer 리소스를 원하는 상태로 맞춥니다.
ALB
주로 Ingress를 통해 생성되며 HTTP/HTTPS L7 라우팅에 적합합니다.
NLB
주로 Service type LoadBalancer를 통해 생성되며 TCP/UDP L4 트래픽에 적합합니다.
TGB
TargetGroupBinding은 Kubernetes Service와 AWS Target Group을 연결합니다.
Troubleshooting
Controller 로그, Event, TargetGroupBinding, EndpointSlice, Target Health를 함께 봐야 합니다.
13

FAQ

Ingress를 만들면 항상 ALB가 생성되나요?

아닙니다. `ingressClassName`, IngressClass, Controller 설정이 AWS Load Balancer Controller와 맞아야 합니다.

Service type LoadBalancer는 항상 NLB인가요?

AWS Load Balancer Controller 기준에서는 `loadBalancerClass: service.k8s.aws/nlb` 또는 관련 설정으로 NLB 생성을 지정할 수 있습니다.

TargetGroupBinding은 직접 만들어야 하나요?

일반적인 Ingress나 Service 흐름에서는 Controller가 자동으로 만들 수 있습니다. 기존 Target Group을 직접 연결할 때는 사용자가 작성할 수도 있습니다.

CONCLUSION

AWS Load Balancer Controller를 이해하려면 ALB와 NLB만 보면 부족합니다. Kubernetes 안의 Ingress, Service, IngressClass, loadBalancerClass, TargetGroupBinding이 AWS의 Load Balancer, Listener, Target Group과 어떻게 연결되는지를 함께 봐야 합니다. 문제가 생겼을 때도 Controller 로그와 Kubernetes Event, AWS Target Health를 같이 확인해야 빠르게 원인을 찾을 수 있습니다.

...
The controller is the bridge between Kubernetes intent and AWS load balancer resources.
AWS Load Balancer Controller Deep Dive EKS에서 ALB와 NLB가 생성되는 원리
반응형