- 디플로이먼트를 이용해서 파드를 생성할 때, 파드에서 필요한 데이터를 환경 변수로 설정되도록 하여 넘겨주고자 한다.
- 파드에 넘겨줄 데이터를 클러스터에서 어떻게 관리할지도 고민해본다.
ConfigMap#
- 클러스터 내에 기밀이 아닌 데이터를 저장하는 데 사용하는 API 오브젝트다.
- 파드는 ConfigMap을 환경 변수, 파라미터 볼류의 구성 파일로 사용할 수 있다.
- 아래와 같이 명령어로 바로 ConfigMap을 만들 수도 있고, yaml 파일을 이요해서 만들 수도 있다.
kubectl create configmap special-config --from-literal=special.how=very --from-literal=special.type=charm
apiVersion: v1
kind: ConfigMap
metadata:
creationTimestamp: 2022-02-18T19:14:38Z
name: special-config
namespace: default
resourceVersion: "651"
uid: dadce046-d673-11e5-8cd0-68f728db1985
data:
special.how: very
special.type: charm
- ConfigMap에 있는 모든 key-value 쌍을 환경 변수로 사용하려면,
envFrom
을 이용할 수 있다.
apiVersion: v1
kind: Pod
metadata:
name: dapi-test-pod
spec:
containers:
- name: test-container
image: registry.k8s.io/busybox
command: [ "/bin/sh", "-c", "env" ]
envFrom:
- configMapRef:
name: special-config
restartPolicy: Never
- 여러 ConfigMap으로 부터 일부 값들을 환경 변수로 사용하려면
valueFrom
을 사용할 수 있다.
apiVersion: v1
kind: Pod
metadata:
name: dapi-test-pod
spec:
containers:
- name: test-container
image: registry.k8s.io/busybox
command: [ "/bin/echo", "$(SPECIAL_LEVEL_KEY) $(SPECIAL_TYPE_KEY)" ]
env:
- name: SPECIAL_LEVEL_KEY
valueFrom:
configMapKeyRef:
name: special-config
key: SPECIAL_LEVEL
- name: SPECIAL_TYPE_KEY
valueFrom:
configMapKeyRef:
name: special-config
key: SPECIAL_TYPE
restartPolicy: Never
Secret#
- 비밀번호, 토큰 키 같은 기밀 데이터를 포함하는 오브젝트이다.
- ConfigMap과 다르게 base64로 인코딩된 데이터를 저장해야된다.
- 또한, ConfigMap 과 Secret 모두 etcd에 저장되지만 Secret은 클러스터 설정에 따라 데이터를 암호화해서 저장한다.
- Secret은 RBAC(Role-Based Access Control)에 따라 접근할 수 있는 사용자를 제한할 수 있다.
- 아래와 같이 base64로 인코딩을 하고 저장할 수 있다.
echo -n 'my-app' | base64
echo -n '39528$vdg7Jb' | base64
apiVersion: v1
kind: Secret
metadata:
name: test-secret
data:
username: bXktYXBw
password: Mzk1MjgkdmRnN0pi
- Secret도 ConfigMap과 비슷하게
valueFrom
을 통해 특정 값을 파드의 환경 변수로 설정할 수 있다.
apiVersion: v1
kind: Pod
metadata:
name: envvars-multiple-secrets
spec:
containers:
- name: envars-test-container
image: nginx
env:
- name: BACKEND_USERNAME
valueFrom:
secretKeyRef:
name: backend-user
key: backend-username
- name: DB_USERNAME
valueFrom:
secretKeyRef:
name: db-user
key: db-username
참고 자료#