본문 바로가기

About/Kubernetes

[k8s] 애플리케이션 설정 정보 관리(ConfigMap/Secrets)

 쿠버네티스를 사용하면 컨테이너 애플리케이션이 클러스터 안의 어디에서 움직이고 있는지를 의식할 필요가 없어집니다. 그런데 애플리케이션이 공통으로 이용하는 환경변수 등을 컨테이너 안에 넣어버리면 환경이 바뀔 때 마다 이미지를 만들어야 하므로 번거롭습니다. 

쿠버네티스에서는 이런 애플리케이션 정보를 일원 관리하는 장치가 있습니다.

 

컨피그맵(ConfigMap)과 시크릿(Secrets)

컨피그맵(ConfigMap)

 컨피그맵은 애플리케이션의 설정 정보, 구성 파일, 명령 인수, 포트 번호, 애플리케이션 고유의 식별 정보 등을 포드에서 참조할 수 있도록 해 주는 장치입니다. Key-Value 형으로 정보를 관리할 수 있습니다. 예를 들어 Nignx의 설정 파일 등 각 컨테이너에서 공통으로 만들고 싶은 것을 등록하여 일원 관리합니다.

 컨피그맵의 정보는 볼륨으로서 마운트할 수 있으므로 컨테이너 애플리케이션에서 봤을 때 보통의 파일로 취급할 수 있습니다. 또 환경변수로 취급할 수도 있습니다

ConfigMap 구성 예시

apiVersion: v1
kind: ConfigMap
metadata:
  name: cm-dev
data:
  SSH: 'false'
  User: dev

 

시크릿(Secrets)

시크릿은 컨피그맵과 마찬가지로 구성 정보를 컨테이너 애플리케이션에 전달하기 위한 것이지만, DB와 연결할 때 비밀번호나 OAuth 토큰과 같은 기밀성이 높은 정보를 관리할 때 이용합니다.

바이너리 데이터도 저장할 수 있도록 데이터를 base64로 인코딩해야합니다. 시크릿의 데이터는 메모리 상(tmpfs)에 전개되어 디스크에는 기록되지 않는다는 특징을 갖고 있습니다. 또 쿠버네티스 1.7 이후 버전에서는 암호화되어 etcd로 관리됩니다. 프라이빗 컨테이너 이미지로부터 이미지를 다운로드할 때 인증 정보를 전달하는 경우에 사용합니다.

Secret 구성 예시

apiVersion: v1
kind: Secret
metadata:
  name: sec-dev
data:
  Key: MTIzNA==

 

ConfigMap과 Secret의 내용을 환경 변수로 가지는 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

 


참고 서적

http://www.yes24.com/Product/Goods/78875805

 

완벽한 IT 인프라 구축의 자동화를 위한 Kubernetes 쿠버네티스 - YES24

Azure를 사용한 쿠버네티스의 개념 파악과 실전 응용이 책은 쿠버네티스를 처음 사용하는 업무 애플리케이션 개발자 및 도커에 대한 기초 지식이 있는 분을 대상으로 컨테이너 오케스트레이션

www.yes24.com