Kubernetes 통합 비교
Kubernetes 통합 비교
HashiCorp Vault는 Kubernetes 워크로드가 애플리케이션 코드를 수정하지 않고 Vault에서 시크릿을 소비하도록 돕는 세 가지 통합을 제공합니다. 각 통합은 다양한 사용 사례에 적합하게 만드는 고유한 특성을 가집니다.
아래 정보를 사용해 사용 가능한 통합을 비교하고 요구 사항에 맞는 올바른 솔루션을 선택하세요.
출처: 문서
본문
한눈에 보는 기능 (Features at a glance)
| 기능 | Vault Secrets Operator | Vault Secrets Store CSI provider | Vault Agent Injector |
|---|---|---|---|
| 지원되는 시크릿 유형 | Static/KV, PKI, Dynamic, Database, AppRole secret IDs | 전체 | 전체 |
| 지원되는 인증 방법 | K8s, AppRole, GCP, AWS, JWT | K8s, JWT | K8s, 기타 자동 인증 방법 |
| 스토리지 모델 | K8s Secrets(기본) / 임시 볼륨(CSI 드라이버) | 임시 K8s Secrets 또는 임시 볼륨 | 임시 볼륨 |
| Kubernetes 네이티브 | 예 | 예 | 아니요 |
| 시크릿 데이터 영속성 | etcd에 영속(기본) / 임시(CSI 드라이버) | 임시 영속 또는 임시 | 임시 |
| 시크릿 데이터 템플릿 | 예 | 아니요 | 예 |
| 파드 자동 확장에 Vault 필요 | 아니요(기본) / 예(CSI 드라이버) | 예 | 예 |
| 애플리케이션 간 시크릿 공유 | 예 | 예 | 아니요 |
Vault Secrets Operator
Vault Secrets Operator는 Vault의 시크릿을 네이티브 Kubernetes Secrets로 동기화합니다. Vault Secrets Operator는 사용자 정의 리소스 정의(CRD)를 조정(reconcile)하여 시크릿 데이터를 Vault에서 Kubernetes Secrets로 동기화하며, 애플리케이션은 표준 Kubernetes 패턴으로 소비할 수 있습니다. Vault Enterprise 사용자는 Vault Secrets Operator가 CSI 드라이버를 실행해 Kubernetes Secrets를 우회하고 Vault에서 애플리케이션 컨테이너로 시크릿을 볼륨으로 직접 마운트하도록 구성할 수도 있습니다.
가장 적합한 대상: 네이티브 Kubernetes 워크플로를 선호하고 시크릿을 영속 클러스터 스토리지 또는 임시 볼륨 중 하나에 쓸 수 있는 옵션을 원하는 팀.
Vault Secrets Store CSI provider
Vault Secrets Store CSI provider는 벤더 중립적인 Secrets Store CSI 드라이버를 사용해 Vault의 시크릿을 임시 볼륨으로 마운트합니다. 캐싱과 갱신을 관리하기 위해 provider와 함께 Vault Agent를 배포할 수 있습니다.
가장 적합한 대상: Vault 외에 여러 시크릿 스토어를 사용하는 조직, 또는 벤더 중립적인 CSI 표준을 선호하는 조직.
Vault Agent Injector
Vault Agent Injector는 Vault Agent 사이드카 컨테이너를 파드에 주입합니다. Agent 컨테이너는 Vault에 인증하고 시크릿을 애플리케이션 컨테이너가 소비하는 공유 메모리 볼륨에 렌더링합니다.
가장 적합한 대상: 하나의 템플릿에서 여러 Vault 시크릿을 참조하려는 애플리케이션, 또는 더 넓은 인증 방법 배열이 필요한 애플리케이션.
사용 사례 권장사항
환경에 적합한 통합은 적용 가능한 보안 정책, 시크릿 데이터 거버넌스, 사용 편의성 요구사항, 시스템 가용성 보장에 따라 다릅니다.
| 제한 사항 | Vault Secrets Operator | Vault Secrets Store CSI provider | Vault Agent Injector |
|---|---|---|---|
| 권한 있는 파드 접근 필요 | 아니요(CSI 드라이버 제외) | 예 | 아니요 |
| 시크릿 소비 방식의 유연성 | 예 | 예 | 아니요 |
| 낮은 리소스 소비(I/O, CPU, 메모리) | 예 | 예 | 아니요 |
| 시크릿 데이터가 임시 볼륨으로 제한 | 아니요 | 아니요 | 예 |
| 파드 자동 확장이 Vault 가용성에 의존 | 아니요(CSI 드라이버 제외) | 예 | 예 |
| K8s RBAC 정책을 통한 페르소나 분리 | 예 | 아니요 | 아니요 |
성능 고려사항 (Performance considerations)
성능 특성은 아키텍처 패턴에 따라 통합 간에 크게 다릅니다.
- Vault Secrets Operator — CRD 특정 연결과 클러스터 로컬 시크릿 캐싱으로 가장 낮은 부하. 전체 클러스터에 대한 단일 관리자.
- Vault Secrets Operator(CSI 드라이버 포함) — 노드당 하나의 Vault 연결 풀과 클라이언트 캐싱으로 더 낮은 부하.
- Vault Secrets Store CSI provider — 파드당 연결로 더 높은 부하.
- Vault Agent Injector — 파드당 연결과 사이드카 패턴으로 가장 높은 부하.
- Vault Secrets Operator — Kubernetes Secrets의 캐싱으로 시크릿 수명주기가 파드 수명주기와 독립적(CSI 드라이버 사용 시 제외).
- Vault Secrets Store CSI provider — 시크릿 수명주기가 파드 수명주기에 의존.
- Vault Agent Injector — 시크릿 수명주기가 파드 수명주기에 의존.
- Vault Secrets Operator — Kubernetes 클러스터당 하나의 클라이언트 프로세스가 필요하므로 가장 낮은 소비. CSI 드라이버 사용 시 노드당 하나의 드라이버가 필요하므로 낮음~중간 소비.
- Vault Secrets Store CSI provider — 노드당 하나의 클라이언트 프로세스가 필요하므로 낮음~중간 소비.
- Vault Agent Injector — 조정 가능한 리소스 할당에도 불구하고 각 파드가 사이드카 컨테이너로 전용 클라이언트 프로세스를 필요로 하므로 더 높은 소비.
파드 간에 시크릿 데이터를 공유하는 통합은 파드 수가 증가해도 잘 확장됩니다. 각 파드에 독립적인 Vault 연결을 만드는 통합은 파드 수가 증가해도 잘 확장되지 않습니다.
- Vault Secrets Operator — 시크릿 데이터를 공유.
- Vault Secrets Store CSI provider — 독립적인 Vault 연결을 생성.
- Vault Agent Injector — 독립적인 Vault 연결을 생성.
Vault Secrets Operator로 마이그레이션
다른 Kubernetes 통합에서 Vault Secrets Operator로 마이그레이션하려면:
- VaultStaticSecret, VaultDynamicSecret, VaultPKISecret, CSISecrets 같은 관련 시크릿 유형 각각에 대해 CRD를 만듭니다. 구성 세부사항은 API 참조를 참고하세요. Vault Secrets Operator CSI 드라이버는 KV 시크릿과 AppRole secret IDs만 지원한다는 점을 유의하세요.
- 애플리케이션을 Kubernetes Secrets를 사용하도록 업데이트합니다.
- Vault Agent Injector에서 마이그레이션하려면 Vault Agent Injector의 Golang 템플릿이 Vault Secrets Operator의 SecretTransformation 리소스와 즉시 작동하지 않을 수 있으므로 시크릿 템플릿을 업데이트해야 할 수 있습니다.
- 보호된 시크릿(protected secrets)을 사용하려면 다음도 필요합니다.
- Vault Enterprise 라이선스
- CSI 볼륨을 참조하도록 업데이트된 파드 사양
다음 단계
자세한 구현 지침은 선택한 통합의 문서를 참고하세요.
- Vault Secrets Operator
- Vault Secrets Store CSI provider
- Vault Agent Injector