DevOps/Kubernetes

[Kubernetes Study - 07] ConfigMap, Secret

돌돌김 2021. 2. 10. 17:19

ConfigMap, Secret

개발환경과 운영환경이 다르다면 이미지를 만들 때 들어가는 설정들이 조금씩 다른 경우가 있다.

  • 예를 들어, 개발환경에서는 SSH 접속을 가능하게 하고, 접근 유저와 키 값을 세팅할 수 있다. 반면 운영 환경에서는 SSH 접속을 불가능하게 해야한다.

Service의 이미지로 만들어서 배포한다고 하면 이 정보만 수정하기 위해 이미지를 운영환경과 개발환경에서 각각 2개를 만들어 하고, 이는 관리의 어려움과 번거로움이 생길 수 있다.

이러한 설정 정보들을 따로 관리해 주는 것이 ConfigMap과 Secret이다. 컨테이너를 만들 때 ENV값에 넣어준다. Secret은 Base64 인코딩을 해서 저장해야 하고, 이를 파드에 배포하면 알아서 디코딩 해준다.

  • secret에 Base64 적용함의 차이

      # Base64 인코딩을 하지 않고, 배포한 경우 
      HELLO_SVC_SERVICE_HOST=10.0.157.34
      SVC_2_PORT=tcp://10.0.187.187:9000
      HOSTNAME=pod-2
      .
      .
      SVC_3_PORT_9000_TCP=tcp://10.0.169.32:9000
      Key=�m�
      SVC_3_PORT=tcp://10.0.169.32:9000
      SVC_2_SERVICE_HOST=10.0.187.187
      SVC_3_SERVICE_PORT=9000
    
      # Base64 인코딩을 하고 배포한 경우
      [root@pod-2 /]#env
      HELLO_SVC_SERVICE_HOST=10.0.157.34
      SVC_2_PORT=tcp://10.0.187.187:9000
      HOSTNAME=pod-2
      .
      .
      SVC_3_PORT_9000_TCP=tcp://10.0.169.32:9000
      Key=1234
      SVC_3_PORT=tcp://10.0.169.32:9000

 

Env에는 상수값(Literal) 또는 파일 형태로 값이 들어갈 수 있다.

  • Env - Literal
    • kind를 ConfigMap으로 해서 하나 만든다. 들어가는 값은 상수 값으로 한다.
    • yaml 작성시 만들어 놓은 ConfigMap을 Container에서 불러온다.
  • Env - File
    • 파일에 환경변수를 넣어놓는 방법
    • 파일의 이름이 key가 되고, 그 안의 내용이 value가 된다.
    • kubectl 명령어로 직접 해줘야 한다. 이 때, Secret의 경우 알아서 Base64로 인코딩 된다.

 

VolumeMount는 file을 마운트 걸 수 있다.

  • VolumeMount : Pod를 정의할 때 container 내부에 mount path를 걸어 놓는다.
    • Secret에는 인증서, 비밀번호를 담는다. 값이 메모리에 저장이 된다. 최대 1MB까지만 저장가능
    • Pod를 만들 때 mount path를 설정하고, mount할 볼륨에 configmap을 담는다.

 

Env에 File로 저장하는 것과 Volume에 File로 저장하는 것의 차이점

 

  •  Env
    • ConfigMap의 값이 바뀌어도 배포된 Pod의 값은 바뀌지 않는다.
    • Pod를 죽이고 다시 실행시켜야 ConfigMap의 변경된 값을 받아온다.
  • Volume mount
    • 원본과 연결시킨다는 개념이므로 ConfigMap의 값이 바뀌면 배포된 Pod값도 같이 바뀐다.