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
시작하세요! 도커/쿠버네티스

반응형