애플리케이션을 구동할 때는 중요한 키 값, 서버 구동에 필요한 설정 값 등등 다양한 종류의 환경 변수들이 필요하다.
일반적인 서버를 구동할 때에는 해당 서버에 환경 변수를 관리하는 정적인 파일을 만들거나, 애플리케이션을 구동할 때, 매개변수로 필요한 환경 변수들을 전달한다.
반면에 k8s를 사용할 때에는 서버 애플리케이션이 돌고 있는 컨테이너 또는 Pod에 환경 변수를 직접 부여하는 것이 아니라 ConfigMap이나 Secret에 필요한 환경 변수들을 정의해놓고, Pod에 연결해주는 방식으로 환경을 구성한다.
apiVersion: v1
kind: ConfigMap
metadata:
name: config-map-1
data:
PROFILE: "dev"
KEY: "value1"
ConfigMap을 정의하는 yml에는 애플리케이션 구동에 필요한 환경 변수들을 Key:Value 형태로 작성한다.
apiVersion: v1
kind: Secret
metadata:
name: secret-1
data:
ACCESS_KEY: aGVsbG9Xb3JsZDE=
SECRET_KEY: aGVsbG9Xb3JsZDI=
Secret은 ConfigMap과 마찬가지로 필요한 환경 변수를 Key:Value형태로 작성할 수 있다.
ConfigMap과 다른 점은, Secret은 Base64로 인코딩된 값을 Value로 사용해야한다는 것과 이 값이 Memory에 저장되기 때문에 보안적으로 좀 더 안전하다는 점이다.
apiVersion: v1
kind: Pod
metadata:
name: pod-cm-1
spec:
containers:
- name: container
image: kai1114/hello
envFrom:
- configMapRef:
name: config-map-1
- secretRef:
name: secret-1
특정 Pod에서 ConfigMap이나 Secret을 사용하기 위해서는 위와 같이 yml을 작성해주면 된다.
위에서 작성한 yml들로 ConfigMap과 Secret과 Pod를 만들고, Pod의 컨테이너에 접속한 후, env를 출력해보면 아래와 같이 정상적으로 설정 값들이 출력되는 것을 확인할 수 있다.
