
Secret은 비밀번호, 토큰, SSH 키 등 민감한 정보를 안전하게 관리하기 위한 쿠버네티스 리소스다.
ConfigMap과 달리 base64로 인코딩된 형태로 저장되며, 중요한 정보를 코드에 하드코딩하지 않고 따로 관리할 수 있도록 해준다.
주의: Secret도 etcd에 저장되며, etcd가 암호화되지 않은 상태라면 base64 인코딩일 뿐 평문 복호화가 가능하다.
그래서 보안이 중요한 환경에서는 etcd 암호화 설정을 같이 해야 한다.
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
kubectl create secret generic test-secret \
--from-literal=DB_USER=webadm \
--from-literal=DB_PASS=abcd1234
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_
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
| 타입 유형 | 설명 |
|---|---|
| Opaque | 기본 사용자 정의 데이터 (가장 많이 사용) |
| kubernetes.io/service-account-token | 서비스 계정 토큰 저장용 |
| kubernetes.io/dockerconfigjson | Docker 인증 정보 저장용 |
| kubernetes.io/ssh-auth | SSH 키 저장 |
| kubernetes.io/tls | TLS 인증서 저장 |
| bootstrap.kubernetes.io/token | 부트스트랩 토큰 저장 |