[K8s in Action] 7. 컨피그맵과 시크릿: 애플리케이션 설정

Sangmin Yoon·2021년 6월 30일
0

Kubernetes in Action

목록 보기
7/8
post-thumbnail

거의 모든 애플리케이션은 빌드된 애플리케이션 자체에 포함되지 말아야 하는 설정(배포된 인스턴스별로 다른 세팅, 외부 시스템 액세스를 위한 자격증명 등)이 필요하다. K8s에서 이런 설정 옵션을 어떻게 전달하는지 알아보자.

1. 컨테이너화된 애플리케이션 설정

  • ConfigMap을 사용해 설정 데이터를 저장할지 여부에 관계없이 다음 방법을 통해 애플리케이션을 구성할 수 있다.
    - 컨테이너에 명령줄 인수 전달
    - 각 컨테이너를 위한 사용자 정의 환경변수 지정
    - 특수한 유형의 볼륨을 통해 설정 파일을 컨테이너에 마운트
  • 이 중 어떤 것에는 보안이 필요한 정보가 있을 수 있다. Secret이 필요한 이유다.

2. 컨테이너에 명령줄 인자 전달

1) 도커에서 명령어와 인자 정의

  • ENTRYPOINT와 CMD
    - ENTRYPOINT는 컨테어너가 시작될 때 호출될 명령어를 정의하고, CMD는 ENTRYPOINT에 전달되는 인자를 정의한다.

2) 쿠버네티스에서 명령과 인자 재정의

  • ENTRYPOINT -> command / CMD -> args

3. 컨테이너의 환경변수 설정

  • 환경변수는 파드 레벨이 아닌 컨테이너 정의 안에 설정해야 한다.
  • 하드코딩된 환경변수는 여러 파드 정의가 필요하다는 것을 의미한다. value 필드 대신 valueFrom을 쓰면 환경변숫값의 원본 소스로 사용할 수 있다.

4. 컨피그맵으로 설정 분리

1) ConfigMap 소개

  • K8s에서는 설정 옵션을 ConfigMap으로 분리할 수 있다. Key-Value 쌍으로 구성되어 있다.
  • 서로 다른 환경에서 동일한 이름을 가진 두 개의 다른 ConfigMap을 사용할 수 있다.

2) ConfigMap 생성

3) ConfigMap 항목을 환경변수로 컨테이너에 전달

4) ConfigMap의 모든 항목을 한 번에 환경변수로 전달

5) ConfigMap 항목을 명령줄 인자로 전달

5. 시크릿으로 민감한 데이터를 컨테이너에 전달

1) Secret 소개

  • 컨피그맵과 매우 비슷하다. K8s는 시크릿에 접근해야 하는 파드가 실행되고 있는 노드에만 개별 시크릿을 배포해 안전하게 유지한다.
  • 또한 노드 자체적으로 시크릿을 항상 메모리에만 저장되게 하고 물리 저장소에 기록되지 않도록 한다.

2) 기본 토큰 시크릿 소개

  • 모든 파드에는 secret 볼륨이 자동으로 연결되어 있다.

0개의 댓글