쿠버네티스
쿠버네티스 시크릿(Secret) 자동 변경
ipxy
2025. 4. 6. 10:07
728x90
1. 시크릿(Secret) 직접 관리 자동화
- 스크립트나 CI 파이프라인으로 Secret을 업데이트하는 방법입니다.
- 예를 들어 GitLab CI, Jenkins 등을 통해 새로운 인증 정보(비밀번호, 토큰 등)가 생기면 kubectl apply로 Secret을 덮어씌우는 방식.
- 이 방법은 간단하지만, Pod 재시작이 따르지 않으면 컨테이너는 변경된 Secret을 읽지 못합니다. 그래서 Rolling Restart까지 같이 걸어야 합니다.
kubectl create secret generic my-secret --from-literal=password=newpassword --dry-run=client -o yaml | kubectl apply -f -
kubectl rollout restart deployment/my-deployment
2. External Secrets 오퍼레이터(ESO) 사용
- External Secrets Operator 같은 오픈소스 솔루션을 사용합니다.
- 이 방식은 Secret의 소스를 AWS Secrets Manager, HashiCorp Vault, Azure Key Vault 같은 외부에 두고, 쿠버네티스 클러스터에 자동 싱크(sync) 시킵니다.
- Secret이 외부에서 바뀌면 Kubernetes 안에서도 자동으로 바뀝니다.
- 별도로 롤링 업데이트 설정도 가능합니다.
외부 비밀 저장소 --> External Secrets Operator --> Kubernetes Secret --> Pod
ExternalSecret CRD(커스텀 리소스) 예시:
apiVersion: external-secrets.io/v1alpha1
kind: ExternalSecret
metadata:
name: my-db-credentials
spec:
refreshInterval: 1h
secretStoreRef:
name: my-secret-store
kind: ClusterSecretStore
target:
name: my-db-secret
creationPolicy: Owner
data:
- secretKey: password
remoteRef:
key: prod/db-password
- refreshInterval: 1h 부분이 자동 갱신 주기를 뜻합니다.
- Secret이 변하면 관련 리소스(Pod 등)를 자동으로 업데이트할 수도 있습니다.
3. Cert-Manager 활용 (인증서나 키 자동 갱신용)
- 만약 관리하려는 Secret이 TLS 인증서 관련이라면, cert-manager를 쓰는 게 베스트입니다.
- cert-manager는 Let's Encrypt나 사설 CA를 이용해서 자동 갱신, 자동 Secret 업데이트를 해줍니다.
- 예를 들면, 인증서 만료 전에 자동으로 새로 발급받고 관련 Secret을 교체해줍니다.
4. 시크릿 볼륨(Secret Volume) 마운트 방식
- Kubernetes에서 Secret을 볼륨(Volume) 으로 마운트하면, 기본적으로 Secret이 변경되었을 때 1~2분 안에 자동으로 업데이트됩니다.
- 단, 애플리케이션이 파일 변경 이벤트를 감지하거나, 주기적으로 읽어야 새 Secret을 사용할 수 있어요.
볼륨 마운트 예시:
apiVersion: v1
kind: Pod
metadata:
name: secret-pod
spec:
containers:
- name: mycontainer
image: myimage
volumeMounts:
- name: secret-volume
mountPath: "/etc/secret"
readOnly: true
volumes:
- name: secret-volume
secret:
secretName: my-secret
Secret이 변경되면 /etc/secret 경로에 있는 파일 내용이 갱신됩니다.
BUT 컨테이너 재시작 없이 동적으로 읽을 수 있어야 해서, 애플리케이션 코드에 약간의 대응이 필요합니다.
정리
방법 | 특징 | 추천 상황 |
수동 업데이트 스크립트 | 간단한 작업에 좋음 | 초기 테스트, 단순한 클러스터 |
External Secrets Operator | 외부 비밀 연동 + 자동화 | 규모가 커질 때, Vault, AWS, Azure 쓰는 경우 |
cert-manager | TLS 인증서 자동화 | HTTPS, mTLS 필요한 서비스 |
Secret Volume 마운트 | 실시간 갱신(1~2분 내) | 코드에서 파일 감지가 가능할 때 |
728x90