Kubernetes - Object:ConfigMap, Secret
Devops/Kubernetes

Kubernetes - Object:ConfigMap, Secret

뉴비뉴 2020. 5. 8.

설명

ConfigMap과 Secret을 사용해야되는 상황을 먼저 설명하겠습니다.

 

개발환경(Dev)과 상용환경(Production)이 있습니다.

 

A라는 서비스에는 일반접근과 보안접근을 지원한다.

그래서 개발환경에서는 보안옵션을 해제할 수 있는 옵션이 있다.

보안접속을 하려면 User와 Key를 세팅할 수 있다.

 

환경에 따라 변하는 값들은 외부에서 결정하게 되는데

이럴 때 ConfigMap과 Secret을 사용합니다.

 

분리해야되는 일반적인 상수들을 모아서 ConfigMap을 만들고

Key와 같이 보안적인 부분들을 모아서 Secret을 만든다.

 

Pod 생성 시에 ConfigMap과 Secret을 연결 할 수 있는데 컨테이너의 환경변수에 데이터들이 들어가게 된다.

A Service의 입장에서는 환경변수를 읽어 사용하면 된다.

 

 

사용방법

  • Env(Literal)
    • ConfigMap은 Key와 Value로 정의되어있고, 필요한 상수들을 정의하면 Pod을 생성할 때 Container의 환경변수에 값을 저장해서 사용할 수 있습니다. - DB 저장
    • Secret도 보안적인 요소의 값들을 갖고 있습니다. 한가지 특이한 점은 Value의 값이 Base64로 암호화되어 있다가 Pod로 들어갈 때 Decode이 되어 보여지게 됩니다. - Memory 저장 (보안에 뛰어나다), 1Mbyte
    • ConfigMap value는 string 타입이기 때문에 false 같은 boolean 타입을 넣으려면 'False' 처럼 넣어줘야 한다.
    • Secret value를 넣을 때 Base64인코딩한 값을 value에 넣어야 한다.
    • env 명령어로 들어간 값을 확인할 수 있다.

ConfigMap

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

Secret

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

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

 

 

 

  • Env(File)
    • File을 환경변수에 넣는 방법입니다.
    • ConfigMap 에서 File의 이름이 Key가 되고, 내용이 Value가 되어 ConfigMap이 완성됩니다.
    • File이름(Key)는 변경할 수 있습니다.
    • Secret 에서는 File안의 Value값이 Base64로 인코딩 되기 때문에 정상적인 값이 들어와 있어야 합니다.
    • 만약 ConfigMap의 값이 변경되면 어떻게 될까요? 환경변수는 한번 주입하면 끝이기 때문에 값이 변경되어도 Pod의 환경변수 내용은 변경이 없고, Pod이 죽었다가 다시 살아나야 변경된 내용이 환경변수에 적힌다.

ConfigMap

echo "Content" >> file-c.txt
kubectl create configmap cm-file --from-file=./file-c.txt

Secret

echo "Content" >> file-s.txt
kubectl create secret generic sec-file --from-file=./file-s.txt  // base64 encode 진행

Pod

apiVersion: v1
kind: Pod
metadata:
  name: pod-file
spec:
  containers:
  - name: container
    image: kubetm/init
    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

  • Volume Mount(File)
    • File을 ConfigMap에 담는 것은 똑같고, 컨테이너 안에 /mount PATH를 정의하고 File을 안에 넣을 수 있다.
    • 마운트라는게 원본과 연결시켜놓는다는 개념이기 때문에 ConfigMap이 변경되어도 Pod 안에 값도 같이 변경된다.
apiVersion: v1
kind: Pod
metadata:
  name: pod-mount
spec:
  containers:
  - name: container
    image: kubetm/init
    volumeMounts:
    - name: file-volume
      mountPath: /mount
  volumes:
  - name: file-volume
    configMap:
      name: cm-file

 

 

'Devops > Kubernetes' 카테고리의 다른 글

Kubernetes - Object:Namespace, ResourceQuota, LimitRange  (0) 2020.05.11
Helm 이란  (0) 2020.05.11
Kubernetes 세미나  (0) 2020.04.29
Kubernetes - Object:Volume  (0) 2020.04.27
Kubernetes - Object:Service  (0) 2020.04.27

댓글

💲 추천 글