ConfigMap / Secret

dongbin_Shin·2022년 11월 15일
0

kubernetes

목록 보기
7/16
post-custom-banner

환경(dev, pord)에 따라 변하는 설정과 관련된 값들을 관리하는 Object

서비스 내에서 환경과 관련된 값들을 관리했을 때 단점

  • 환경에 대한 값들이 서비스 내부에서 관리되면 바뀔때마다 이미지 전체를 관리해줘야 함
  • 환경 값에 따라 다른 이미지가 만들어지기 때문에 많은 이미지를 저장, 관리해야 함
  • 클러스터 내 다른 서비스에서 해당 값들에 대한 접근 불가

파일 저장 및 주입 방법

1. Env (Literal)

  • 상수로 값을 저장
  • secret의 값은 Base64 인코딩하여 저장 → pod에 주입 될 때 자동 디코딩
  • secret이 메모리에 저장됨
    • 1Mbyte까지 가능 → 너무 많이 생성하면 자원에 문제 일으킴
    • File 방식보다 보안성 좋음
apiVersion: v1
kind: ConfigMap
metadata:
  name: cm-dev
data:
  SSH: 'false'
  User: dev
apiVersion: v1
kind: Secret
metadata:
  name: sec-dev
data:
  Key: MTlzNA== # base64 encoded
apiVersion: v1
kind: Pod
metadata:
  name: pod-1
spec:
  containers:
    - name: container
      image: something
      envFrom:
      - configMapRef:
          name: cm-dev
      - secretReg:
          name: sec-dev

2. Env (File)

  • 파일에 값을 저장
  • Key ⇒ 파일명, Value ⇒ 파일 내용
    • pod에 주입시 key 값을 변경하여 주입 (확장자까지 key로 저장되기 때문)
  • master의 console로 kubectl을 사용함
  • 파일 내용이 Secret에 주입될 때 base64로 인코딩 되기 때문에 별도로 파일 내용 인코딩 X
    • $ kubectl create secret generic ...
  • 한번 주입되면 파일 내용이 변경돼도 pod에 주입된 값이 변경되지 않음 (Async) → pod가 재생성 될 때 다시 주입

$ kubectl create configmap cm-file --from-file=./file-c.txt

$ kubectl create secret generic sec-file --from-file=./file-s.txt

apiVersion: v1
kind: Pod
metadata:
  name: file
spec:
  containers:
    - name: container
      image: something
      env:
        - name: file-c # key 변경
          valueFrom:
            configMapKeyRef:
              name: cm-file
              key: file-c.txt # 기존 key
        - name: file-s
          valueFrom:
            secretKeyRef:
              name: sec-file
              key: file-s.txt

3. Volume Mount (File)

  • 파일에 값을 저장
  • Key ⇒ 파일명, Value ⇒ 파일 내용
    • pod에 주입시 key 값을 변경하여 주입 (확장자까지 key로 저장되기 때문)
  • master의 console로 kubectl을 사용함
  • 파일 내용이 Secret에 주입될 때 base64로 인코딩 되기 때문에 별도로 파일 내용 인코딩 X
    • $ kubectl create secret generic ...
  • 파일이 mount되어 있기 때문에 파일 내용이 변경되면 pod에 주입된 값도 변경 (Sync)

$ kubectl create configmap cm-file --from-file=./file-c.txt

$ kubectl create secret generic sec-file --from-file=./file-s.txt

apiVersion: v1
kind: Pod
metadata:
  name: mount
spec:
  containers:
    - name: container
      image: something
      volumeMounts:
        - name: file-volume
          mountPath: /mount
  volumes:
  - name: file-volume
    configMap:
      name: cm-file
profile
멋있는 백엔드 개발자
post-custom-banner

0개의 댓글