Secret

Secret은 암호, API 키, 인증서와 같은 민감한 정보를 저장하기 위한 쿠버네티스 리소스입니다. ConfigMap과 유사하지만 보안이 필요한 데이터를 위해 설계되었습니다.

특징

주의사항

클라우드 네트워크 개념과 비교

실습 예시

apiVersion: v1
kind: Secret
metadata:
  name: db-credentials
type: Opaque
data:
  username: YWRtaW4=  # admin (Base64 인코딩)
  password: UGEkJHcwcmQ=  # Pa$w0rd (Base64 인코딩)

또는 stringData 필드를 사용하여 인코딩하지 않고 직접 값 입력:

apiVersion: v1
kind: Secret
metadata:
  name: db-credentials
type: Opaque
stringData:
  username: admin
  password: Pa$w0rd

환경 변수로 Secret 사용 예시

apiVersion: v1
kind: Pod
metadata:
  name: db-app
spec:
  containers:
  - name: db-app
    image: myapp:1.0
    env:
    - name: DB_USERNAME
      valueFrom:
        secretKeyRef:
          name: db-credentials
          key: username
    - name: DB_PASSWORD
      valueFrom:
        secretKeyRef:
          name: db-credentials
          key: password

볼륨으로 Secret 사용 예시

apiVersion: v1
kind: Pod
metadata:
  name: db-app-volume
spec:
  containers:
  - name: db-app
    image: myapp:1.0
    volumeMounts:
    - name: secret-volume
      mountPath: /etc/secrets
      readOnly: true
  volumes:
  - name: secret-volume
    secret:
      secretName: db-credentials

Secret 생성 방법 (명령적 방식)

# 리터럴 값으로 생성
kubectl create secret generic db-credentials \
  --from-literal=username=admin \
  --from-literal=password=Pa$w0rd

# 파일에서 생성
kubectl create secret generic tls-certs \
  --from-file=cert.pem \
  --from-file=key.pem

# TLS Secret 생성
kubectl create secret tls tls-secret \
  --cert=cert.pem \
  --key=key.pem

Secret 타입

Secret 사용 모범 사례