에어갭 환경 구성
< 이전: 네트워크 구성 | 목차 | 다음: 노드 부트스트랩 >
지원 버전: EKS 1.31+, nodeadm 0.1+ 마지막 업데이트: 2026년 2월 23일
이 문서에서는 에어갭(Air-Gapped) 환경에서 EKS Hybrid Nodes를 구성하는 방법을 다룹니다. 바이너리 아티팩트는 프라이빗 S3 버킷과 VPC 엔드포인트를 통해, 컨테이너 이미지는 ECR VPC 엔드포인트를 통해 접근합니다.
에어갭 환경이란?
에어갭(Air-Gapped) 환경은 외부 인터넷과 완전히 격리된 네트워크 환경을 의미합니다. 이러한 환경은 보안이 중요한 산업에서 필수적으로 요구됩니다.
에어갭 환경이 필요한 이유
보안 규정 준수
금융, 의료, 국방 등 민감한 데이터를 다루는 산업에서는 외부 네트워크와의 격리가 법적으로 요구됩니다
데이터 유출 방지
외부 통신 경로를 차단하여 데이터 유출 위험을 원천적으로 차단합니다
공급망 공격 방지
외부 레지스트리에서 악성 이미지가 유입되는 것을 방지합니다
네트워크 안정성
외부 서비스 장애가 내부 시스템에 영향을 미치지 않습니다
에어갭 환경의 유형
에어갭 아키텍처 개요
이 문서에서 구성하는 에어갭 아키텍처는 다음과 같습니다:
아티팩트 저장소 역할 분담
nodeadm, kubelet, kubectl, kube-proxy
S3 버킷
S3 Interface VPC Endpoint
cni-plugins, ecr-credential-provider
S3 버킷
S3 Interface VPC Endpoint
aws-iam-authenticator, aws_signing_helper
S3 버킷
S3 Interface VPC Endpoint
체크섬 파일 (.sha256)
S3 버킷
S3 Interface VPC Endpoint
manifest.yaml
S3 버킷
S3 Interface VPC Endpoint
pause, coredns, kube-proxy 이미지
ECR
ECR API/DKR VPC Endpoint
vpc-cni, vpc-cni-init 이미지
ECR
ECR API/DKR VPC Endpoint
manifest.yaml 기반 아티팩트 다운로드
manifest.yaml 구조
hybrid-assets.eks.amazonaws.com/manifest.yaml에는 EKS Hybrid Node에 필요한 모든 바이너리의 URL과 체크섬이 버전/아키텍처별로 정의되어 있습니다.
manifest.yaml에 포함된 주요 바이너리:
kubelet
노드의 Kubernetes 에이전트
kubectl
Kubernetes CLI
kube-proxy
네트워크 프록시
cni / cni-plugins
컨테이너 네트워크 인터페이스
ecr-credential-provider
ECR 인증 헬퍼
aws-iam-authenticator
IAM 인증
다운로드 및 S3 업로드 스크립트 (ekshybrid-download.sh)
인터넷 접근 가능한 호스트에서 실행하여 manifest.yaml 기반으로 모든 바이너리를 다운로드하고 S3에 업로드합니다.
실행 결과 S3 버킷에는 다음과 같은 구조로 파일이 저장됩니다:
S3 버킷 구성
버킷 생성 및 버전 관리
S3 버킷 정책 (VPC Endpoint 제한)
VPC Endpoint를 통한 접근만 허용하도록 버킷 정책을 설정합니다.
PHZ DNS 오버라이드
문제
hybrid-assets.eks.amazonaws.com은 AWS가 CloudFront를 통해 배포하는 nodeadm 바이너리 호스팅 URL입니다. 이 도메인은 표준 VPC 엔드포인트로 접근할 수 없습니다:
CloudFront 배포이므로 S3 또는 EKS VPC 엔드포인트로는 도달 불가
에어갭 환경에서
nodeadm install실행 시 이 URL에서 바이너리 다운로드를 시도하여 실패인터넷 경로가 없으면 nodeadm 설치 자체가 불가능
해결 방법
아티팩트를 프라이빗 S3 버킷에 미러링하고, Private Hosted Zone(PHZ)으로 DNS를 오버라이드하여 hybrid-assets.eks.amazonaws.com 요청을 S3 Interface VPC Endpoint로 라우팅합니다.
S3 Interface VPC 엔드포인트
S3 Interface VPC 엔드포인트는 네트워크 구성 문서에서 이미 생성했습니다. 엔드포인트 DNS 이름을 확인합니다:
Private Hosted Zone 생성
온프레미스 DNS 연동
온프레미스 노드에서 hybrid-assets.eks.amazonaws.com을 쿼리할 때 PHZ를 거쳐 S3 VPC Endpoint의 프라이빗 IP가 반환되도록 구성합니다.
네트워크 구성 문서에서 이미 Route 53 Resolver Inbound Endpoint를 생성했다면, 온프레미스 DNS의 조건부 포워딩에 eks.amazonaws.com 도메인이 포함되어 있는지 확인합니다.
에어갭 노드에서 설치
PHZ DNS 오버라이드 구성이 완료되면 일반 환경과 동일하게 nodeadm install과 nodeadm init을 실행합니다. nodeadm install은 hybrid-assets.eks.amazonaws.com에서 바이너리를 다운로드하며, PHZ에 의해 이 요청이 S3 VPC Endpoint로 라우팅됩니다.
nodeadm init 실행
설치 완료 후 노드를 EKS 클러스터에 등록합니다:
컨테이너 이미지 접근 (ECR VPC 엔드포인트)
필수 컨테이너 이미지
EKS Hybrid Nodes 운영에 필요한 컨테이너 이미지는 ECR에서 제공됩니다:
pause
Pod 인프라 컨테이너
602401143452.dkr.ecr.<region>.amazonaws.com/eks/pause
coredns
클러스터 DNS
602401143452.dkr.ecr.<region>.amazonaws.com/eks/coredns
kube-proxy
네트워크 프록시
602401143452.dkr.ecr.<region>.amazonaws.com/eks/kube-proxy
vpc-cni-init
VPC CNI 초기화
602401143452.dkr.ecr.<region>.amazonaws.com/amazon-k8s-cni-init
aws-node
AWS VPC CNI
602401143452.dkr.ecr.<region>.amazonaws.com/amazon-k8s-cni
ECR VPC 엔드포인트를 통한 이미지 접근
네트워크 구성 문서에서 이미 ECR API (ecr.api) 및 ECR DKR (ecr.dkr) Interface VPC 엔드포인트를 생성했습니다. 이를 통해 에어갭 환경에서도 ECR에서 직접 이미지를 풀할 수 있습니다.
ecr-credential-provider 설정
kubelet이 ECR에서 이미지를 풀하려면 인증이 필요합니다. ecr-credential-provider는 ekshybrid-download.sh에서 이미 다운로드하여 /usr/local/bin/에 설치되어 있습니다.
완전 에어갭 환경을 위한 이미지 내보내기/가져오기
ECR VPC 엔드포인트도 사용할 수 없는 완전 에어갭 환경에서는 이미지를 파일로 내보내 물리적 미디어로 전달합니다.
로컬 RPM/DEB 저장소 구성
대규모 배포를 위해 로컬 패키지 저장소를 구성할 수 있습니다.
프록시 환경 구성
부분 에어갭 환경에서는 프록시를 통해 제한된 외부 접근을 허용할 수 있습니다.
시스템 프록시 설정
containerd 프록시 설정
kubelet 프록시 설정
nodeadm 프록시 설정
OS별 SSM 에이전트 프록시 설정
SSM 에이전트는 OS에 따라 다른 경로에 프록시 설정 파일을 배치해야 합니다.
Ubuntu
/etc/systemd/system/snap.amazon-ssm-agent.amazon-ssm-agent.service.d/http-proxy.conf
AL2023
/etc/systemd/system/amazon-ssm-agent.service.d/http-proxy.conf
RHEL
/etc/systemd/system/amazon-ssm-agent.service.d/http-proxy.conf
Ubuntu (snap 기반):
AL2023 / RHEL:
kube-proxy DaemonSet 프록시 설정
kube-proxy DaemonSet에 프록시 환경 변수를 설정해야 할 수 있습니다. 이 설정은 클러스터 생성 후, nodeadm init 실행 전에 적용해야 합니다.
주의: kube-proxy 프록시 설정은 클러스터 생성 후 nodeadm init 실행 전에 적용해야 합니다. 그렇지 않으면 하이브리드 노드에서 kube-proxy가 올바르게 시작되지 않을 수 있습니다.
IAM Roles Anywhere 프록시 설정
IAM Roles Anywhere를 사용하는 경우, aws_signing_helper 서비스에도 프록시 설정이 필요합니다.
패키지 관리자 프록시 설정
운영 체제의 패키지 관리자에도 프록시 설정이 필요할 수 있습니다.
Ubuntu - apt:
Ubuntu - snap:
AL2023 - dnf:
RHEL - yum:
프록시 설정 요약
시스템 전역
/etc/environment
containerd
/etc/systemd/system/containerd.service.d/http-proxy.conf
kubelet
/etc/systemd/system/kubelet.service.d/http-proxy.conf
SSM Agent (Ubuntu)
/etc/systemd/system/snap.amazon-ssm-agent.amazon-ssm-agent.service.d/http-proxy.conf
SSM Agent (AL2023/RHEL)
/etc/systemd/system/amazon-ssm-agent.service.d/http-proxy.conf
IAM Roles Anywhere
/etc/systemd/system/aws_signing_helper_update.service.d/http-proxy.conf
apt (Ubuntu)
/etc/apt/apt.conf.d/proxy.conf
snap (Ubuntu)
snap set system proxy.*
dnf (AL2023)
/etc/dnf/dnf.conf
yum (RHEL)
/etc/yum.conf
kube-proxy
DaemonSet 환경 변수
에어갭 환경 검증
검증 스크립트
미러링 동기화 자동화
새로운 nodeadm 버전이 릴리스될 때 프라이빗 S3 버킷을 자동으로 동기화하는 cron 작업을 설정합니다.
< 이전: 네트워크 구성 | 목차 | 다음: 노드 부트스트랩 >
마지막 업데이트