Search
Duplicate
📒

[Kubernetes Infra] 04. ConfigMap, Secret

상태
완료
수업
Kubernetes Infra
주제
연관 노트
3 more properties
참고

애플리케이션 환경변수 & 생명주기 관리

NOTE
쿠버네티스에서 애플리케이션의 환경변수를 어떻게 정의하는가?
쿠버네티스에서는 3가지 방법이 존재한다.
apiVersion: v1 kind: Pod metadata: name: simple-webapp-color spec: containers: - name: simple-webapp-color image: simple-webapp-color ports: - containerPort: 8080 # 아래 env 부분에서 환경 변수를 설정한다. env: - name: APP_COLOR # 컨테이너가 사용할 수 있는 환경 변수의 이름 value: pink # 환경 변수의 값
YAML
복사
가장 기본적인 방법 (스펙정의에 환경변수도 같이 설정!)
위의 방식은 가장 기본적인 방식인 Key-Value 방식이다.
하지만 환경변수는 상황에 따라서 환경변수의 값만 다르고 내용은 동일한 YAML 파일을 여러개 사용하는 경우가 발생한다.
이 경우, 파드 정의 YAML 파일에서 환경변수만을 분리해서 관리하면 더 수월해진다!

ConfigMap

NOTE
ConfigMap ⇒ Pod정의 YAML 파일 밖에서 환경변수를 관리하는 방식!
ConfigMap을 사용하지 않는 경우 (환경설정별로 이미지 생성)
ConfigMap을 사용하는 경우 (하나의 이미지로 환경설정 따로관리 가능)
# Configmap 생성 - 명령형 kubectl create configmap <config-name> --from-literal=<key>=<value> kubectl create configmap app-config --from-literal=APP_COLOR=blue --from-iteral=APP_MOD=prod # ConfigMap 생성 - properties파일 활용 kubectl create --from-file=<path-to-file> kubectl create configmap app-config --from-file=app_config.properties # Configmap 생성 - 선언형 kubectl apply -f config-map.yaml # ConfigMap 조회 kubectl get configMap
Bash
복사
apiVersion: v1 kind: ConfigMap # kind는 ConfigMap으로 설정한다. metadata: name: app-config data: # 아래 부분에 ConfigMap 내용을 적어준다. APP_COLOR: blue APP_MODE: prod
YAML
복사
config-map.yaml

ConfigMap 주입

NOTE
ConfigMap을 생성했다면, 생성된 Configmap을 Pod에 주입해야한다!
apiVersion: v1 kind: ConfigMap metadata: name: app-config data: APP_COLOR: blue APP_MODE: prod --- apiVersion: v1 kind: Pod metadata: name: nginx labels: app: myapp spec: containers: - name: nginx image: nginx port: 80 envFrom: - configMapRef: name: app-config
YAML
복사
app-config(ConfigMap)을 nginx(Pod)에 주입한다!
# 기본적인 주입 (ConfigMap 이름) envFrom: - configMapRef: name: app-config # ConfigMap 정의 YAML 파일의 metadata 이름 # 하나의 키만 가져온다 (ConfigMap 이름으로 가져오고, 특정값 지정) env: - name: APP_COLOR valueFrom: configMapKeyRef: name: app-config # ConfigMap 정의 YAML 파일의 metadata 이름을 적는다. key: APP_COLOR # 가져오고자 하는 키 값을 입력한다. # 볼륨에서 전체 데이터를 파일로 가져오는 경우 volumes: - name: app-config-volume configmap: name: app-config # ConfigMap 정의 YAMl파일의 metadata의 이름
YAML
복사
주입하는 방법들
apiVersion: v1 kind: ConfigMap metadata: name: game-demo data: # key:value 속성 player_initial_lives: "3" ui_properties_file_name: "user-interface.properties" # file 속성 game.properties: | enemy.types=aliens,monsters player.maximum-lives=5 user-interface.properties: | color.good=purple color.bad=yellow allow.textmode=true
YAML
복사
apiVersion: v1 kind: Pod metadata: name: configmap-demo-pod spec: containers: - name: demo image: alpine command: ["sleep", "3600"] env: - name: PLAYER_INITIAL_LIVES # cm에 정의한 변수를 사용한다. valueFrom: configMapKeyRef: name: game-demo key: player_initial_lives - name: UI_PROPERTIES_FILE_NAME # cm에 정의한 변수를 사용한다. valueFrom: configMapKeyRef: name: game-demo key: ui_properties_file_name volumeMounts: - name: config mountPath: "/config" readOnly: true volumes: - name: config # config 이름으로 설정 configMap: name: game-demo # cm이름 맞추기 items: - key: "game.properties" path: "game.properties" - key: "user-interface.properties" path: "user-interface.properties"
YAML
복사

Secret

NOTE
ConfigMap과 유사하지만 보안 정보를 관리하기 위해 Secret을 별도로 제공한다!
base64로 저장된다는 점 말고는 ConfigMap과 다를게 없음
# ConfigMap apiVersion: v1 kind: ConfigMap metadata: name: app-config data: DB_Host: mysql DB_User: root DB_Password: passwrd --- # Secret apiVersion: v1 kind: Secret metadata: name: app-secret data: DB_Host: bXlzcWw= DB_User: cm9vdA== DB_Password: cGFzd3Jk
YAML
복사
Secret는 사람이 알아볼수 없는 해시형태로 표현되어있다.

Secret 생성하기

NOTE
# 시크릿 생성 (명령형) k create secret generic [시크릿 이름] --from-literal []=[] k create secret generic app-secret \ --from-literal=DB_Host=mysql \ --from-literal=DB_User=root \ --from-literal=DB_Password=passwrd # 파일사용 k create secret generic [시크릿 이름] --from-file [파일경로] k create secret generic app-secret --from-file-app_secret.properties # 시크릿 생성 (선언형) k apply -f secret-data.yaml
YAML
복사
apiVersion: v1 kind: Secret metadata: name: app-secret data: DB_Host: host DB_User: user DB_Password: 1234
YAML
복사
secret-data.yaml
echo -n "암호화 값" | base64 # 암호값 echo -n "암호화 값" | base64 --decode # 복호화값
Bash
복사
암호화된 값을 확인하는 방법

Secret 주입하기

NOTE
apiVersion: v1 kind: Pod metadata: name: simple-webapp-color labels: app: myapp spec: containers: - name: simple-webapp-color image: simple-webapp-color ports: - containerPort: 8080 envFrom: - secretRef: name: app-secret --- apiVersion: v1 kind: Secret metadata: name: app-secret data: DB_HOST: ~~ DB_USER: ~~ DB_Password: ~~
YAML
복사
pod-definition- app-secret 주입
# 기본적인 주입 envFrom: - secretMapRef: name: app-secret # Secret 정의 YAML 파일에 설정한 metadata 이름을 적는다. # 또는 하나의 키 값만 가져오는 경우 env: - name: DB_Password valueFrom: SecretKeyRef: name: app-secret # Secret 정의 YAML 파일에 설정한 metadata 이름을 적는다. key: DB_Password # 가져오고자 하는 키 값을 입력한다. # 볼륨에서 전체 데이터를 파일로 가져옴 volumes: - name: app-secret-volime secret: name: app-secert # Secret 정의 YAML 파일에 설정한 metadata 이름을 적는다.
YAML
복사
app-secret.yaml