☸️ Kubernetes

[kubernetes] ConfigMap과 Security

loose 2023. 12. 4. 16:19
반응형

ToDo: 값 세팅 통일 + 필요없는 줄 삭제,.

ConfigMap

ConfigMap은 어플리케이션에 환경 변수 설정을 도와주는 리소스다.

우선 ConfigMap을 만들기 전에 Pod에 환경변수를 추가해보자.

Pod에 직접 설정하기 

환경 변수를 설정하기 위해서는 ConfigMap 없이도 아래와 같이 사용 가능하다.

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: "2023-12-04T06:54:56Z"
  labels:
    name: webapp-color
  name: webapp-color
  namespace: default
  resourceVersion: "752"
  uid: edaafcc4-a237-48b8-bb77-f57ac44dd751
spec:
  containers:
  - env:
    - name: APP_COLOR
      value: pink

 

ConfigMap 활용하기

Pod에 직접 설정하지 않고 ConfigMap을 이용해서 값을 설정할 수 있다.

apiVersion: v1
data:
  DB_HOST: SQL01.example.com
  DB_NAME: SQL01
  DB_PORT: "3306"
kind: ConfigMap
metadata:
  creationTimestamp: "2023-12-04T06:58:14Z"
  name: db-config
  namespace: default
  resourceVersion: "832"
  uid: f63e655f-63cf-40c9-b3d0-501fe0b49a7e

이제 만들어진 ConfigMap을 Pod에서 가져와서 사용해보자.

ConfigMap에서 valueFrom으로 값 1개만 가져오기

apiVersion: v1
kind: Pod
metadata:
  name: dapi-test-pod
spec:
  containers:
    - name: test-container
      image: registry.k8s.io/busybox
      command: [ "/bin/echo", "$(SPECIAL_LEVEL_KEY) $(SPECIAL_TYPE_KEY)" ]
      env:
        - name: SPECIAL_LEVEL_KEY
          valueFrom:
            configMapKeyRef:
              name: special-config
              key: SPECIAL_LEVEL

ConfigMap에서 envFrom으로 값 전체 가져오기

valueFrom과 envFrom은 양식이 꽤 비슷하면서도 달라서 작성 시 유의해야한다.

apiVersion: v1
kind: Pod
metadata:
  name: dapi-test-pod
spec:
  containers:
    - name: test-container
      image: registry.k8s.io/busybox
      command: [ "/bin/sh", "-c", "env" ]
      envFrom:
      - configMapRef:
          name: special-config

 

Spring Application과 결합하기

만약에 Spring Application에서 k8s 환경 변수를 추가하게 되면 application.yaml or properties 파일에 추가되는 형태로 동작한다.

추가되는 형태 말고도 Spring Application에서 application.yaml 파일을 아래와 같이 대체하는 방법도 존재한다.

Case 1. application.yaml 대체

kind: ConfigMap
apiVersion: v1
metadata:
  name: demo
data:
  application.yaml: |-
    pool:
      size:
        core: 1
        max:16

 

Case 2. 특정 값 overwrite

kind: ConfigMap
apiVersion: v1
metadata:
  name: demo
data:
  pool.size.core: 1
  pool.size.max: 16

Case 3. 개발 환경 별로 다른 상태값 부여하기

kind: ConfigMap
apiVersion: v1
metadata:
  name: demo
data:
  application.yml: |-
    greeting:
      message: Say Hello to the World
    farewell:
      message: Say Goodbye
    ---
    spring:
      profiles: development
    greeting:
      message: Say Hello to the Developers
    farewell:
      message: Say Goodbye to the Developers
    ---
    spring:
      profiles: production
    greeting:
      message: Say Hello to the Ops

 

ConfigMap 생성하기

k create configmap webapp-config-map --from-literal=APP_COLOR=darkblue --from-literal=APP_OTHER=disregard

 

Secret 생성하기

configMap을 Secret으로도 대체할 수 있다.

(참고로 가이드문서에서 secretRef를 사용한 것을 보려면 URI에 ko를 추가해야한다)

k create secret generic db-secret --from-literal=DB_Host=sql01 --from-literal=DB_User=root --from-literal=DB_Password=password123

 

apiVersion: v1
kind: Pod 
metadata:
  labels:
    name: webapp-pod
  name: webapp-pod
  namespace: default
spec:
  containers:
  - image: kodekloud/simple-webapp-mysql
    imagePullPolicy: Always
    name: webapp
    envFrom:
    - secretRef:
        name: db-secret
728x90