컨테이너화된 애플리케이션 설정
컨테이너에 정보를 넘기기 위해서는 아래 같은 방법들이 존재한다.
- 서버에 환경변수를 통해 전달 하기
- 이미지 안에 파일 복사 (이미지 안에 넣는것은 하드코딩과 다를바가 없다. 이미지에 접근 할 수 있는 모든 사람은 누구나 볼 수 있는 정보)
- 컨피그맵 ,(쿠버네티스에서는 설정 데이터를 최상위 레벨의 쿠버네티스 오브젝트에 저장하고 이를 파일 기반 스토이지에 저장할 수 있다.)
- 시크릿 (개인 암호화 키, 보안을 유지해야 하는 데이터들을 위해 시크릿을 제공한다.)
애플리케이션에 설정을 전달하는 방법
- 컨테이너에 명령줄 인수 전달
- 각 컨테이너를 위한 사용자 정의 환경변수 지정
- 특수한 유형의 볼륨을 통해 설정
컨테이너에 명령줄 인수 전달
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 |