ConfigMap, Secret
Env(Literal, File), Mount(File)
1. Env (Literal)
1-1) ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
name: cm-dev
data:
SSH: 'false'
User: dev
1-2) Secret
apiVersion: v1
kind: Secret
metadata:
name: sec-dev
data:
Key: MTIzNA==
1-3) Pod
apiVersion: v1
kind: Pod
metadata:
name: pod-1
spec:
containers:
- name: container
image: kubetm/init
envFrom:
- configMapRef:
name: cm-dev
- secretRef:
name: sec-dev
2. Env (File)
2-1) Configmap
echo "Content" >> file-c.txt
kubectl create configmap cm-file --from-file=./file-c.txt
2-2) Secret
echo "Content" >> file-s.txt
kubectl create secret generic sec-file --from-file=./file-s.txt
필독! 강의중 Pod Secret의 보안적요소 설명정정
secret은 쿠버네티스의 Memory에 저장되기 떄문에 보안에 좋고, secret를 많이 사용하면 쿠버네티스 클러스터 메모리가 부족해진다고 한부분을 수정합니다
[내용 수정] secret은 평문으로 쿠버네티스 DB(etcd)에 저장됩니다. secret의 보안적 요소는 secret를 pod에 파일로 마운팅해서 사용할 때 Pod 내부에서는 파일이 보이지만 이런 기능을 구현하기 위해서 쿠버네티스 입장에서는 workernode에 secret 파일을 만들어 놓고, Pod에 이 파일을 마운팅 합니다 이때 workernode에 secret 파일을 인메모리 파일시스템(tmpfs)영역에 올려놓고 있다가 Pod가 삭제되면 지우는데요. 이렇게 민감한 데이터를 디스크에 저장해 놓지 않기 때문에 configmap보다 보안에 유리 할 수 있습니다
2-3) Pod
apiVersion: v1
kind: Pod
metadata:
name: pod-file
spec:
containers:
- name: container
image: kubetm/init
env:
- name: file-c
valueFrom:
configMapKeyRef:
name: cm-file
key: file-c.txt
- name: file-s
valueFrom:
secretKeyRef:
name: sec-file
key: file-s.txt
3. Volume Mount (File)
3-1) Pod
apiVersion: v1
kind: Pod
metadata:
name: pod-mount
spec:
containers:
- name: container
image: kubetm/init
volumeMounts:
- name: file-volume
mountPath: /mount
volumes:
- name: file-volume
configMap:
name: cm-file
kubectl
ConfigMap
# file-c.txt 라는 파일로 cm-file라는 이름의 ConfigMap 생성
kubectl create configmap cm-file --from-file=./file-c.txt
# key1:value1 라는 상수로 cm-file라는 이름의 ConfigMap 생성
kubectl create configmap cm-file --from-literal=key1=value1
# 여러 key:value로 cm-file라는 이름의 ConfigMap 생성
kubectl create configmap cm-file --from-literal=key1=value1 --from-literal=key2=value2
Secret Generic
# file-s.txt 라는 파일로 sec-file라는 이름의 Secret 생성
kubectl create secret generic sec-file --from-file=./file-s.txt
# key1:value1 라는 상수로 sec-file라는 이름의 Secret 생성
kubectl create secret generic sec-file --from-literal=key1=value1
Tips
Secret
- 데이터가 메모리에 저장되기 때문에 보안에 유리
- 한 Secret당 최대 1M까지만 저장됨
Referenece
Kubernetes
- Configure a Pod to Use a ConfigMap : https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/
- Distribute Credentials Securely Using Secrets : https://kubernetes.io/docs/tasks/inject-data-application/distribute-credentials-secure/