2-10. ConfigMap과 Secret

황인권·2025년 2월 10일

Kubernetes

목록 보기
17/37

여러가지 설정 정보들을 기록해두는 공간

  • 여러 종류의 Pod에 동일하게 적용해야 하는 환경 변수가 있다면?
    • 모든 오브젝트에 일일이 똑같은 환경 변수를 입력하기란 상당히 번거롭다.
  • ConfigMap 또는 Secret을 이용하면, 쿠버네티스에 이런 정보들을 넣어놓고 여러 오브젝트가 이 정보를 공유해서 가져올 수 있도록 할 수 있다.

ConfigMa과 Secret의 차이

  • 두 오브젝트 모두 사용되는 원리는 같지만, 보안상 중요하게 다뤄져야할 정보들과 노출되어도 특별히 상관없는 정보를 구분해서 관리하기 위해 쿠버네티스는 두 가지 종류의 오브젝트를 지원한다.

ConfigMap 만들어서 사용해보기

Q. ConfigMap은 어느 타이밍에 적용되는건가?
A. ConfigMap은 Pod가 시작될 때 적용. 다시 말해, ConfigMap 오브젝트의 내용을 바꾸더라도 바꾸기 전 이미 가동중인 Pod는 재시작까지 변경 내용이 반영되지 않는다.

  • 우선, 실습하기 위해 환경 변수를 활용하는 이미지를 레포지토리에 올려놓자.
FROM --platform=linux/amd64 nginx:1.27.0

ENV TITLE NONE

CMD ["/bin/sh", "-c", "echo \"Hello, $TITLE\" > /usr/share/nginx/html/index.html && nginx -g 'daemon off;'"]


pod를 생성하고 8080포트에 연결

  • ConfigMap 오브젝트를 아래와 같이 정의하고 apply 시키기
apiVersion: v1
kind: ConfigMap
metadata:
  name: sample-configmap
data:
  PUBLIC_NAME: KUBERNETES

  • Pod에서 다음과 같이 불러와 사용할 수 있다.
apiVersion: v1
kind: Pod
metadata:
  name: sample-pod
  namespace: default
spec:
  containers:
  - name: nginx
    image: asia-northeast3-docker.pkg.dev/responsive-task-450008-m7/sample-app/configmap-sample:1.0.0
    env:
    - name: TITLE
      valueFrom:
        configMapKeyRef:
          name: sample-configmap
          key: PUBLIC_NAME
    ports:
    - containerPort: 80

Secret 만들어서 사용해보기

Secret도 결국 복호화가 가능한 Base64 형태로 저장되기 때문에, Secret에 민감정보를 저장한다고 알아서 보안처리가 되는 것은 아니다.
중요한 정보는 유출되지 않도록 운영하고 개발하는 과정에서 항상 노력해야한다.

  • Secret도 ConfigMap과 비슷한 형태로 정의해서 사용
    • Secret에 값을 입력할 때는 Base64로 인코딩 한 뒤 입력해야한다.
apiVersion: v1
kind: Secret
metadata:
  name: sample-secret
data:
  SECRET_NAME: c2VjcmV0IOyYiOygnCDsl7DsirU=


  • Pod에는 다음과 같이 적용해서 사용
apiVersion: v1
kind: Pod
metadata:
  name: sample-pod
  namespace: default
spec:
  containers:
  - name: nginx
    image: asia-northeast3-docker.pkg.dev/responsive-task-450008-m7/sample-app/configmap-sample:1.0.0
    env:
    - name: TITLE
      valueFrom:
        secretKeyRef:
          name: sample-secret
          key: SECRET_NAME
    ports:
    - containerPort: 80


profile
inkwon Hwang

0개의 댓글