콤퓨우터/필기: KodeKloud CKA 강의

100-104. Environment Variables and Configure Secrets in Application

파란화면 2024. 5. 17. 00:27
반응형

환경변수를 줄 수 있다.

spec:
  containers:
  - name: simple-webapp
    image: simple-webapp
  env:
  - name: APP_COLOR
    value: pink
  - name: JAVA_HOME
    value: /usr/

ConfigMaps

하지만 Pod 설정파일에 모든 환경변수를 때려박는다는것은 별로 가독성에 좋지 않을 수 있다.

ConfigMaps는 쿠버에서 K-V 페어의 설정데이터를 저장하는 오브젝트이다(아마).

Imperative 방식 생성

kubectl create configmap conf-map-name --from-literal=APP_COLOR=pink --from-literal=JAVA_HOME=/usr/

혹은 그냥 다음과 같은 파일을 만들고, kubectl create configmap conf-map-name --from-file=config-file-name.properties 해주는 편이 빠를 수도 있다.

APP_COLOR: pink
JAVA_HOME: /usr/

Declarative 방식 생성

apiVersion: v1
kind: ConfigMap
metadata:
  name: conf-map-name
data:
  APP_COLOR: pink
  JAVA_HOME: /usr/

한 뒤에 kubectl create -f 하면 된다.

Pod Definition에 ConfigMap으로 환경변수 주기

spec:
  containers:
  - name: simple-webapp
    image: simple-webapp
  envFrom:
  - configMapRef:
    name: conf-map-name

Secret

기본값으로는 그냥 Base64된 텍스트를 저장하는 것이기 때문에, 이름과는 달리 사실 별로 Secret하지는 않다.

Etcd에도 그냥 Base64된 텍스트 형태로 그대로 저장되고, 암호화가 안 된다! encryption at rest configuration을 따로 해 줘야 암호화가 된다.

생성하는 방법은 ConfigMap과 매우 비슷하다. 다만 실제로 사용할 때에는, SCM(Git) 등에 Secret 설정 파일을 올리지 않도록 주의하여야 한다.

Imperative 방식 생성

kubectl create secret secret-name --from-literal=DB_Host=localhost --from-literal=DB_Password=1q2w3e4r!

혹은 그냥 다음과 같은 파일을 만들고, kubectl create secret secret-name --from-file=config-file-name.properties 해주는 편이 빠를 수도 있다.

DB_Host: localhost
DB_Password: 1q2w3e4r!

Declarative 방식 생성

우선 텍스트를 echo -n 'text' | base64 로 base64 인코딩한다.
그 다음

apiVersion: v1
kind: Secret
metadata:
  name: secret-name
data:
  DB_Host: bG9jYWxob3N0
  DB_Password: MXEydzNlNHIh

한 뒤에 kubectl create -f 하면 된다.

Secret의 사용

kubectl get secrets
kubectl describe secrets
kubectl get secret secret-name -o yaml

Pod Definition에서 Secret 사용하기

방법 1] Secret 전체를 Import

spec:
  containers:
  - name: simple-webapp
    image: simple-webapp
  envFrom:
  - secretRef:
    name: secret-name

방법 2] 특정 Secret variable만 가져오는 경우

spec:
  containers:
  - name: simple-webapp
    image: simple-webapp
  envFrom:
  - secretRef:
    name: secret-name
    key: DB_Password

방법 3] Volume Mount

각각의 Secret 키를 파일명으로 해서, Value를 내용으로 가진 가상의 텍스트 파일이 들어 있는 디렉토리를 마운트한다.

spec:
  containers:
  - name: simple-webapp
    image: simple-webapp
volumes:
- name: app-secret-volume
  secret:
     secretName: secret-name
apiVersion: v1
kind: Pod
metadata:
  name: app
  namespace: elastic-stack
spec:
  volumes:
  - name: log-volume
    hostPath:
      path: /var/log/webapp
  containers:
  - name: sidecar
    image: kodekloud/filebeat-configured
    volumeMounts:
    - name: log-volume
      mountPath: /var/log/event-simulator/
  - name: app
    image: kodekloud/event-simulator
    volumeMounts:
    - name: log-volume
      mountPath: /log
반응형