Kustomize로 시크릿(Secret) 관리하기
Kustomize로 시크릿(Secret) 관리하기 (Managing Secrets using Kustomize)
kubectl은 Kustomize 객체 관리 도구를 이용해 시크릿(Secret)과 ConfigMap을 관리하는 것을 지원해요. Kustomize로 리소스 생성기(resource generator)를 만들면, kubectl로 API 서버에 적용할 수 있는 시크릿을 생성할 수 있어요.
출처: 문서
본문
시작하기 전에
Kubernetes 클러스터가 있어야 하고, kubectl 명령줄 도구가 클러스터와 통신하도록 구성되어 있어야 해요. 이 튜토리얼은 컨트롤 플레인 호스트가 아닌 노드가 최소 두 개 있는 클러스터에서 실행하는 것을 권장해요. 아직 클러스터가 없다면 minikube를 이용해 만들거나, 아래 Kubernetes 플레이그라운드 중 하나를 사용할 수 있어요.
시크릿 생성하기
다른 기존 파일, .env 파일, 또는 리터럴 값을 참조하는 kustomization.yaml 파일에 secretGenerator를 정의하면 시크릿을 생성할 수 있어요. 예를 들어, 아래 지침은 사용자 이름 admin과 비밀번호 1f2d1e2e67df에 대한 kustomization 파일을 만들어요.
kustomization 파일 생성하기
리터럴, 파일, .env 파일 세 가지 방식이 있어요. 리터럴을 사용하면:
secretGenerator:
- name: database-creds
literals:
- username=admin
- password=1f2d1e2e67df
자격 증명을 파일에 저장할 수도 있어요. 파일 이름이 시크릿의 키(key)가 돼요. -n 플래그는 파일 끝에 개행 문자가 없도록 보장해요.
kustomization.yaml 파일에 .env 파일을 제공해 secretGenerator를 정의할 수도 있어요. 예를 들어, 다음 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
시크릿이 생성될 때, 시크릿 데이터를 해시(hash)하여 이름에 그 해시 값을 덧붙여 시크릿 이름이 만들어져요. 이렇게 하면 데이터가 수정될 때마다 새 시크릿이 생성되는 것이 보장돼요.
시크릿이 생성되었는지 확인하고 데이터를 디코딩하려면:
kubectl get -k <directory-path> -o jsonpath='{.data}'
출력은 다음과 비슷해요:
{ "password": "MWYyZDFlMmU2N2Rm", "username": "YWRtaW4=" }
echo 'MWYyZDFlMmU2N2Rm' | base64 --decode
출력은 다음과 비슷해요:
1f2d1e2e67df
더 자세한 내용은 kubectl로 시크릿 관리하기와 Kustomize를 사용한 Kubernetes 객체 선언적 관리 문서를 참고해요.
시크릿 편집하기
kustomization.yaml파일에서password같은 데이터를 수정해요.- kustomization 파일이 있는 디렉터리를 적용해요.
편집된 시크릿은 기존 시크릿을 업데이트하는 대신 새 시크릿 객체로 생성돼요. 파드에서 시크릿을 참조하는 부분을 업데이트해야 할 수도 있어요.
정리하기
시크릿을 삭제하려면 kubectl을 사용해요:
kubectl delete secret db-user-pass
다음 단계
- 시크릿 개념 더 읽어보기
- kubectl로 시크릿 관리하기 배우기
- 구성 파일로 시크릿 관리하기 배우기