Kubernetes Secret : 민감한 정보를 안전하게 관리

y001·2025년 3월 23일
0
post-thumbnail

1. Secret이란?

Secret은 비밀번호, 토큰, SSH 키 등 민감한 정보를 안전하게 관리하기 위한 쿠버네티스 리소스다.
ConfigMap과 달리 base64로 인코딩된 형태로 저장되며, 중요한 정보를 코드에 하드코딩하지 않고 따로 관리할 수 있도록 해준다.

주의: Secret도 etcd에 저장되며, etcd가 암호화되지 않은 상태라면 base64 인코딩일 뿐 평문 복호화가 가능하다.
그래서 보안이 중요한 환경에서는 etcd 암호화 설정을 같이 해야 한다.


2. Secret 생성 방법

2-1. YAML로 생성

test-secret.yaml 파일을 작성한다.
값은 base64 인코딩해야 한다.

echo -n 'webadm' | base64    # d2ViYWRt 출력
echo -n 'abcd1234' | base64  # YWJjZDEyMzQ= 출력

YAML 파일 작성 예시:

apiVersion: v1
kind: Secret
metadata:
  name: test-secret
type: Opaque
data:
  DB_USER: d2ViYWRt
  DB_PASS: YWJjZDEyMzQ=

적용:

kubectl apply -f test-secret.yaml

확인:

kubectl get secret test-secret -o yaml

2-2. kubectl 명령어로 직접 생성

kubectl create secret generic test-secret \
  --from-literal=DB_USER=webadm \
  --from-literal=DB_PASS=abcd1234

3. Secret 사용 방법

3-1. 환경변수로 사용

secret-env-pod.yaml 파일 작성:

apiVersion: v1
kind: Pod
metadata:
  name: secret-env-pod
spec:
  containers:
  - name: test-container
    image: centos
    command: ["/bin/sh", "-c", "env; sleep 3600"]
    env:
    - name: DB_USER
      valueFrom:
        secretKeyRef:
          name: test-secret
          key: DB_USER
    - name: DB_PASS
      valueFrom:
        secretKeyRef:
          name: test-secret
          key: DB_PASS

적용:

kubectl apply -f secret-env-pod.yaml

컨테이너 접속 후 확인:

kubectl exec -it secret-env-pod -- /bin/sh
env | grep DB_

3-2. 파일처럼 마운트

secret-volume-pod.yaml 작성:

apiVersion: v1
kind: Pod
metadata:
  name: secret-volume-pod
spec:
  containers:
  - name: test-container
    image: centos
    command: ["/bin/sh", "-c", "sleep 3600"]
    volumeMounts:
      - name: secret-volume
        mountPath: "/etc/secret"
  volumes:
    - name: secret-volume
      secret:
        secretName: test-secret

적용:

kubectl apply -f secret-volume-pod.yaml

확인:

kubectl exec -it secret-volume-pod -- /bin/sh
ls -l /etc/secret
cat /etc/secret/DB_USER

4. Secret 타입 종류

타입 유형설명
Opaque기본 사용자 정의 데이터 (가장 많이 사용)
kubernetes.io/service-account-token서비스 계정 토큰 저장용
kubernetes.io/dockerconfigjsonDocker 인증 정보 저장용
kubernetes.io/ssh-authSSH 키 저장
kubernetes.io/tlsTLS 인증서 저장
bootstrap.kubernetes.io/token부트스트랩 토큰 저장

5. 주의할 점

  • Secret도 etcd에 저장될 때 기본 암호화가 안 돼 있으면 위험.
  • 메모리에서 kube-apiserver, kubelet이 디코딩해서 사용하기 때문에 주기적인 관리 필요.
  • 지나치게 큰 Secret 데이터는 메모리 사용량을 증가시키므로 주의해야 한다.

0개의 댓글