본문 바로가기

인프라/kubernetes

kubernetes 컨피그맵과 시크릿

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

컨테이너에 정보를 넘기기 위해서는 아래 같은 방법들이 존재한다.

 

  • 서버에 환경변수를 통해 전달 하기
  • 이미지 안에 파일 복사 (이미지 안에 넣는것은 하드코딩과 다를바가 없다. 이미지에 접근 할 수 있는 모든 사람은 누구나 볼 수 있는 정보)
  • 컨피그맵 ,(쿠버네티스에서는 설정 데이터를 최상위 레벨의 쿠버네티스 오브젝트에 저장하고 이를 파일 기반 스토이지에 저장할 수 있다.)
  • 시크릿 (개인 암호화 키, 보안을 유지해야 하는 데이터들을 위해 시크릿을 제공한다.)
  •  

애플리케이션에 설정을 전달하는 방법

  • 컨테이너에 명령줄 인수 전달
  • 각 컨테이너를 위한 사용자 정의 환경변수 지정
  • 특수한 유형의 볼륨을 통해 설정

 

컨테이너에 명령줄 인수 전달

1. 도커에서 명령어와 인자 전달

 

ENTRYPOINT 와 CMD 로 명령어 인자 전달 할 수 있다.

- ENTRYPOINT 는 컨테이너가 시작될 때 호출 될 명령어 정의

- CMD 는 ENTRYPOINT에 전달되는 인자

 

2. 쿠버네티스에서 명령어와 인자 전달

 

COMMAND 와 ARGS 를 이용해 전달 할 수 있다.

kind: Pod
spec:
  containers:
  - image: some/image
    command: ["/bin/command"]
    args: ["arg1", "arg2", "arg3"]

 

 

컨테이너의 환경 변수 설정

컨테이너 정의 yaml 에 환경변수를 지정할 수 있다.

 

kind: Pod
spec:
  containers:
  - image: luksa/fortune:env
    env:
    - name: INTERVAL
      value: "30"
    name: html-generator

 

미리 정의해둔 환경변수를 사용할 수 도 있다.

- name: SECOND_VAR
  value: "$(FIRST_VAR)bar"

 

환경변수를 하드코딩 하는 단점

개발망과 운영망을 위해 분리된 파드 정의를 해야한다.

 

 

컨피그맵으로 설정 분리

환경에 따라 다르거나 자주 변경되는 설정 옵션을 어플리케이션 소스 코드와 별도로 유지 시킬 수 있다.

 

컨피그맵 소개

쿠버네티스에서는 설정 옵션을 컨피그맵으로 분리 할 수 있다.

키/값 쌍으로 구성된 맵이다.

파드에 환경변수 또는 볼륨으로 전달 할 수 있다.

 

 

 

다양한 파일에서 결합해서 컨피그맵을 만들 수 있다.

 

컨피그 맵 참조 방법

apiVersion: v1
kind: Pod
meradata:
  name: fortune-env-from-configmap
spec:
  containers:
  - image: luksa/fortune:env
    env:
    - name: INTERVAL
      valueFrom:
        configMapKeyRef:
          name: fortune-config
          value: sleep-interval

 

 

컨피그맵 볼륨을 사용해 컨피그맵 항목을 파일로 노출

 

컨피그맵은 볼륨으로도 컨테이너에 전달할 수 있다

 

volumeMounts 로 마운트할 볼륨명을 등록

 

apiVersion: v1
kind: Pod
metadata:
  name: fortune-configmap-volume
spec:
  containers:
  - image: nginx:alpine
    name: web-server
    volumeMounts:
    ...
    - name: config -- 마운트할 볼륨명
      mountPath: /etc/nginx/conf.d -- 컨피그맵 볼륨을 마운트하는 위치
      readOnly: true
  volumes:
  ...
  - name: config -- pod 내에서 사용할 볼륨명
    configMap:
      name: fortune-config -- 참조할 컨피그맵 이름

 

볼륨에 특정 컨피그맵 항목 노출

volumes:
- name: config -- pod 내에서 사용할 볼륨명
  configMap:
    name: fortune-config -- 참조할 컨피그맵 이름
    items:
    - key: my-nginx-config.conf -- 컨피그맵에서 my-nginx-config.conf 만 사용
      path: gzip.conf -- 마운트시 사용할 파일 명

 

 

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

보안을 유지 할 필요가 없는 데이터는 컨피그맵에 넣고 보안이 필요한 데이터를 담을때는

시크릿을 사용한다.

 

시크릿 소개

키/값으로 구성되어 있고 환경변수와 볼륨으로 전달 가능하다.

시크릿은 보안이 중요한 데이터라 항상 메모리에만 올라가져있고 디스크에는 써지지 않는다.

 

 

'인프라 > kubernetes' 카테고리의 다른 글

kubernetes 스테이트풀셋  (0) 2021.08.25
kubernetes 디플로이먼트  (0) 2021.08.25
kubernetes 볼륨  (0) 2021.08.24
kubernetes 서비스  (0) 2021.08.24
kubernetes 레플리케이션과 그밖의 컨트롤러  (0) 2021.08.23