[Kubernetes] 컨피그맵(Configmap), 시크릿(Secret): 설정값을 포드에 전달

연수·2021년 11월 9일
0

kubernetes

목록 보기
10/15

쿠버네티스는 YAML 파일과 설정값을 분리할 수 있는 컨피그맵(Configmap)시크릿(Secret)이라는 오브젝트를 제공한다. 컨피그맵에는 설정값을, 시크릿에는 노출되어서는 안 되는 비밀값을 저장할 수 있다.

컨피그맵을 사용하지 않으면 환경에 따라 YAML 파일에 환경 변수를 각각 정의해 두 개의 YAML 파일을 만들어야 한다.

하지만 컨피그맵을 사용하면 1개의 YAML 파일만을 사용하여 환경에 따라 다른 컨피그맵을 생성해 사용하면 된다. 즉, 환경 변수 설정값까지 쿠버네티스 오브젝트에서 관리할 수 있으며, 이러한 설정값 또한 YAML 파일로 포드와 함께 배포할 수 있다.

따라서 애플리케이션과 설정값을 별도로 관리할 수 있다는 장점이 있다.

 

🗺️ 컨피그맵 (Configmap)

일반적인 설정값을 담아 저장할 수 있는 쿠버네티스 오브젝트

네임스페이스 별로 컨피그맵이 존재한다.

👉 컨피그맵을 포드에서 사용하는 방법

  • 컨피그맵의 값을 컨테이너의 환경 변수로 사용
    • 컨피그맵에 저장된 키-값 데이터가 컨테이너의 환경 변수의 키-값으로서 그대로 사용된다.
  • 컨피그맵의 값을 포드 컨테이너 내부의 특정 파일로 마운트해 사용
    • 애플리케이션이 nginx.conf 등의 파일을 통해 설정값을 읽어 들인다면 컨피그맵의 데이터를 포드 내부의 파일로 마운트해 사용이 가능하다.
  • 파일로부터 컨피그맵 생성
    • conf 파일의 내용을 아예 통째로 컨피그맵에 저장한 뒤 이를 볼륨 파일로 포드 내부에 제공
  • YAML 파일로 컨피그맵 정의
    • 컨피그맵의 키-값 데이터가 너무 많아지면 YAML 파일이 불필요하게 길어진다는 단점이 존재

 

🤫 시크릿 (Secret)

SSH 키, 비밀번호 등과 같이 민감한 정보를 저장하기 위한 용도

네임스페이스에 종속되는 오브젝트

컨피그맵과 사용 방법이 매우 비슷하지만, 민감한 정보를 저장하기 위해 좀 더 세분화된 사용 방법을 제공한다.

시크릿에 값을 저장할 때, 쿠버네티스가 기본적으로 base64로 값을 인코딩한다. 따라서 YAML 파일로부터 시크릿을 생성할 때에도 데이터의 값에 base64로 인코딩이 된 문자열을 사용해야 한다.

시크릿은 데이터의 사용 목적에 따라 몇 가지 종류로 나뉜다.

👉 Opaque 타입의 시크릿

    별도의 종류를 명시하지 않으면 자동으로 설정되는 타입

    일반적인 목적의 시크릿 (generic)

👉 docker-registry 타입의 시크릿

    비공개 이미지 레지스트리에 접근할 때 사용하는 인증 설정 시크릿

    디플로이먼트 또는 포드 등에서 사설 레지스트리로부터 이미지를 받아올 때 사용할 수 있다.

👉 tls 타입의 시크릿

    TLS 연결에 사용되는 공개키, 비밀키 등을 쿠버네티스에 자체적으로 저장할 수 있도록 tls 타입을 지원

    포드 내부의 애플리케이션이 보안 연결을 위해 인증서나 비밀키 등을 가져와야 할 때 시크릿의 값을 포드에 제공하는 방식으로 사용 가능

✔️ Kustomize

    YAML 파일의 속성을 별도로 정의해 재사용하거나 여러 YAML 파일을 하나로 묶는 등 다양한 용도로 사용할 수 있는 기능.

    시크릿이나 컨피그맵을 배포하기 위해 YAML 파일을 작성할 때, 데이터를 YAML 파일로부터 분리하는 용도로 사용이 가능하다. (YAML 파일과 데이터가 분리되지 않으면 데이터를 관리하기에 불편하기 때문)

 

[출처] 시작하세요! 도커/쿠버네티스 (용찬호 지음)

profile
DCDI

0개의 댓글