파드 (Pod) 의 환경변수에 MY_SQL 비밀번호 를 넣어야 할 때가 있었다. MY_SQL 비밀번호 는 기밀사항이므로 외부에 노출을 최소화하는 방법을 찾아보았고, Secret 을 사용하는 방안을 찾았다.
아래의 그림에서와 같이 시크릿 은 파드 에서 env 와 voulme 으로도 사용될 수 있다.

이미지 출처: https://www.macstadium.com/blog/how-to-k8s-kubernetes-secrets-made-simple
이번 글에는 env 를 Secret 으로 작성하고 Pod 에 적용하는 방법을 공유하려 한다.
MY_SQL 비밀번호 같은 보안이 필요한 내용을 .env.secret 에 작성한다.
# .env.secret
USER=admin
PASSWORD=abcde
kustomization.yaml 파일을 작성한다. ( 🔹STEP 1 에서 생성한 .env.secret 을 사용한다.)
# kustomization.yaml
generatorOptions:
disableNameSuffixHash: true
secretGenerator:
- name: mysecret
envs:
- .env.secret
kubectl apply -k . 을 통해 시크릿 리소스를 생성한다.
$ kubectl apply -k .
secret/db-user-pass-5k2878ch59 created
생성한 시크릿을 Pod 에서 사용해보자.
생성한 시크릿 을 파드의 환경변수 로 사용하는 파드 명세 를 작성한다.
# pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: secret-test-pod
spec:
containers:
- name: test-container
image: registry.k8s.io/busybox
command: [ "/bin/sh", "-c", "env" ]
envFrom:
- secretRef:
name: mysecret
restartPolicy: Never
🔹 STEP 1 에서 작성한 파드 명세를 통해 파드 를 생성한다.
$ kubectl apply -f pod.yaml
아래와 같이 명령어를 쳐보면, 생성된 Pod 가 환경변수 리스트를 로그로 출력한 것을 확인할 수 있다.
$ kubectl logs pods/secret-test-pod
...
USER=admin
PASSWORD=abcde
# 혹은 아래로 직접 출력
$ kubectl exec --stdin --tty pods/{pod 이름} -- /bin/bash
$ env
참고자료: