DevOps & SRE/Docker & kubernetes
[쿠버네티스 공부] ConfigMap, Secret
seungh0
2021. 2. 18. 09:34
반응형
그저 사이드 플젝에서 한 번 써보고 싶어서... 쿠버네티스를 공부를 하면서 정리하는 글입니다.
ConfigMap, Secret의 필요성
환경마다 설정 값을 다르게 줘야하는 경우 있다.
방법 A): 도커 이미지 내부에 설정 값 또는 설정 파일을 정적으로 저장 하는 방법
=> 도커 이미지는 빌드되고 나면 불변의 상태를 가져, 상황에 따라 유연하게 변경이 불가.
방법 B) 포드를 정의하는 YAML 파일에 환경 변수를 직접 적어두는 방법
=> 상황에 따라 환경 변수의 값만 다른 동일한 여러 개의 YAML이 존재할 수 있음
쿠버네티스에서는 이러한 환경마다 다른 설정 값을 위해 ConfigMap, Secret 오브젝트를 제공한다.
ConfigMap
일방적인 설정 값을 담아 저장할 수 있는 쿠버네티스 오브젝트.
Secret
비밀번호 등과 같이 민감한 정보를 저장하기 위한 용도로 사용되는 쿠버네티스 오브젝트.
ConfigMap, Secret 설정 방법
데이터로 Literal(상수)를 넣을 수 있고, 파일을 넣을 수 있고, 볼륨을 마운트 하는 파일을 넣을 수 있음.
1. Env (Literal)
- ConfigMap은 key, value 로 구성 되어 있음.
- 파드를 생성할 떄 ConfigMap을 가져와서 컨테이너 안의 환경 변수에 설정할 수 있음.
- Secret은 보안적인 요소에 대한 값들을 저장하는데 사용함. (값을 Base64로 변경해서 넣어야되고, 파드에 넣을때 디코딩 되서 주입됨)
- Secret의 경우 메모리에 저장된다. (파일에 저장되는 것보다 보안상 유리)
- ConfigMap의 경우 key, value 리스트를 무한대로 넣을 수 있는 반면에, Secret의 경우 1MB만 넣을 수 있음.
apiVersion: v1
kind: ConfigMap
metadata:
name: cm-dev
data:
SSH: "false"
User: dev
---
apiVersion: v1
kind: Secret
metadata:
name: sec-dev
data:
key: MTlzNA==
---
apiVersion: v1
kind: Pod
metadata:
name: pod-1
spec:
containers:
- name: container
image: ghcr.io/seungh0/k8s-study
envFrom:
- configMapRef:
name: cm-dev
- secretRef:
name: sec-dev
2. Env (File)
- configMap의 값이 변해도, 컨테이너에 영향이 없음
echo "Secret" >> file-s.txt kubectl create secret generic sec-file --from-file=./file-s.txt
apiVersion: v1 kind: Pod metadata: name: pod-configmap-secret spec: containers: - name: container image: ghcr.io/seungh0/k8s-study:latest 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
echo "ConfigMap" >> file-c.txt kubectl create configmap cm-file --from-file=./file-c.txt
Env (Volume Mount File)
- configMap의 값이 변하면, 파드에 마운팅 된 값도 변경이 됨.
출처:www.inflearn.com/course/%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4-%EA%B8%B0%EC%B4%88
시작하세요! 도커/쿠버네티스
반응형