에어갭 환경 구성

< 이전: 네트워크 구성 | 목차 | 다음: 노드 부트스트랩 >

지원 버전: EKS 1.31+, nodeadm 0.1+ 마지막 업데이트: 2026년 2월 23일

이 문서에서는 에어갭(Air-Gapped) 환경에서 EKS Hybrid Nodes를 구성하는 방법을 다룹니다. 바이너리 아티팩트는 프라이빗 S3 버킷과 VPC 엔드포인트를 통해, 컨테이너 이미지는 ECR VPC 엔드포인트를 통해 접근합니다.

에어갭 환경이란?

에어갭(Air-Gapped) 환경은 외부 인터넷과 완전히 격리된 네트워크 환경을 의미합니다. 이러한 환경은 보안이 중요한 산업에서 필수적으로 요구됩니다.

에어갭 환경이 필요한 이유

요구 사항
설명

보안 규정 준수

금융, 의료, 국방 등 민감한 데이터를 다루는 산업에서는 외부 네트워크와의 격리가 법적으로 요구됩니다

데이터 유출 방지

외부 통신 경로를 차단하여 데이터 유출 위험을 원천적으로 차단합니다

공급망 공격 방지

외부 레지스트리에서 악성 이미지가 유입되는 것을 방지합니다

네트워크 안정성

외부 서비스 장애가 내부 시스템에 영향을 미치지 않습니다

에어갭 환경의 유형

spinner

에어갭 아키텍처 개요

이 문서에서 구성하는 에어갭 아키텍처는 다음과 같습니다:

spinner

아티팩트 저장소 역할 분담

아티팩트 유형
저장소
접근 경로

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 installnodeadm init을 실행합니다. nodeadm installhybrid-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에 따라 다른 경로에 프록시 설정 파일을 배치해야 합니다.

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 작업을 설정합니다.


< 이전: 네트워크 구성 | 목차 | 다음: 노드 부트스트랩 >

마지막 업데이트