LabHub

프로덕션 백엔드 API 캡스톤 · 관측 가능한 안전한 배포 · 이론

배포 선언도 파싱하고 실행 의미를 확인하라

LabHub 에서 이어서 보기

한 줄 요약

안전한 배포는 다이제스트로 고정된 이미지, 비루트 실행, 권한 상승 금지, 읽기 전용 루트 파일시스템, 리소스 요청·한도, 의미가 다른 준비·생존 프로브와 Secret 참조를 구조화된 객체로 선언한다.

왜 문자열 검색이 위험한가

주석에 runAsNonRoot: true를 적어도 Kubernetes는 아무 보안 설정도 받지 않는다. 들여쓰기가 깨진 YAML이나 잘못된 중첩 경로도 문자열은 모두 포함할 수 있다. 이번 실습은 YAML 1.2의 엄격한 부분집합인 JSON 형식으로 deployment.yaml을 작성한다. 파이썬 표준 라이브러리로 실제 객체를 파싱해 spec.template.spec.containers 아래 값을 확인하므로 추가 인터넷 의존성이 없다.

이미지는 변경 가능한 태그가 아니라 sha256 다이제스트로 고정한다. Pod 보안 문맥은 runAsNonRoot와 RuntimeDefault seccomp를, 컨테이너 보안 문맥은 allowPrivilegeEscalation: falsereadOnlyRootFilesystem: true를 가진다. CPU·메모리 requests와 limits를 모두 두고 /readyz/healthz를 분리한다. readiness 실패는 새 트래픽에서 제외하고, liveness 실패는 프로세스 재시작을 유도한다.

현장에서 비밀을 주입하는 법

DATABASE_URL 값을 매니페스트에 직접 쓰면 Git 이력과 리뷰 화면에 자격 증명이 남는다. valueFrom.secretKeyRef로 이름과 키만 참조하고 실제 비밀은 배포 시스템이 제공한다. Dockerfile은 Python 3.12 기반 이미지를 다이제스트로 고정하고 숫자 UID로 실행한다. CMD는 서버가 모든 인터페이스의 8080 포트에서 기동하도록 명시한다.

실무 판단 기준

파싱 성공은 첫 단계다. 셀렉터와 Pod 라벨 일치, 단일 책임 컨테이너, 프로브 경로, 리소스 값, Secret 참조 형태를 구조적으로 검사한다. 실제 클러스터에서는 정책 엔진과 서버 측 dry-run을 더한다. 캡스톤 체크는 클러스터가 없는 오프라인 세션에서도 조작하기 어려운 핵심 구조를 검증하고, 마지막 모듈에서는 이 선택과 장애 학습을 채용 가능한 증거로 정리한다.