ConfigMaps & Secrets

OneDayDev·2023년 1월 28일
0

K8s

목록 보기
7/12

ConfigMaps

  • 컨테이너에 필요한 환경 설정을 컨테이너와 분리해서 제공하는 기능
  • 사용 예시로, 개발과 배포 환경 차이를 컨피그맵을 통해 다른 설정으로 컨테이너를 실행할 수 있다.
  • 키-값 형식
  • v1.19부터 컨피그맵 정의에 immutable 필드를 추가하여 변경할 수 없는 컨피그맵을 만들 수 있다
  • 설정한 구성 전부, 부분만 또는 파일로 사용할 수 있다.

컨피그맵 구성 예시

apiVersion: v1
kind: ConfigMap
metadata:
  name: game-demo
data: # spec이 아닌 data나 binaryData 필드를 사용한다
  # 속성과 비슷한 키; 각 키는 간단한 값으로 매핑됨
  player_initial_lives: "3"
  ui_properties_file_name: "user-interface.properties"

  # 파일과 비슷한 키
  game.properties: |
    enemy.types=aliens,monsters
    player.maximum-lives=5    
  user-interface.properties: |
    color.good=purple
    color.bad=yellow
    allow.textmode=true  

파드에서 컨피그맵 사용 예시

apiVersion: v1
kind: Pod
metadata:
  name: configmap-demo-pod
spec:
  containers:
    - name: demo
      image: alpine
      command: ["sleep", "3600"]
      env:
        # 환경 변수 정의
        - name: PLAYER_INITIAL_LIVES # 참고로 여기서는 컨피그맵의 키 이름과
                                     # 대소문자가 다르다.
          valueFrom:
            configMapKeyRef:
              name: game-demo           # 이 값의 컨피그맵.
              key: player_initial_lives # 가져올 키.
        - name: UI_PROPERTIES_FILE_NAME
          valueFrom:
            configMapKeyRef:
              name: game-demo
              key: ui_properties_file_name
      volumeMounts:
      - name: config
        mountPath: "/config"
        readOnly: true
  volumes:
    # 파드 레벨에서 볼륨을 설정한 다음, 해당 파드 내의 컨테이너에 마운트한다.
    - name: config
      configMap:
        # 마운트하려는 컨피그맵의 이름을 제공한다.
        name: game-demo
        # 컨피그맵에서 파일로 생성할 키 배열
        items:
        - key: "game.properties"
          path: "game.properties"
        - key: "user-interface.properties"
          path: "user-interface.properties"

Secrets

  • 민감한 정보를 저장하는 용도로 사용한다.
  • 컨테이너 안에 저장하지 않고 별도로 보관했다가 실제 파드가 실행될 때 컨테이너에 제공한다.

주의할 점

쿠버네티스 시크릿은 기본적으로 API 서버의 기본 데이터 저장소(etcd)에 암호화되지 않은 상태로 저장된다. API 접근(access) 권한이 있는 모든 사용자 또는 etcd에 접근할 수 있는 모든 사용자는 시크릿을 조회하거나 수정할 수 있다. 또한 네임스페이스에서 파드를 생성할 권한이 있는 사람은 누구나 해당 접근을 사용하여 해당 네임스페이스의 모든 시크릿을 읽을 수 있다. 여기에는 디플로이먼트 생성 기능과 같은 간접 접근이 포함된다.

시크릿을 안전하게 사용하려면 최소한 다음의 단계를 따르는 것이 좋다.

  1. 시크릿에 대해 저장된 데이터 암호화(Encryption at Rest)를 활성화한다.
  2. 시크릿 읽기 및 쓰기를 제한하는 RBAC 규칙을 활성화 또는 구성한다. 파드 생성 권한을 가진 사람은 암묵적으로 시크릿에 접근할 수 있음에 주의한다.
  3. 적절한 경우, RBAC과 같은 메커니즘을 사용하여 새로운 시크릿을 생성하거나 기존 시크릿을 대체할 수 있는 주체(principal)들을 제한한다.

Secrets의 사용

  • 하나 이상의 컨테이너에 마운트된 볼륨 내의 파일로써 사용.
  • 컨테이너 환경 변수로써 사용.
  • 파드의 이미지를 가져올 때 kubelet에 의해 사용.

꼭 민감 정보 저장 용도로 secrets을 사용할 필요는 없다

참조 : 사용 대체

시크릿 생성하기

시크릿 생성에는 다음과 같은 방법이 있다.

시크릿 편집하기

kubectl edit secrets mysecret를 사용해 편집한다.

시크릿 사용하기

마치며

이번엔 Configmap과 secret에 관해 작성해보았다.
컨테이너를 구성할 때 유용하게 사용하길 바라고, 링크 걸어둔 자료는 꼼꼼히 확인해보길 바란다.
다음 추천 자료를 남기며 마친다.

추천 자료 : Configuration Best Practices, organize-cluster-access-kubeconfig, 시크릿 사용 사례 ,시크릿 타입
참고 : Configuration

profile
안녕하세요.

0개의 댓글