쿠버네티스에는 컨테이너에 대해 설정 파일, 패스워드 같은 기밀 정보 등을 추가할 수 있다.
컨테이너의 설정 내용은 환경 변수나 파일이 저장되어 있는 영역을 마운트 하여 전달하는 것이 일반적이다.
정적 설정으로 컨테이너의 환경 변수 전달
apiVersion: v1
kind: Pod
metadata:
name: sample-env
labels:
app: sample-app
spec:
containers:
- image: nginx:1.16
name: my-name
env:
- name: MAX_CONNECTION
value: 100
# 생성된 파드의 컨테이너 내의 환경 변수 MAX_CONNECTION을 출력하면 해당 값이 출력된다
$ kubectl exec -it sample-env -- env | grep MAX_CONNECTION
MAX_CONNECTION = 100
시크릿
쿠버네티스에서 MySQL 데이터베이스의 사용자명이나 패스워드 등의 기밀 정보를 전달하고 싶을 때 암호화된 방식을 전달하기 하는 것이 바로 시크릿 리소스이다. 시크릿의 데이터는 키 밸류 값으로 저장이 된다.
시크릿 리소스 타입 목록
종류 | 개요 |
Opaque | 일반적인 범용 용도 |
kubernetes.io/tls | TLS 인증서용 |
kubernetes.io/basic-auth | 기본 인증용 |
kubernetes.io/dockerconfigjson | 도커 레지스트리 인증 정보용 |
kubernetes.io/ssh-auth | SSH 인증 정보용 |
kubernetes.io/service-account-token |
서비스 어카운트 토큰용 |
bootstrap.kubernetes.io/token | Bootstrap 토큰용 |
일반 사용자명과 패스워드 같은 인증 정보 등은 스키마 리스(Schemaless)로 정의 가능한 Opaque 타입을 사용한다.
apiVersion: v1
kind: Secret
metadata:
name: sample-db-auth
type: Opaque
data:
username: cm9vdA==
password: cm9vdHBhc3N3b3Jk
YAML 파일로 저장할 때 data값에는 base64로 인코딩 된 데이터를 넣어줘야 한다. stringData 필드를 사용하면 일반 텍스트로 작성할 수도 있다.
apiVersion: v1
kind: Secret
metadata:
name: sample-db-auth
type: Opaque
StringData:
username: root
password: rootpassword
생성된 시크릿을 컨테이너에서 사용할 경우 크게 환경 변수로의 전달과 볼륨으로 마운트 하는 방식을 사용된다.
apiVersion: v1
kind: Pod
metadata:
name: sample-secret-single-env
spec:
containers:
- image: nginx:1.16
name: secret-container
env:
- name: DB_USERNAME
valueFrom:
secretKeyRef:
name: sample-db-auth
key : username
---
apiVersion: v1
kind: Pod
metadata:
name: sample-secret-multi-env
spec:
containers:
- image: nginx:1.16
name: secret-container2
envFrom:
- secretRef:
name: sample-db-auth
환경변수로 전달될 경우 sample-secret-single-env 파드는 sample-db-auth 시크릿에서 key값이 username인 value 값을 DB_USERNAME으로 받고 sample-secret-multi-env 파드는 시크릿 안에서 정의된 데이터 그대로 컨테이너에서 사용할 수 있다.
apiVersion: v1
kind: Pod
metadata:
name: sample-secret-single-volume
spec:
containers:
- image: nginx:1.16
name: secret-container
volumeMounts:
- name: config-volume
mountPath: /config
volumes:
- name: config-volume
secret:
secretName: sample-db-auth
items:
- key: username
path: username.txt
---
apiVersion: v1
kind: Pod
metadata:
name: sample-secret-multi-volume
spec:
containers:
- image: nginx:1.16
name: secret-container2
volumeMounts:
- name: config-volume
mountPath: /config
volumes:
- name: config-volume
secret:
secretName: sample-db-auth
볼륨으로 마운트 해서 시크릿 키를 가져올 때는 volumeMounts로 마운트 되는 path를 지정하고 volume를 생성해 sample-db-auth의 key 값이 username인 value를 username.txt로 생성한다. sample-secret-multi-volume에서는 path에 key의 이름으로 된 파일이 생성된다.
컨피그맵
컨피그맵은 서정 정보 등을 키-밸류 값으로 저장할 수 있는 데이터 저장 리소스이다. key-value 형식 외에도 nginx.conf나 httpd.conf 같은 설정 파일 자체도 저장할 수 있다.
컨피그맵 생성이나 컨테이너 사용법은 시크릿과 비슷하며 문법적인 차이점만 존재한다.
apiVersion: v1
kind: ConfigMap
metadata:
name: sample-configmap
labels:
app: my-configmap
data:
thread: "16"
conneciton.max: "100"
connection.min: "10"
apiVersion: v1
kind: Pod
metadata:
name: sample-configmap-single-env
spec:
containers:
- image: nginx:1.16
name: configmap-container
env:
- name: CONNECTION_MAX
valueFrom:
configMapKeyRef:
name: sample-configmap
key: connection.max
---
apiVersion: v1
kind: Pod
metadata:
name: sample-configmap-multi-env
spec:
containers:
- image: nginx:1.16
name: configmap-container2
envFrom:
- configMapRef:
name: sample-configmap
apiVersion: v1
kind: Pod
metadata:
name: sample-configmap-single-volume
spec:
containers:
- image: nginx:1.16
name: configmap-container
volumeMounts:
- name: config-volume
mountPath: /config
volumes:
- name: config-volume
configMap:
name: sample-configmap
items:
- key: nginx.conf
path: nginx-sample.conf
---
apiVersion: v1
kind: Pod
metadata:
name: sample-configmap-multi-volume
spec:
containers:
- image: nginx:1.16
name: configmap-container2
volumeMounts:
- name: config-volume
mountPath: /config
volumes:
- name: config-volume
configMap:
name: sample-configmap
'Kubernetes' 카테고리의 다른 글
쿠버네티스 리소스 관리 및 오토 스케일링 (0) | 2022.01.08 |
---|---|
쿠버네티스 볼륨 (0) | 2022.01.02 |
쿠버네티스 인그레스 (0) | 2022.01.01 |
쿠버네티스 서비스 기능 (0) | 2021.12.01 |
쿠버네티스 클러스터 네트워크와 서비스 (0) | 2021.11.16 |