[TIL]Kubernetes Namespace, BusyBox, ConfigMap, Secret-2025.8.28

2025. 8. 28. 16:30대외활동/인공지능사관학교

728x90
반응형
SMALL

📝 TIL: Kubernetes Namespace, BusyBox, ConfigMap, Secret 정리

1. Namespace

핵심 개념

  • 논리적 구분: 하나의 쿠버네티스 클러스터를 여러 개의 가상 클러스터처럼 나누어 사용.
  • 목적
    1. 리소스 격리 및 이름 충돌 방지
    2. RBAC 기반 접근 제어
    3. 리소스 할당량 관리 (Quota)

주요 명령어

  • 조회: kubectl get ns
  • 생성: kubectl create namespace dev
  • YAML 생성: kubectl apply -f dev-namespace.yaml
  • 특정 네임스페이스 리소스 조회: kubectl get pods -n dev
  • 기본 네임스페이스 변경:
kubectl config set-context --current --namespace=dev
  • 삭제: kubectl delete namespace <이름> (⚠️ 모든 리소스가 함께 삭제됨, finalizer 문제 시 강제 삭제 필요)

베스트 프랙티스

  • 환경(dev, staging, prod)별 분리
  • 팀별(frontend, backend) 분리
  • 서비스별(monitoring, logging, ingress) 분리

2. BusyBox

핵심 개념

  • 임베디드 리눅스의 스위스 군용칼: 하나의 실행 파일이 수많은 명령어(ls, ping, nslookup 등)를 제공
  • Docker 이미지 특징
    • 초경량 (수 MB 수준)
    • 최소 구성 (불필요한 패키지 없음 → 보안 이점)

활용 사례

  1. 디버깅/네트워크 점검
    • kubectl exec -it busybox -- /bin/sh
    • ping, nslookup, wget 등을 이용해 연결 상태 확인
  2. Init Container로 사전 작업 수행
  3. Job/테스트 파드 실행 시 경량 이미지로 활용

실습 예제

#yaml
apiVersion: v1
kind: Pod
metadata:
     name: busybox-debug-pod
spec:
   containers:
   - name: busybox
     image: busybox:1.36
     command: ["/bin/sh", "-c", "ping -c 3 8.8.8.8 && sleep 3600"]
  • 실행: kubectl apply -f busybox-debug.yaml
  • 확인: kubectl logs busybox-debug-pod

3. ConfigMap

핵심 개념

  • 애플리케이션 설정을 코드/이미지와 분리하여 관리하는 객체
  • 민감하지 않은 데이터(DB 주소, API endpoint, feature flag 등)에 적합.
  • 민감 데이터는 Secret에 저장해야 함.

생성 방법

1. 리터럴 값:

kubectl create configmap my-app-config --from-literal=app.mode=production

2. 파일 기반: --from-file=app.properties

3. YAML 선언 (권장): GitOps 등 버전 관리 용이

사용 방법

  • 환경 변수 주입
  • envFrom으로 전체 주입
  • 볼륨 마운트 (파일처럼 사용)
volumes:
    - name: config-volume
      configMap:
      name: my-nginx-config
 

주의 사항

  • 변경 시 파드에 자동 반영되지 않음
  • 안정적인 적용법: kubectl rollout restart deployment <이름>

4. Secret

핵심 개념

  • 비밀번호, API 키, 인증서 같은 민감 정보 저장용 객체
  • ConfigMap과 동일하게 key-value 저장, 하지만 목적이 보안
  • 값은 Base64 인코딩 (암호화 아님). 실제 보안은 RBAC + etcd 암호화 설정에 의존해야 함.

생성 방법

  1. 리터럴 값:
kubectl create secret generic my-db-credentials \ --from-literal=DB_USER=kosa --from-literal=DB_PASSWORD='kosa1004$'

2. 파일 기반 (--from-file)

3. YAML 선언 (Base64 인코딩 후 data에 저장)

사용 방법

  • 환경 변수 주입
  • 볼륨 마운트 (TLS 인증서, 설정 파일)
volumes: 
   - name: db-secret-volume
     secret:
          secretName: my-db-credentials

보안 Best Practice

  • 최소 권한 원칙 (필요한 키만 주입)
  • RBAC로 Secret 접근 제한
  • 운영 환경에서 etcd 저장 시 암호화 설정 필수

💡 오늘 배운 점 & 느낀 점

  • 네임스페이스를 통해 환경·팀·서비스 단위로 리소스를 안전하게 분리할 수 있다는 점을 확인.
  • BusyBox가 단순한 툴이 아니라 쿠버네티스 디버깅의 핵심 도구라는 걸 배움.
  • ConfigMap과 Secret의 용도 구분이 매우 중요: “설정 vs 보안” 이 차이를 항상 기억해야 함.
  • 실제 운영 환경에서는 rollout restart, RBAC 정책, 암호화 등 운영 안정성과 보안 강화가 필수라는 교훈을 얻음.
728x90
반응형
LIST