해당 문서의 쿠버네티스 버전: v1.30

Kubernetes v1.30 문서는 더 이상 적극적으로 관리되지 않음. 현재 보고있는 문서는 정적 스냅샷임. 최신 문서를 위해서는, 다음을 참고. 최신 버전.

kustomize를 사용하여 시크릿(Secret) 관리

kustomization.yaml 파일을 사용하여 시크릿 오브젝트 생성.

kubectl은 시크릿과 컨피그맵(ConfigMap)을 관리하기위해 Kustomize를 이용한 쿠버네티스 오브젝트의 선언형 관리를 지원한다. Kustomize를 이용하여 리소스 생성기를 생성한다. 이는 kubectl을 사용하여 API 서버에 적용할 수 있는 시크릿을 생성한다.

시작하기 전에

쿠버네티스 클러스터가 필요하고, kubectl 커맨드-라인 툴이 클러스터와 통신할 수 있도록 설정되어 있어야 한다. 이 튜토리얼은 컨트롤 플레인 호스트가 아닌 노드가 적어도 2개 포함된 클러스터에서 실행하는 것을 추천한다. 만약, 아직 클러스터를 가지고 있지 않다면, minikube를 사용해서 생성하거나 다음 쿠버네티스 플레이그라운드 중 하나를 사용할 수 있다.

시크릿 생성

kustomization.yaml 파일에 다른 기존 파일, .env 파일 및 리터럴(literal) 값들을 참조하는 secretGenerator를 정의하여 시크릿을 생성할 수 있다. 예를 들어 다음 명령어는 사용자 이름 admin과 비밀번호 1f2d1e2e67df 를 위해 Kustomization 파일을 생성한다.

Kustomization 파일 생성


secretGenerator:
- name: database-creds
  literals:
  - username=admin
  - password=1f2d1e2e67df

  1. base64로 인코딩된 자격 증명의 값들을 파일에 저장한다.

    echo -n 'admin' > ./username.txt
    echo -n '1f2d1e2e67df' > ./password.txt
    

    -n 플래그는 파일의 끝에 개행 문자가 존재하지 않는 것을 보장한다.

  2. kustomization.yaml 파일 생성:

    secretGenerator:
    - name: database-creds
      files:
      - username.txt
      - password.txt
    

kustomization.yaml 파일에 .env 파일을 명시하여 시크릿 생성자를 정의할 수도 있다. 예를 들어 다음 kustomization.yaml 파일은 .env.secret 파일에서 데이터를 가져온다.

secretGenerator:
- name: db-user-pass
  envs:
  - .env.secret

모든 경우에 대해, 값을 base64로 인코딩하지 않아도 된다. YAML 파일의 이름은 무조건 kustomization.yaml 또는 kustomization.yml 이어야 한다.

kustomization 파일 적용

시크릿을 생성하기 위해서 kustomization 파일을 포함하는 디렉토리에 적용한다.

kubectl apply -k <directory-path>

출력은 다음과 유사하다.

secret/database-creds-5hdh7hhgfk created

시크릿이 생성되면 시크릿 데이터를 해싱하고 이름에 해시 값을 추가하여 시크릿 이름이 생성된다. 이렇게 함으로써 데이터가 수정될 때마다 시크릿이 새롭게 생성된다.

시크릿이 생성되었는지 확인하고 시크릿 데이터를 디코딩하려면, 다음을 참조한다. kubectl을 사용한 시크릿 관리.

시크릿 편집

  1. kustomization.yaml 파일에서 password와 같은 데이터를 수정한다.

  2. kustomization 파일을 포함하는 디렉토리에 적용한다:

    kubectl apply -k <directory-path>
    

    출력은 다음과 유사하다.

    secret/db-user-pass-6f24b56cc8 created
    

편집된 시크릿은 존재하는 Secret 오브젝트를 업데이트하는 것이 아니라 새로운 Secret 오브젝트로 생성된다. 따라서 파드에서 시크릿에 대한 참조를 업데이트해야 한다.

삭제

시크릿을 삭제하려면 kubectl을 사용한다.

kubectl delete secret db-user-pass

다음 내용