문제점: 애플리케이션 설정(DB 주소, API 엔드포인트 등)이나 민감한 정보(비밀번호, API 키)를 Docker 이미지에 직접 포함시키는 것은 매우 나쁜 관행입니다. 설정이 변경될 때마다 이미지를 다시 빌드해야 하고, 보안에 매우 취약하기 때문입니다.
해결책: 쿠버네티스는 설정(Configuration)과 비밀(Secret)을 애플리케이션 코드와 분리하여 관리할 수 있는 오브젝트를 제공합니다.
| 오브젝트 | ConfigMap | Secret |
|---|---|---|
| 목적 | 일반 설정 정보 저장 | 민감한 정보 저장 |
| 데이터 | Key-Value 쌍의 평문(Plain Text) 데이터 | Key-Value 쌍의 Base64로 인코딩된 데이터 |
| 보안 | 암호화되지 않음 | 기본적으로 인코딩만 되지만, 클러스터 내에서 암호화된 저장 등 추가 보안 메커니즘 제공 |
| 사용 사례 | • DB 호스트 주소, 포트 • 외부 API 엔드포인트 • 기능 활성화 플래그 | • DB 사용자 비밀번호 • TLS 인증서, Private Key • 외부 서비스 API 키 |
Pod를 생성할 때, ConfigMap이나 Secret의 데이터를 두 가지 주요 방식으로 컨테이너에 주입할 수 있습니다.
ConfigMap이나 Secret의 Key-Value를 컨테이너의 환경 변수로 주입합니다. 애플리케이션은 이 환경 변수를 읽어 설정을 로드합니다. (가장 일반적인 방식)ConfigMap이나 Secret을 가상의 볼륨으로 만들어, 컨테이너 내부의 특정 경로에 파일 형태로 마운트합니다. 애플리케이션은 이 파일을 읽어 설정을 로드합니다.핵심 장점: 코드나 이미지의 변경 없이 설정만 독립적으로 업데이트하고, Pod를 재시작하는 것만으로 새로운 설정을 적용할 수 있습니다.
EKS는 AWS에서 제공하는 완전 관리형 쿠버네티스 서비스입니다.
문제점: 쿠버네티스는 매우 강력하지만, 직접 설치하고 운영하는 것은 매우 복잡합니다. 특히, 컨트롤 플레인(Control Plane)의 고가용성, 보안, 업그레이드 등을 관리하는 것은 전문적인 지식이 필요합니다.
EKS의 역할: AWS가 쿠버네티스의 컨트롤 플레인(Control Plane)을 대신 관리해주고, 사용자는 애플리케이션을 실행할 워커 노드(Worker Nodes)만 관리하면 되도록 하여, 쿠버네티스 운영의 복잡성을 크게 줄여줍니다.
aws-cli, kubectl, eksctl과 같은 명령줄 도구를 설치하고 설정합니다.eksctl: EKS 클러스터 생성을 명령어 한 줄로 자동화해주는 매우 편리한 공식 도구입니다.eksctl을 사용하여 클러스터 이름, 리전, 워커 노드의 사양 및 개수 등을 정의한 YAML 파일을 작성하고, 명령어를 실행하여 클러스터를 생성합니다.eksctl create cluster -f cluster.yamleksctl은 CloudFormation을 통해 VPC, 서브넷, IAM 역할, 컨트롤 플레인, 워커 노드(EC2 Auto Scaling Group) 등 수많은 AWS 리소스를 자동으로 생성하고 구성해줍니다.kubectl이 EKS 클러스터를 바라보도록 설정(aws eks update-kubeconfig)한 후, 이전에 작성했던 쿠버네티스 YAML 파일(Deployment, Service 등)을 그대로 사용하여 애플리케이션을 배포합니다.kubectl apply -f my-app-deployment.yaml
kubectl apply -f my-app-service.yamlLoadBalancer로 지정합니다.eksctl을 사용하여 클러스터를 삭제하면, 클러스터 생성 시 만들어졌던 모든 관련 AWS 리소스(EC2, Auto Scaling Group, IAM 역할 등)를 한 번에 깔끔하게 삭제할 수 있습니다.eksctl delete cluster --name my-cluster --region ap-northeast-2eksctl 도구를 사용하면 EKS 클러스터 생성에 필요한 복잡한 AWS 리소스들을 자동으로 프로비저닝할 수 있습니다.Service 타입을 LoadBalancer로 지정하여 배포하면, AWS의 실제 로드 밸런서가 자동으로 생성되어 애플리케이션을 외부에 안정적으로 노출시킬 수 있습니다.eksctl delete 명령어로 삭제해야 합니다.