Kubernetes Engine 클러스터에서 External Secrets Operator(ESO) 시크릿 활용
ESO 설치 후 Secrets Manager에 저장한 문자열 값을 쿠버네티스 시크릿으로 동기화하고, 기본 버전 변경에 따른 갱신을 확인합니다.
- 예상 소요 시간: 약 15분
- 사전 준비 사항
- ESO 설치 및 기본 동기화 확인 완료
- 설치 가이드에서 생성한
eso-demo네임스페이스와kakaocloud-secret-store재사용 kubectl이 설치되어 있고 대상 클러스터에 연결하도록 설정된 환경- 실습할 카카오클라우드 Secrets Manager 시크릿의 ID와 조회 권한
- 시나리오 2의 새 버전 생성이 가능한 콘솔 사용자 권한
시나리오 소개
이 튜토리얼은 ESO 설치 가이드에서 기본 동기화를 확인한 뒤 진행합니다. 설치한 ESO와 인증정보, SecretStore를 사용하여 활용 실습용 쿠버네티스 시크릿을 별도로 생성하고 값의 갱신을 확인합니다.
주요 내용은 다음과 같습니다.
- 문자열 시크릿 동기화
- 기본 버전 변경 후 쿠버네티스 시크릿 갱신 확인
동기화한 쿠버네티스 시크릿을 애플리케이션에 연결하거나 다른 설정을 적용하려면 추가 활용을 참고하세요.
시작하기 전에
설치 가이드에서 생성한 리소스를 확인합니다. SecretStore는 Ready=True, 기본 동기화에 사용한 ExternalSecret은 Ready=True 및 SecretSynced 상태여야 합니다.
kubectl get secretstore kakaocloud-secret-store -n eso-demo
kubectl get externalsecret kakaocloud-external-secret -n eso-demo
kubectl get secret kakaocloud-synced-secret -n eso-demo
기본 동기화가 완료되지 않았다면 설치 가이드의 동기화 결과 확인과 문제 해결을 먼저 진행하세요.
이 문서에서는 활용 실습용 ExternalSecret과 대상 쿠버네티스 시크릿을 별도 이름으로 생성합니다. 이 문서의 ExternalSecret 매니페스트는 설치 가이드와 동일하게 external-secrets.io/v1 API 및 eso-demo 네임스페이스의 kakaocloud-secret-store를 사용합니다.
배포 버전과 지원 범위는 서비스 가이드의 배포 구성 및 지원 범위 및 제약 사항을 참고하세요.
시나리오 1: 문자열 시크릿 동기화
API 키, 비밀번호, 토큰처럼 Secrets Manager에 하나의 문자열로 저장한 값을 app-password 쿠버네티스 시크릿의 password 키로 전달합니다. 이 시크릿은 다음 시나리오에서 값 교체를 확인하는 데 사용합니다.
1. ExternalSecret 생성
코드 아래 입력란에 실제 Secrets Manager 시크릿 ID를 입력한 뒤 app-password.yaml 파일을 작성합니다.
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: app-password
namespace: eso-demo
spec:
refreshPolicy: Periodic
refreshInterval: 1m0s
secretStoreRef:
name: kakaocloud-secret-store
kind: SecretStore
target:
name: app-password
creationPolicy: Owner
data:
- secretKey: password
remoteRef:
key: ${SECRET_ID}
| 변수 | 설명 |
|---|---|
| SECRET_ID🖌︎ | Secrets Manager 시크릿 ID |
빠른 테스트를 위해 refreshInterval: 1m0s를 사용했습니다. 운영 환경에서는 시크릿 교체 정책과 API 호출 주기에 맞게 시간을 조정해 주세요.
remoteRef.version을 생략했으므로 기본 버전을 조회합니다. 특정 버전을 유지하려면 특정 버전 고정을 참고하세요.
2. 생성 결과 확인
kubectl apply -f app-password.yaml
kubectl wait --for=condition=Ready \
externalsecret/app-password -n eso-demo --timeout=60s
kubectl get externalsecret app-password -n eso-demo
kubectl get secret app-password -n eso-demo
쿠버네티스 시크릿의 값을 출력하지 않고 데이터 키만 확인합니다.
kubectl get secret app-password -n eso-demo \
-o go-template='{{range $key, $_ := .data}}{{$key}}{{"\n"}}{{end}}'
성공 기준
ExternalSecret의Ready상태가True입니다.app-password쿠버네티스 시크릿이 생성됩니다.- 해당 시크릿에
password키가 존재합니다.
시나리오 2: 기본 버전 변경 후 쿠버네티스 시크릿 갱신
시나리오 1에서 생성한 app-password를 사용하여 비밀번호나 API 키 교체가 반영되는지 확인합니다. remoteRef.version을 생략하면 카카오클라우드 Secrets Manager의 기본 버전을 조회하므로, 새 버전을 생성하면 해당 버전이 자동으로 기본 버전이 되고 ESO가 다음 동기화 시점에 대상 쿠버네티스 시크릿을 갱신합니다.
1. 새 버전 생성
시나리오 1의 app-password를 사용합니다. app-password.yaml에 remoteRef.version을 추가했다면 해당 필드를 삭제하고 다시 적용하세요.
- 카카오클라우드 콘솔의 Secrets Manager에서 시나리오 1과 동일한 시크릿에 새 버전을 생성합니다.
- 새 버전의 값에 기존 값과 다른 실습용 문자열
eso-demo-password-002를 입력합니다.
eso-demo-password-002는 공개된 실습용 값입니다. 실제 서비스의 비밀번호로 사용하지 마세요.
2. 변경된 값 확인
시나리오 1에서 refreshInterval: 1m0s로 설정했으므로, ESO는 약 1분 주기로 기본 버전의 값을 자동으로 동기화합니다. 새 버전을 생성한 뒤 약 1분 기다렸다가 아래의 쿠버네티스 시크릿 값 확인 명령을 실행하세요.
기다리지 않고 동기화를 요청하려면 다음 명령을 실행합니다. 이 명령은 선택 사항이며, 설정한 동기화 주기는 변경하지 않습니다.
kubectl annotate externalsecret app-password -n eso-demo \
force-sync="$(date +%s)" --overwrite
자동 동기화를 기다렸거나 수동 동기화를 요청한 뒤, 쿠버네티스 시크릿의 값을 확인합니다. 아래 명령은 실습용 값을 화면에 출력하므로 운영 환경의 시크릿에는 사용하지 마세요.
kubectl get secret app-password -n eso-demo \
-o jsonpath='{.data.password}' | base64 --decode
eso-demo-password-002
출력된 값이 새 버전에 입력한 값과 같으면 갱신이 완료된 것입니다. 이전 값이 나오면 잠시 후 다시 조회하세요. 계속 변경되지 않으면 새 버전 생성 여부와 remoteRef.version을 확인하고, ESO 연동 문제 해결을 참고하세요.
설치나 동기화에 실패하면 ESO 연동 문제 해결에서 증상별 확인 항목을 확인하세요.
추가 활용
동기화와 갱신을 확인했다면 필요한 구성에 따라 서비스 가이드의 예제를 참고하세요.
실습 리소스 정리
더 이상 사용하지 않는 실습 리소스를 삭제합니다. 설치 실습의 ESO, SecretStore, IAM 인증정보 시크릿과 기본 동기화 리소스는 유지됩니다. 추가 활용의 예제를 계속 진행하려면 이 공통 리소스를 유지하세요.
이 튜토리얼과 서비스 가이드의 예제는 creationPolicy: Owner를 사용하므로 ExternalSecret을 삭제하면 소유한 대상 쿠버네티스 시크릿도 함께 삭제됩니다.
이 튜토리얼의 리소스 삭제
시나리오 1과 2에서 사용한 app-password를 삭제합니다.
kubectl delete externalsecret app-password -n eso-demo --ignore-not-found
서비스 가이드 예제의 리소스 삭제(선택)
서비스 가이드의 JSON 시크릿, 애플리케이션 설정 또는 TLS 인증서 예제도 진행한 경우에만 실행합니다. 기존 Ingress의 TLS 참조를 제거하거나 다른 쿠버네티스 시크릿으로 변경하고, 기존 Deployment에 환경 변수 참조를 추가했다면 해당 참조도 정리합니다.
kubectl delete deployment app-credentials-volume -n eso-demo --ignore-not-found
kubectl delete externalsecret app-credentials database-credentials ingress-tls \
-n eso-demo --ignore-not-found
공통 리소스 삭제
ESO, SecretStore, IAM 인증정보 시크릿과 기본 동기화 리소스도 더 이상 사용하지 않으면 설치 가이드의 삭제 절차를 진행하세요.
설치나 동기화에 실패하면 ESO 연동 문제 해결에서 증상별 확인 항목을 확인하세요.