System Engineering/Kubernetes

Kubernetes #7. Kubernetes의 ConfigMap, Secret(쿠버네티스 컨피그맵, 시크릿)

ZunoXI 2020. 8. 6.

개요

쿠버네티스의ConfigMap, Secret에 대한이해

ConfigMap and Secret

사소한 설정값몇개 때문에, 큰 용량의 이미지를 별도로 관리한다는것은 매우 비효율적인일이다. 따라서 이런 간단한 정보는 컨테이너내부에서 외부 정보를 참조할 수 있게 해주는 기능이있다. 그것이 바로ConfigMap과 Secret이다.

 

 


 

 

ConfigMap

우리는 종종 개발환경과 상용환경이 달라서 생기는 몇가지 문제들을 직면한다. 예를들어,SSH설정, key값등에 대한 차이로 개발계에서 테스트하는 이미지와 운영계에서 운영할 이미지를 별도로 만들어야될 수 있겠다. 아래사진과 같이 말이다.

 

 

 

 

여기서 ConfigMap을 사용하면 이미지가 구동되는 컨테이너 전체의 설정을 바꾸는 것이 아니라, ConfigMap의 설정만 바꾸고 컨테이너에서는 해당 설정값들을 ConfigMap에 있는 값들을 참조하게 설정할 수 있다. 즉,같은 이미지파일로개발계와 운영계의 컨테이너를 구동시킬 수 있다.

 

 

위 내용처럼Secret도 동일한 원리로 사용된다.

 

ConfigMap은 키(key)와 상수(Value)로 구성되어있다. 일반적으로 컨테이너내의 환경변수에 세팅을 할 수 있으며 기밀이 아닌 데이터를 저장하는데 사용하는 API오브젝트이다. 파드는 볼륨에서환경변수, 커멘드-라인 인수 또는 구성파일의 정보를 ConfigMap을 통해 참조할 수 있다.

 

 

Secret

 

Secret도 키(key)와 상수(Value)로 구성되어있다. Secret은 보안과 관련된 값을 저장하는 기능을한다. 패스워드, OAuth 토큰, ssh키와 같은 민감한 정보를 저장하고 관리할때 사용할 수 있으며, 데이터 삽입시Base64 인코딩을 해서 넣어야하는 것이 ConfigMap과의 차이이다.

 

단, pod로 주입이 될때는 자동으로 디코딩이 되어서 대시보드환경에서는 다 보여지게된다.

 

또한, Secret은 보통 메모리에 저장이된다. 메모리에 저장되는것이 보안에는 더 좋지만 Secret을 너무 많이 만들면 메모리 성능에 영향으 줄 수 있다는점도 주의해야한다.

 

 

Env

 

또하나 참고할점으로 ConfigMap, Secret을 환경변수(Env)로 사용할 때는 총 3가지의 방법이 있다. 이는Literal, File, Volume Mount방식이며 다음과 같다.

 

Env(Literal)

상수를 넣어서 ConfigMap, Secret을 구상하는 방법.

 

Env(file)

- 파일이름이 key, 내용이 value인 경우

- 한번주입되면 끝이다. ConfigMap파일의 내용이 변경되어도 pod에 영향을 주지 않는다.

- pod가 삭제되고 재생성될때 영향을 받는다.

- secret의 파일 내용에 명령어로 base64인코딩이 되어있는경우 2번 인코딩 될 수 있으니 주의해야한다.

 

Env(Volume Mount)

- 컨테이너안에 호스트 볼륨을 마운트한다.

- 마운트된 볼륨의 내용을 변경하면 컨테이너안의 Env도 함께 동기화 되는것이 Env(file)과의 차이점이다.

> 참고

반응형

댓글