Agent Injector 설치
Agent Injector 설치 (Install the Agent Injector)
쿠버네티스에 Vault Agent Injector를 Helm 차트로 설치하는 방법을 다룹니다.
출처: 문서
본문
Vault Helm 차트는 쿠버네티스에서 Agent Injector를 설치·구성하는 권장 방법이에요.
Vault Agent Injector에는 Vault 1.3.1 이상이 필요합니다.
Vault와 Vault Agent Injector의 새 인스턴스를 설치하려면 먼저 HashiCorp Helm 레포지토리를 추가하고 차트에 접근할 수 있는지 확인해요.
$ helm repo add hashicorp https://helm.releases.hashicorp.com
"hashicorp" has been added to your repositories
$ helm search repo hashicorp/vault
NAME CHART VERSION APP VERSION DESCRIPTION
hashicorp/vault 0.34.1 2.0.4 Official HashiCorp Vault Chart
그런 다음 injector.enabled 값을 true로 설정해 인젝션 기능을 활성화하고 차트를 설치해요.
helm install vault hashicorp/vault --set="injector.enabled=true"
기존 설치에는 helm upgrade로 업그레이드할 수 있어요. 설치나 업그레이드 전에는 항상 --dry-run으로 Helm을 실행해 변경 사항을 확인해 주세요.
사용 가능한 모든 값 설정은 helm inspect values hashicorp/vault를 실행하거나 Vault Helm 구성 문서에서 볼 수 있어요. Helm 차트에서 자주 쓰이는 값에는 injector가 동작하는 네임스페이스를 제한하는 것, TLS 옵션 등이 있어요.
TLS 옵션
Admission webhook 컨트롤러는 Kubernetes 내에서 실행되려면 TLS가 필요해요. Injector는 기본적으로 TLS 1.2 이상을 지원하며, 최소 지원 TLS 버전과 활성화된 cipher suite 목록을 구성할 수 있어요. 이들은 다음 환경 변수로 설정할 수 있습니다.
| 환경 변수 | 설명 |
|---|---|
| AGENT_INJECT_TLS_MIN_VERSION | 지원되는 최소 TLS 버전. 기본값은 tls12. 허용 값은 tls10, tls11, tls12, tls13. |
| AGENT_INJECT_TLS_CIPHER_SUITES | TLS 1.0-1.2용 활성화된 cipher suite의 쉼표 구분 목록. (TLS 1.3에서는 cipher suite를 구성할 수 없어요.) |
경고: TLS 1.1 이하는 일반적으로 안전하지 않은 것으로 간주됩니다.
이들은 Helm 차트 배포에서 injector.extraEnvironmentVars 옵션으로 설정할 수 있어요.
helm install vault hashicorp/vault \
--set="injector.extraEnvironmentVars.AGENT_INJECT_TLS_MIN_VERSION=tls13" \
--set="injector.extraEnvironmentVars.AGENT_INJECT_TLS_CIPHER_SUITES=..."
Vault Agent Injector는 두 가지 TLS 관리 옵션도 지원해요.
- 자동 TLS 생성 (기본값)
- 수동 TLS
자동 TLS (Auto TLS)
기본적으로 Vault Agent Injector는 인증 기관(CA)을 생성하고 컨트롤러가 사용할 인증서/키를 만들어 TLS를 부트스트랩합니다. Vault Helm을 사용한다면 차트가 인증서 검증에 쓰이는 컨트롤러 서비스의 필요한 DNS 항목을 자동으로 만들어 줘요.
수동 TLS (Manual TLS)
원한다면 자신의 TLS 인증서, 키, 인증 기관을 제공할 수 있어요. TLS를 수동으로 구성하려면 다음이 필요합니다.
- 서버 인증서/키
- Base64 PEM 인코딩된 인증 기관 번들
수동 TLS 구성에 대한 자세한 내용은 Vault Helm cert 값을 참고하세요.
이 옵션은 인증서 관리를 위한 cert-manager와 함께 사용할 수도 있어요.
다중 레플리카와 TLS
Vault Agent Injector는 수동 TLS 또는 cert-manager를 사용하면 다중 레플리카로 실행할 수 있고, v0.7.0부터는 자동 TLS로도 다중 레플리카를 지원해요. 레플리카 수는 Vault Helm 차트에서 injector.replicas 값으로 제어합니다.
자동 TLS와 다중 레플리카를 쓰면 리더 레플리카가 vault-k8s-leader라는 ConfigMap의 소유권으로 결정돼요. 현재 리더 레플리카가 실행을 멈추고 쿠버네티스 가비지 컬렉터가 ConfigMap을 삭제하면 다른 레플리카가 리더가 될 수 있어요. 리더 레플리카는 CA를 생성하고 쿠버네티스의 webhook caBundle을 패치하는 역할을 하며, 인증서와 키를 생성해 "팔로워(followers)"에게 배포합니다. 팔로워는 webhook 서비스 리스너에 필요한 인증서와 키를 쿠버네티스 시크릿에서 읽으며, 이 시크릿은 인증서가 만료에 가까워지면 리더가 갱신해요.
수동 TLS와 다중 레플리카를 쓰는 경우, 이 경우 리더 결정이 필요 없으므로 injector.leaderElector.enabled를 false로 설정할 수 있어요.
네임스페이스 선택기 (Namespace selector)
기본적으로 Vault Agent Injector는 시스템 네임스페이스인 kube-system과 kube-public을 제외한 쿠버네티스의 모든 네임스페이스를 처리해요. injector가 동작할 네임스페이스를 제한하려면 네임스페이스에 붙은 라벨과 일치하도록 네임스페이스 선택기(namespace selector) 를 정의할 수 있어요.
네임스페이스 선택 구성에 대한 자세한 내용은 Vault Helm namespaceSelector 값을 참고하세요.