Vault Secrets Operator Helm 차트 값

Vault Secrets Operator Helm 차트 값 (Helm chart configuration values)

Vault Secrets Operator Helm 차트가 제공하는 모든 구성 값(controller, defaultVaultConnection, defaultAuthMethod, telemetry, csi 등)을 스탠자별로 설명합니다.

출처: 문서

본문

이 차트는 Helm 구성 값을 사용해 자유롭게 커스터마이즈할 수 있어요.

최상위 스탠자 (Top-level stanzas)

다음 링크로 각 최상위 스탠자로 이동할 수 있어요.

모든 값 (All values)

controller

controller — vault secrets operator 배포를 위한 최상위 구성이에요. 컨트롤러와 kube rbac proxy 컨테이너로 구성돼요.

  • replicas (integer: 1) — 오퍼레이터의 레플리카 수를 설정해요.
  • priorityClassName (string: "") — 오퍼레이터의 우선순위 클래스를 설정해요.
  • strategy (object: "") — 멀티 레플리카 배포의 업데이트 전략을 구성해요. 쿠버네티스는 Recreate와 RollingUpdate 타입을 지원해요. ref: https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#strategy
    strategy: {}
      rollingUpdate:
        maxSurge: 1
        maxUnavailable: 0
      type: RollingUpdate
    
  • hostAliases (array<map>) — vault-secrets-operator 파드의 Host Aliases 설정이에요. 값은 PodSpec HostAlias 맵의 배열이에요. ref: https://kubernetes.io/docs/tasks/network/customize-hosts-file-for-pods/
    hostAliases:
      - ip: 192.168.1.100
        hostnames:
        - vault.example.com
    
  • nodeSelector (map) — vault-secrets-operator 파드 할당을 위한 nodeSelector 레이블이에요. ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#nodeselector
    nodeSelector:
      beta.kubernetes.io/arch: amd64
    
  • tolerations (array<map>) — vault-secrets-operator 파드의 Toleration 설정이에요. 값은 PodSpec Toleration 맵의 배열이에요. ref: https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/
    tolerations:
    - key: "key1"
      operator: "Equal"
      value: "value1"
      effect: "NoSchedule"
    
  • affinity — vault-secrets-operator 파드의 Affinity 설정이에요. 값은 PodSpec Affinity 맵이에요. ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#affinity-and-anti-affinity
    affinity:
      nodeAffinity:
        requiredDuringSchedulingIgnoredDuringExecution:
          nodeSelectorTerms:
          - matchExpressions:
            - key: topology.kubernetes.io/zone
              operator: In
              values:
              - antarctica-east1
              - antarctica-west1
    
  • topologySpreadConstraints (array: []) — vault-secrets-operator 파드의 토폴로지 스프레드 제약 설정이에요. 값을 제공하지 않으면 VSO가 템플릿에 labelSelector 항목을 자동으로 추가해요. ref: https://kubernetes.io/docs/concepts/scheduling-eviction/topology-spread-constraints/
    topologySpreadConstraints:
    - maxSkew: 1
      topologyKey: zone
      whenUnsatisfiable: DoNotSchedule
    
  • podDisruptionBudget — 컨트롤러 배포의 PodDisruptionBudget을 구성해요.
    • enabled (boolean: false) — 컨트롤러의 PodDisruptionBudget 배포를 켜요.
    • maxUnavailable (string: 0) — 축출 중 사용할 수 없는 최대 파드 수를 설정해요. maxUnavailable과 minAvailable은 동시에 설정할 수 없어요. 정수("2")나 백분율("50%")로 지정할 수 있어요.
    • minAvailable (string: 0) — 축출 중 허용되는 최소 사용 가능 파드 수를 설정해요. minAvailable과 maxUnavailable은 동시에 설정할 수 없어요. 정수("2")나 백분율("50%")로 지정할 수 있어요.
  • rbac
    • clusterRoleAggregation — 집계된 ClusterRole에 포함될 역할을 정의해요.
      • viewerRoles (array<string>: []) — viewer ClusterRole에 집계될 역할 목록이에요. 역할 이름은 VSO 리소스 타입 중 하나여야 해요(예: "VaultAuth"). 모든 값은 대소문자를 구분하지 않아요. 첫 요소로 '*'를 지정하면 모든 역할이 집계에 포함돼요. ClusterRole 이름은 <chart-fullname>-aggregate-role-viewer 형태예요. 예시 — 모든 역할: '*', 개별 지정: "VaultAuth"
      • editorRoles (array<string>: []) — editor ClusterRole에 집계될 역할 목록이에요. 역할 이름은 VSO 리소스 타입 중 하나여야 해요(예: "VaultAuth"). 모든 값은 대소문자를 구분하지 않아요. 첫 요소로 '*'를 지정하면 모든 역할이 집계에 포함돼요. ClusterRole 이름은 <chart-fullname>-aggregate-role-editor 형태예요. 예시 — 모든 역할: '*', 개별 지정: "VaultAuth"
      • userFacingRoles (object: "") — viewer와 editor ClusterRole에 집계될 역할 맵이에요. 더 자세한 내용은 https://kubernetes.io/docs/reference/access-authn-authz/rbac/#user-facing-roles 를 참고해요.
        • view (boolean: false) — 집계된 viewer ClusterRole을 사용자 대상 'view' ClusterRole에 제공할지 제어해요. viewerRoles가 설정돼 있어야 해요.
        • edit (boolean: false) — 집계된 editor ClusterRole을 사용자 대상 'edit' ClusterRole에 제공할지 제어해요. editorRoles가 설정돼 있어야 해요.
    • kubeRbacProxy — kubeRbacProxy 컨테이너 관련 설정이에요. 이 컨테이너는 SubjectAccessReviews를 사용해 쿠버네티스 API에 대해 RBAC 인가를 수행하는 컨트롤러 매니저용 HTTP 프록시예요.
  • imagePullSecrets (array<map>) — 프라이빗 컨테이너 레지스트리 인증에 사용할 이미지 풀 시크릿이에요. 컨트롤러의 서비스 어카운트에 적용돼요. 문자열 배열로도 지정할 수 있어요.
    imagePullSecrets:
      - name: pull-secret-name-1
      - name: pull-secret-name-2
    
    https://kubernetes.io/docs/concepts/containers/images/#using-a-private-registry 참고.
  • extraLabels — 배포에 붙일 추가 레이블이에요. YAML 객체(map)로 형식화해야 해요.
  • annotations — 배포에 추가할 주석이에요. YAML 객체(map)로 형식화해야 해요.
  • manager — vault-secrets-operator 컨테이너 관련 설정이에요.
    • image
      • pullPolicy (string: IfNotPresent)
      • repository (string: hashicorp/vault-secrets-operator)
      • tag (string: 1.5.0)
    • logging
      • level (string: info) — 오퍼레이터의 로그 레벨을 설정해요. 내장 레벨: info, error, debug, debug-extended, trace. 기본: info
      • timeEncoding (string: rfc3339) — 오퍼레이터의 시간 인코딩을 설정해요. 옵션:
        • epoch — 초 단위 유닉스 타임스탬프 (예: 1695382800)
        • millis — 밀리초 단위 유닉스 타임스탬프 (예: 1695382800000)
        • nano — 나노초 단위 유닉스 타임스탬프 (예: 1695382800000000000)
        • iso8601 — ISO 8601 형식 (예: 2023-09-22T10:00:00Z)
        • rfc3339 — RFC 3339 형식 (예: 2023-09-22T10:00:00Z)
        • rfc3339nano — 나노초 정밀도의 RFC 3339 형식 (예: 2023-09-22T10:00:00.123456789Z). 기본: rfc3339
      • stacktraceLevel (string: panic) — 오퍼레이터의 스택트레이스 레벨을 설정해요. 옵션: info, error, panic. 기본: panic
    • globalTransformationOptions — 전역 시크릿 변환 옵션이에요. 아래 불리언 옵션 외에도 VSO_GLOBAL_TRANSFORMATION_OPTIONS 환경 변수로 쉼표 구분 목록을 설정할 수 있어요. 유효 값: exclude-raw
      • excludeRaw (boolean: false) — 오퍼레이터가 _raw 시크릿 데이터를 대상 K8s Secret에 저장하지 못하게 해요.
    • globalVaultAuthOptions — 전역 Vault 인증 옵션이에요. 아래 불리언 옵션 외에도 VSO_GLOBAL_VAULT_AUTH_OPTIONS 환경 변수로 쉼표 구분 목록을 설정할 수 있어요. 유효 값: allow-default-globals
      • allowDefaultGlobals (boolean: true) — 참조하는 VaultAuth CR에 지정된 VaultAuthGlobal이 없으면 오퍼레이터가 "default" VaultAuthGlobal을 검색하게 해요. 기본: true
    • backoffOnSecretSourceError (object: "") — 컨트롤러 매니저의 백오프 설정이에요. SecretSource에서 시크릿을 가져올 때 오류가 발생하면 재시도 백오프 동작을 제어해요. 예를 들어 다음 설정이면:
      initialInterval: 5s
      maxInterval: 60s
      randomizationFactor: 0.5
      multiplier: 1.5
      
      백오프 재시도 시퀀스가 대략 5.5s, 7.5s, 11.25s, 16.87s, 25.3125s, 37.96s, 56.95s, 60.95s... 식이 돼요.
      • initialInterval (duration: 5s) — 재시도 사이의 초기 간격이에요.
      • maxInterval (duration: 60s) — 재시도 사이의 최대 간격이에요.
      • maxElapsedTime (duration: 0s) — 시크릿 소스에서 성공적인 동기화 없이 경과할 수 있는 최대 시간이에요. 기본값이 아닌 값으로 설정하면 최대 경과 시간에 도달한 뒤 시크릿 동기화가 더 이상 재시도되지 않는다는 점을 알아두어야 해요.
      • randomizationFactor (float: 0.5) — 재시도 사이 백오프 간격을 무작위화하는 요소예요. 군집 요청(thundering herd)을 피하기 위해 재시도를 분산해줘요. 0이면 백오프 간격이 무작위화되지 않아요. 0보다 큰 값을 권장해요.
      • multiplier (float: 1.5) — 재시도 사이 백오프 간격을 늘리는 데 사용하는 승수예요. 항상 0보다 큰 값이어야 해요.
    • clientCache — VaultAuthMethod를 사용해 얻은 Vault 토큰을 캐시(그리고 잠재적으로 영속화)하는 데 컨트롤러가 사용하는 클라이언트 캐시를 구성해요. 이를 통해 Vault 토큰을 TTL 동안 재사용하고 갱신할 수 있어요. 영속화는 동적 시크릿 맥락에서만 유용하므로 "none"이 기본값으로 적절해요.
      • persistenceModel (string: "") — 토큰을 캐시하고 영속화하는 -client-cache-persistence-model을 정의해요. VSO_CLIENT_CACHE_PERSISTENCE_MODEL 환경 변수로도 설정할 수 있어요. 유효 값:
        • "none" — 인메모리 클라이언트 캐시를 사용하고 토큰을 영속화하지 않아요.
        • "direct-unencrypted" — 인메모리 클라이언트 캐시를 암호화 없이 영속화해요. 운영 워크로드에는 권장하지 않아요.
        • "direct-encrypted" — 인메모리 클라이언트 캐시를 Vault Transit 엔진으로 암호화해 영속화해요.

        참고: "direct-unencrypted"는 토큰이 평문으로 저장되어 유출될 수 있으므로 운영 환경에서 사용하지 않는 것을 강력히 권장해요. 기본: "none"

      • cacheSize (integer: "") — 클라이언트 캐시 컨트롤러가 사용하는 인메모리 LRU 캐시의 크기를 항목 수로 정의해요. VSO_CLIENT_CACHE_SIZE 환경 변수로도 설정할 수 있어요. 숫자가 클수록 컨트롤러의 메모리 사용량이 늘고, 작을수록 캐시 축출이 잦아져 Vault 클라이언트 수가 늘 수 있어요. 기본: 10000
      • numLocks (integer: "") — Vault 클라이언트 캐시 컨트롤러에 사용할 락 개수를 정의해요. VSO_CLIENT_CACHE_NUM_LOCKS 환경 변수로도 설정할 수 있어요. 1보다 작게 설정하면 매니저가 실행 호스트의 논리 CPU 수만큼 락을 설정해요. VSO 도움말 출력을 참고해요. 기본: 100
      • storageEncryption — (필수) Vault Transit 엔진을 사용해 쿠버네티스 객체 내 클라이언트 저장 캐시를 암호화하는 데 필요한 구성을 제공해요. 클라이언트 캐시 영속화를 암호화와 함께 활성화할 때만 구성해야 하며, Vault Transit 엔진이 사용할 추가 VaultAuthMethod를 배포해요. 예: controller.manager.clientCache.persistenceModel=direct-encrypted. Transit 인증 메서드로 지원되는 Vault 인증 방법은 jwt, appRole, aws, kubernetes예요. 보통 클러스터에는 StorageEncryption으로 구성된 VaultAuth가 하나만 있어야 해요.
        • enabled (boolean: false) — Transit VaultAuthMethod CR 배포를 켜요.
        • vaultConnectionRef (string: default) — Transit VaultAuthMethod가 사용할 Vault Connection Ref예요. 기본 설정은 기본 VaultConnectionRef를 사용하며, 그것도 구성돼 있어야 해요.
        • keyName (string: "") — Vault Transit을 통한 암호화/복호화 작업에 사용할 KeyName이에요.
        • transitMount (string: "") — Transit VaultAuthMethod의 마운트 경로예요.
        • namespace (string: "") — Transit VaultAuthMethod CR의 Vault 네임스페이스예요.
        • method (string: kubernetes) — Transit VaultAuthMethod CR과 함께 사용할 Vault 인증 방법이에요.
        • mount (string: kubernetes) — Transit VaultAuthMethod의 마운트 경로예요.
        • kubernetes — Vault Kubernetes 인증 방법별 구성
          • role (string: "") — 사용할 Vault Auth Role이에요. defaultAuthMethod.enabled=true면 Helm 차트 배포 전에 Vault에서 설정돼 있어야 하는 필수 필드예요.
          • serviceAccount (string: "") — Transit Vault Auth Role과 연결된 Kubernetes ServiceAccount예요. 기본은 오퍼레이터의 서비스 어카운트를 사용해요.
          • tokenAudiences (array<string>: []) — Token Audience는 vault kubernetes auth role의 audience와 일치해야 해요.
        • jwt — Vault JWT 인증 방법별 구성
          • role (string: "") — 사용할 Vault Auth Role이에요. Transit VaultAuthMethod에 JWT를 사용한다면 Helm 차트 배포 전에 Vault에서 설정돼 있어야 하는 필수 필드예요.
          • secretRef (string: "") — Helm 차트 배포 전에 다음 중 하나가 필요해요.
            • JWT가 포함된 K8s secret
            • 서비스 어카운트 JWT를 Vault JWT 인증 토큰으로 사용하고 VSO가 생성해야 한다면 K8s 서비스 어카운트 Vault JWT 인증 토큰이 있는 Kubernetes Secret의 이름이에요. 시크릿에는 JWT 토큰을 참조하는 jwt라는 키가 있어야 하며, 소비하는 VaultSecret CR의 네임스페이스에 존재해야 해요. JWT 토큰을 제공하면 필수 필드예요.
          • serviceAccount (string: default) — 서비스 어카운트 JWT를 생성할 Kubernetes ServiceAccount예요.
          • tokenAudiences (array<string>: []) — Token Audience는 해당하는 경우 Vault JWT auth role의 bound_audiences 또는 bound_claims의 aud 목록과 일치해야 해요.
        • appRole — AppRole 인증 방법별 구성
          • roleId (string: "") — Vault 인증에 사용할 AppRole Role의 RoleID예요. appRole을 사용할 때 필수 필드이며 Helm 차트 배포 전에 Vault에서 설정돼 있어야 해요.
          • secretRef (string: "") — Vault 인증에 사용할 AppRole Role의 SecretID가 있는 Kubernetes Secret의 이름이에요. 시크릿에는 AppRole Role의 SecretID를 참조하는 id라는 키가 있어야 하며, 소비하는 VaultSecret CR의 네임스페이스에 존재해야 해요. appRole을 사용할 때 필수 필드이며 Helm 차트 배포 전에 Vault에서 설정돼 있어야 해요.
        • aws — AWS 인증 방법별 구성
          • role (string: "") — 사용할 Vault Auth Role이에요. Transit 인증 메서드에 AWS를 사용한다면 Helm 차트 배포 전에 Vault에서 설정돼 있어야 하는 필수 필드예요.
          • region (string: "") — 인증 요청 서명에 사용할 AWS 리전이에요. 선택 사항이지만 대부분 EKS 클러스터 리전이에요.
          • headerValue (string: "") — STS 서명 요청에 포함할 Vault 헤더 값이에요.
          • sessionName (string: "") — WebIdentity provider를 만들 때 사용할 역할 세션 이름이에요.
          • stsEndpoint (string: "") — 사용할 STS 엔드포인트예요. 설정하지 않으면 기본값을 사용해요.
          • iamEndpoint (string: "") — 사용할 IAM 엔드포인트예요. 설정하지 않으면 기본값을 사용해요.
          • secretRef (string: "") — AWS 자격 증명을 보관하는 Kubernetes Secret의 이름이에요. 지원 키: access_key_id, secret_access_key, session_token
          • irsaServiceAccount (string: "") — IRSA(Service Accounts용 IAM 역할)로 구성된 Kubernetes 서비스 어카운트의 이름이에요. "eks.amazonaws.com/role-arn" 주석이 있어야 해요.
        • gcp
          • role (string: "") — 사용할 Vault Auth Role이에요. Transit 인증 메서드에 GCP를 사용한다면 Helm 차트 배포 전에 Vault에서 설정돼 있어야 하는 필수 필드예요.
          • workloadIdentityServiceAccount (string: "") — GKE에서 워크로드 아이덴티티로 구성된 Kubernetes 서비스 어카운트의 이름이에요.
          • region (string: "") — GKE 클러스터 아이덴티티 제공자의 GCP 리전이에요. 지정하지 않으면 오퍼레이터 파드의 로컬 메타데이터 서버에서 반환된 리전을 기본값으로 사용해요.
          • clusterName (string: "") — GKE 클러스터 이름이에요. 지정하지 않으면 오퍼레이터 파드의 로컬 메타데이터 서버에서 반환된 클러스터 이름을 기본값으로 사용해요.
          • projectID (string: "") — GCP 프로젝트 id예요. 지정하지 않으면 오퍼레이터 파드의 로컬 메타데이터 서버에서 반환된 프로젝트 id를 기본값으로 사용해요.
        • params (map) — 이 인증 방법으로 Vault에 인증할 때 사용할 파라미터예요.
          params:
            param-something1: "foo"
          
        • headers (map: "") — 모든 Vault 요청에 포함할 헤더예요.
          headers:
            X-vault-something1: "foo"
          
    • maxConcurrentReconciles (integer: "") — 각 컨트롤러의 최대 동시 재조정(reconcile) 수를 정의해요. VSO_MAX_CONCURRENT_RECONCILES 환경 변수로도 설정할 수 있어요. 기본: 100
    • kubeClient
      • qps (float: "") — kubernetes API에 대한 최대 QPS를 나타내요. 값이 0이면 kubernetes 클라이언트 기본값을 사용해요. VSO_KUBE_CLIENT_QPS 환경 변수로도 설정할 수 있어요. 기본: 0
      • burst (uint: "") — kubernetes API로의 요청을 제한할 때의 최대 burst예요. 값이 0이면 kubernetes 클라이언트 기본값을 사용해요. VSO_KUBE_CLIENT_BURST 환경 변수로도 설정할 수 있어요. 기본: 0
    • extraEnv (array<map>) — vault-secrets-operator 매니저 컨테이너에 추가할 환경 변수를 정의해요.
      extraEnv:
        - name: HTTP_PROXY
          value: http://proxy.example.com
        - name: VSO_OUTPUT_FORMAT
          value: json
        - name: VSO_CLIENT_CACHE_SIZE
          value: "20000"
        - name: VSO_CLIENT_CACHE_PERSISTENCE_MODEL
          value: "direct-encrypted"
        - name: VSO_MAX_CONCURRENT_RECONCILES
          value: "30"
      
    • extraArgs (array: []) — vault-secrets-operator 매니저 컨테이너에 전달할 추가 커맨드라인 인자를 정의해요.
    • volumes (array<map>) — vault-secrets-operator 매니저 파드에 추가할 볼륨을 정의해요. 시크릿, configmap, 기타 볼륨 타입을 마운트하는 데 쓸 수 있어요.

      참고: 오퍼레이터 파드에는 이미 /var/run/podinfo 위치에 'podinfo'라는 downAPI 볼륨이 있어요. 사용자 정의 볼륨은 이를 덮어쓸 수 없어요.

      volumes:
        - name: approle-secret
          secret:
            secretName: my-approle-secret
            defaultMode: 0400
        - name: tls-certs
          configMap:
            name: vault-tls
      
    • resources (map) — vault-secrets-operator 컨테이너의 기본 리소스를 구성해요. https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ 참고.
      • limits: cpu (string: 500m), memory (string: 128Mi)
      • requests: cpu (string: 10m), memory (string: 64Mi)
  • podSecurityContext — Pod 보안 컨텍스트를 구성해요. https://kubernetes.io/docs/tasks/configure-pod-container/security-context
    • runAsNonRoot (boolean: true)
  • securityContext — 컨테이너 보안 컨텍스트를 구성해요. https://kubernetes.io/docs/tasks/configure-pod-container/security-context
    • allowPrivilegeEscalation (boolean: false)
  • controllerConfigMapYaml (map) — 컨트롤러가 사용하는 구성 설정을 지정해요. 사용자 정의 변경 사항은 configmap의 data 필드에 반영돼요. https://kubernetes.io/docs/concepts/configuration/configmap/ 참고.
    • health
      • healthProbeBindAddress (string: :8081)
    • leaderElection
      • leaderElect (boolean: true)
      • resourceName (string: b0d477c0.hashicorp.com)
    • metrics
      • bindAddress (string: 127.0.0.1:8080)
    • webhook
      • port (integer: 9443)
  • kubernetesClusterDomain (string: cluster.local) — KubeDNS가 사용하는 KUBERNETES_CLUSTER_DOMAIN 환경 변수를 구성해요.
  • terminationGracePeriodSeconds (integer: 120) — 파드가 우아하게 종료되는 데 필요한 시간(초)이에요. https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/ 참고.
  • preDeleteHookTimeoutSeconds (integer: 120) — 사전 삭제 훅의 제한 시간(초)이에요.

metricsService

  • metricsService (map) — metrics service가 사용하는 포트를 구성해요.

defaultVaultConnection

  • defaultVaultConnection — 리소스가 VaultConnection 참조를 지정하지 않을 때 사용할 기본 VaultConnection CR을 구성해요. 이름은 'default'이고 항상 오퍼레이터와 같은 네임스페이스에 설치돼요.

    참고: vault secrets operator를 TLS 구성을 활용하고 Vault를 자체 제한 네임스페이스에 설치하는 보안 Vault 환경에 배포하는 것을 강력히 권장해요.

    • enabled (boolean: false) — VaultAuthMethod CR 배포를 켜요.
    • address (string: "") — Vault 서버 주소예요. 예: <http://vault.default.svc.cluster.local:8200>
    • caCertSecret (string: "") — 신뢰하는 PEM 인코딩 CA 인증서 체인을 ca.crt로 포함하는 Kubernetes secret의 이름이에요.

      참고: 이 시크릿은 CR 배포 전에 존재해야 해요.

    • tlsServerName (string: "") — TLS 연결의 SNI 호스트로 사용할 TLSServerName이에요.
    • skipTLSVerify (boolean: false) — TLS 연결의 SkipTLSVerify예요.
    • headers (map) — 모든 Vault 요청에 포함할 헤더예요.
      headers:
        X-vault-something: "foo"
      

defaultAuthMethod

  • defaultAuthMethod — 리소스가 VaultAuthMethod 참조를 지정하지 않을 때 사용할 기본 VaultAuthMethod CR을 구성하고 배포해요. 이름은 'default'이고 항상 오퍼레이터와 같은 네임스페이스에 설치돼요.

    참고: vault secrets operator를 TLS 구성을 활용하고 Vault를 자체 제한 네임스페이스에 설치하는 보안 Vault 환경에 배포하는 것을 강력히 권장해요.

    • enabled (boolean: false) — VaultAuthMethod CR 배포를 켜요.
    • namespace (string: "") — VaultAuthMethod CR의 Vault 네임스페이스예요.
    • allowedNamespaces (array<string>: []) — 기본 AuthMethod와 함께 사용하도록 허용 목록에 추가되는 Kubernetes 네임스페이스 글로브 패턴이에요.
    • method (string: kubernetes) — VaultAuthMethod CR과 함께 사용할 Vault 인증 방법이에요.
    • mount (string: kubernetes) — Vault Auth Method의 마운트 경로예요.
    • kubernetes — Vault Kubernetes 인증 방법별 구성
      • role (string: "") — 사용할 Vault Auth Role이에요. defaultAuthMethod.enabled=true면 Helm 차트 배포 전에 Vault에서 설정돼 있어야 하는 필수 필드예요.
      • serviceAccount (string: default) — 기본 Vault Auth Role과 연결된 Kubernetes ServiceAccount예요.
      • tokenAudiences (array<string>: []) — Token Audience는 vault kubernetes auth role의 audience와 일치해야 해요.
    • jwt — Vault JWT 인증 방법별 구성
      • role (string: "") — 사용할 Vault Auth Role이에요. 기본 인증 방법에 JWT를 사용한다면 Helm 차트 배포 전에 Vault에서 설정돼 있어야 하는 필수 필드예요.
      • secretRef (string: "") — Helm 차트 배포 전에 다음 중 하나가 필요해요.
        • JWT가 포함된 K8s secret
        • 서비스 어카운트 JWT를 Vault JWT 인증 토큰으로 사용하고 VSO가 생성해야 한다면 K8s 서비스 어카운트 Vault JWT 인증 토큰이 있는 Kubernetes Secret의 이름이에요. 시크릿에는 JWT 토큰을 참조하는 jwt라는 키가 있어야 하며, 소비하는 VaultSecret CR의 네임스페이스에 존재해야 해요. JWT 토큰을 제공하면 필수 필드예요.
      • serviceAccount (string: default) — 서비스 어카운트 JWT를 생성할 Kubernetes ServiceAccount예요.
      • tokenAudiences (array<string>: []) — Token Audience는 해당하는 경우 Vault JWT auth role의 bound_audiences 또는 bound_claims의 aud 목록과 일치해야 해요.
    • appRole — AppRole 인증 방법별 구성
      • roleId (string: "") — Vault 인증에 사용할 AppRole Role의 RoleID예요. appRole을 사용할 때 필수 필드이며 Helm 차트 배포 전에 Vault에서 설정돼 있어야 해요.
      • secretRef (string: "") — Vault 인증에 사용할 AppRole Role의 SecretID가 있는 Kubernetes Secret의 이름이에요. 시크릿에는 AppRole Role의 SecretID를 참조하는 id라는 키가 있어야 하며, 소비하는 VaultSecret CR의 네임스페이스에 존재해야 해요. appRole을 사용할 때 필수 필드이며 Helm 차트 배포 전에 Vault에서 설정돼 있어야 해요.
    • aws — AWS 인증 방법별 구성
      • role (string: "") — 사용할 Vault Auth Role이에요. 기본 인증 방법에 AWS를 사용한다면 Helm 차트 배포 전에 Vault에서 설정돼 있어야 하는 필수 필드예요.
      • region (string: "") — 인증 요청 서명에 사용할 AWS 리전이에요. 선택 사항이지만 대부분 EKS 클러스터가 실행되는 리전이에요.
      • headerValue (string: "") — STS 서명 요청에 포함할 Vault 헤더 값이에요.
      • sessionName (string: "") — WebIdentity provider를 만들 때 사용할 역할 세션 이름이에요.
      • stsEndpoint (string: "") — 사용할 STS 엔드포인트예요. 설정하지 않으면 기본값을 사용해요.
      • iamEndpoint (string: "") — 사용할 IAM 엔드포인트예요. 설정하지 않으면 기본값을 사용해요.
      • secretRef (string: "") — AWS 자격 증명을 보관하는 Kubernetes Secret의 이름이에요. 지원 키: access_key_id, secret_access_key, session_token
      • irsaServiceAccount (string: "") — IRSA로 구성된 Kubernetes 서비스 어카운트의 이름이에요. "eks.amazonaws.com/role-arn" 주석이 있어야 해요.
    • gcp
      • role (string: "") — 사용할 Vault Auth Role이에요. Transit 인증 메서드에 GCP를 사용한다면 Helm 차트 배포 전에 Vault에서 설정돼 있어야 하는 필수 필드예요.
      • workloadIdentityServiceAccount (string: "") — GKE에서 워크로드 아이덴티티로 구성된 Kubernetes 서비스 어카운트의 이름이에요.
      • region (string: "") — GKE 클러스터 아이덴티티 제공자의 GCP 리전이에요. 지정하지 않으면 오퍼레이터 파드의 로컬 메타데이터 서버에서 반환된 리전을 기본값으로 사용해요.
      • clusterName (string: "") — GKE 클러스터 이름이에요. 지정하지 않으면 오퍼레이터 파드의 로컬 메타데이터 서버에서 반환된 클러스터 이름을 기본값으로 사용해요.
      • projectID (string: "") — GCP 프로젝트 id예요. 지정하지 않으면 오퍼레이터 파드의 로컬 메타데이터 서버에서 반환된 프로젝트 id를 기본값으로 사용해요.
    • params (map) — Vault에 인증할 때 사용할 파라미터예요.
      params:
        param-something1: "foo"
      
    • headers (map) — 모든 Vault 요청에 포함할 헤더예요.
      headers:
        X-vault-something1: "foo"
      
    • vaultAuthGlobalRef
      • enabled (boolean: false) — 기본 VaultAuth CR에 VaultAuthGlobal 구성을 포함할지 켜요.
      • name (string: "") — 참조할 VaultAuthGlobal CR의 이름이에요.
      • namespace (string: "") — 참조할 VaultAuthGlobal CR의 네임스페이스예요.
      • allowDefault (boolean: "") — 기본 글로벌 허용 여부예요.
      • mergeStrategy
        • headers (string: none) — headers의 병합 전략이에요. 유효 값: "replace", "merge", "none". 기본: "replace"
        • params (string: none) — params의 병합 전략이에요. 유효 값: "replace", "merge", "none". 기본: "replace"

telemetry

  • telemetry — Prometheus ServiceMonitor을 구성해요.
    • serviceMonitor
      • enabled (boolean: false) — 이 기능을 활성화하기 전에 Prometheus 오퍼레이터가 반드시 설치돼 있어야 해요. 그렇지 않으면 오퍼레이터가 제공하는 CustomResourceDefinitions가 없어 차트 설치가 실패해요. Helm 차트 설치 방법은 https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack 에서, 더 자세한 내용은 https://github.com/prometheus-operator/prometheus-operator 와 https://github.com/prometheus-operator/kube-prometheus 에서 확인할 수 있어요. Vault Secrets Operator ServiceMonitor CustomResource의 배포를 활성화해요.
      • selectors (string: "") — ServiceMonitor에 추가할 선택기 레이블이에요. 비어 있으면 기본값: release: prometheus
      • scheme (string: https) — Prometheus가 메트릭을 스크랩하는 서비스의 스킴이에요. VSO의 metrics service 스킴과 일치해야 해요.
      • port (string: https) — Prometheus가 메트릭을 스크랩하는 포트예요. VSO의 metrics service 포트와 일치해야 해요.
      • path (string: /metrics) — Prometheus가 메트릭을 스크랩하는 경로예요.
      • bearerTokenFile (string: /var/run/secrets/kubernetes.io/serviceaccount/token) — Prometheus가 메트릭 스크랩용 bearer 토큰을 읽는 파일이에요.
      • interval (string: 30s) — Prometheus가 메트릭을 스크랩하는 간격이에요.
      • scrapeTimeout (string: 10s) — Prometheus 스크랩의 제한 시간이에요.

hooks

  • hooks — Helm 훅의 동작을 구성해요.
    • resources — 모든 훅에 공통인 리소스예요.
      • limits: cpu (string: 500m), memory (string: 128Mi)
      • requests: cpu (string: 10m), memory (string: 64Mi)
    • upgradeCRDs — CRD 업그레이드를 처리하는 Helm 사전 업그레이드 훅을 구성해요.
      • enabled (boolean: true) — true로 설정하면 CRD를 자동으로 업그레이드해요. 비활성화하면 CRD를 업그레이드하려면 수동 개입이 필요하므로 항상 켜두는 것을 권장해요.
      • backoffLimit (integer: 5) — CRD 업그레이드의 재시도 횟수를 제한해요.
      • executionTimeout (string: 30s) — CRD 업그레이드의 제한 시간을 설정해요. 보통 이 작업은 5초도 안 걸려요.

csi

  • csi
    • enabled (boolean: false) — Vault Enterprise 서버만 지원해요. Vault Secrets Operator CSI 드라이버 배포를 켜요. enabled를 true로 설정하면 CSI 드라이버와 필요한 리소스를 클러스터에 배포해요.
    • securityContext — 파드 레벨 보안 컨텍스트를 구성해요. https://kubernetes.io/docs/tasks/configure-pod-container/security-context

      참고: 드라이버 컨테이너 보안 컨텍스트는 아래에서 구성할 수 있어요.

    • hostAliases (array<map>) — vault-secrets-operator-csi 파드의 Host Aliases 설정을 PodSpec HostAlias 맵 배열로 지정해요. ref: https://kubernetes.io/docs/tasks/network/customize-hosts-file-for-pods/
      hostAliases:
        - ip: 192.168.1.100
          hostnames:
          - vault.example.com
      
    • nodeSelector (map) — vault-secrets-operator-csi 파드 할당을 위한 node selector 레이블이에요. ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#nodeselector
      nodeSelector:
        beta.kubernetes.io/arch: amd64
      
    • tolerations (array<map>) — vault-secrets-operator-csi 파드의 Toleration 설정을 PodSpec Toleration 맵 배열로 지정해요. ref: https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/
      tolerations:
       - key: "key1"
         operator: "Equal"
         value: "value1"
         effect: "NoSchedule"
      
    • affinity — vault-secrets-operator-csi 파드의 Affinity 설정을 PodSpec Affinity 맵으로 지정해요. ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#affinity-and-anti-affinity
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: topology.kubernetes.io/zone
                operator: In
                values:
                - antarctica-east1
                - antarctica-west1
      
    • imagePullSecrets (array<map>) — 컨트롤러 서비스 어카운트의 프라이빗 컨테이너 레지스트리 인증용 이미지 풀 시크릿을 맵 또는 문자열 배열로 지정해요. https://kubernetes.io/docs/concepts/containers/images/#using-a-private-registry 참고.
      imagePullSecrets:
        - name: pull-secret-name-1
        - name: pull-secret-name-2
      
    • extraLabels — YAML 객체(map)로 된 추가 배포 레이블이에요.
    • annotations — YAML 객체(map)로 된 추가 배포 주석이에요.
    • driver
      • securityContext — 드라이버 컨테이너의 보안 컨텍스트를 구성해요. https://kubernetes.io/docs/tasks/configure-pod-container/security-context

        참고: 파드 레벨 보안은 위에서 구성할 수 있어요. 참고: OpenShift 클러스터에 배포할 때는 privileged: true로 설정해야 해요.

      • image — CSI 드라이버의 이미지 정보예요. ref: https://kubernetes.io/docs/concepts/containers/images/
        • pullPolicy (string: IfNotPresent) — kubelet이 지정된 이미지를 내려받으려고 시도하는 시점을 결정해요.
        • repository (string: hashicorp/vault-secrets-operator-csi) — CSI 드라이버 이미지의 Docker 레포지토리예요.
        • tag (string: 1.0.3) — 내려받을 CSI 드라이버 이미지 버전이에요.
      • extraEnv (array<map>) — CSI 드라이버 컨테이너의 추가 환경 변수예요.
      • extraArgs (array: []) — CSI 드라이버에 전달할 추가 인자예요.
      • logging — CSI 드라이버의 로깅 출력 설정을 구성해요.
        • level (string: info) — CSI 드라이버의 로그 레벨을 설정해요. 다음 중 하나여야 해요: info, error, debug, debug-extended, trace. 기본: info
        • timeEncoding (string: rfc3339) — CSI 드라이버의 시간 인코딩을 설정해요. 다음 중 하나여야 해요:
          • epoch — 초 단위 유닉스 타임스탬프 (예: 1695382800)
          • millis — 밀리초 단위 유닉스 타임스탬프 (예: 1695382800000)
          • nano — 나노초 단위 유닉스 타임스탬프 (예: 1695382800000000000)
          • iso8601 — ISO 8601 형식 (예: 2023-09-22T10:00:00Z)
          • rfc3339 — RFC 3339 형식 (예: 2023-09-22T10:00:00Z)
          • rfc3339nano — 나노초 정밀도의 RFC 3339 형식 (예: 2023-09-22T10:00:00.123456789Z). 기본: rfc3339
        • stacktraceLevel (string: panic) — CSI 드라이버의 스택트레이스 레벨을 설정해요. 다음 중 하나여야 해요: info, error, panic. 기본: panic
      • backoffOnSecretSourceError (object: "") — 드라이버가 SecretSource에서 시크릿을 가져올 때 오류가 발생하면 CSI 드라이버의 백오프 동작을 설명해요. 예를 들어 다음 구성은 5.5s, 7.5s, 11.25s, 16.87s, 25.3125s, 37.96s, 56.95s, 60.95s... 같은 백오프 재시도 시퀀스를 만들 수 있어요.
        initialInterval: 5s
        maxInterval: 60s
        randomizationFactor: 0.5
        multiplier: 1.5
        
        • initialInterval (duration: 5s) — 재시도 사이의 초기 간격이에요.
        • maxInterval (duration: 60s) — 재시도 사이의 최대 간격이에요.
        • maxElapsedTime (duration: 0s) — 시크릿 소스에서 성공적인 동기화 없이 경과할 수 있는 최대 시간이에요. 명시적 maxElapsedTime을 설정하면 VSO가 최대 경과 시간에 도달한 뒤 시크릿 동기화를 재시도하지 않아요.
        • randomizationFactor (float: 0.5) — 재시도 사이 백오프 간격을 무작위화해 재시도를 분산하고 군집 요청을 피하는 데 사용하는 커스텀 요소예요. 무작위화 요소 사용을 강력히 권장하지만, 비활성화하려면 randomizationFactor를 0으로 설정할 수 있어요.
        • multiplier (float: 1.5) — 재시도 사이 백오프 간격을 늘리는 데 사용하는 승수예요. multiplier를 0보다 작거나 같은 값으로 설정할 수 없어요.
    • livenessProbe — liveness probe가 CSI 드라이버 컨테이너의 상태를 확인해요.
      • image — CSI 드라이버 liveness probe의 이미지 정보예요. ref: https://kubernetes.io/docs/concepts/containers/images/
        • pullPolicy (string: IfNotPresent) — kubelet이 지정된 이미지를 내려받으려고 시도하는 시점을 결정해요.
        • repository (string: registry.k8s.io/sig-storage/livenessprobe) — liveness probe 이미지의 Docker 레포지토리예요.
        • tag (string: v2.16.0) — 내려받을 liveness probe 이미지 버전이에요.
      • extraArgs (array: []) — liveness probe 컨테이너에 전달할 추가 인자예요.
    • nodeDriverRegistrar — node driver registrar 사이드카 컨테이너가 kubelet과의 등록을 처리해요.
      • image — CSI 드라이버 node driver registrar의 이미지 정보예요. ref: https://kubernetes.io/docs/concepts/containers/images/
        • pullPolicy (string: IfNotPresent) — kubelet이 지정된 이미지를 내려받으려고 시도하는 시점을 결정해요.
        • repository (string: registry.k8s.io/sig-storage/csi-node-driver-registrar) — node driver registrar 이미지의 Docker 레포지토리예요.
        • tag (string: v2.14.0) — 내려받을 node driver registrar 이미지 버전이에요.
      • extraArgs (array: []) — node driver registrar 컨테이너에 전달할 추가 인자예요.
    • updateStrategy (object: "") — CSI 드라이버 DaemonSet의 업데이트 전략을 구성해요. 다음 중 하나여야 해요: Recreate, RollingUpdate. ref: https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#strategy
      strategy: {}
        rollingUpdate:
          maxSurge: 1
          maxUnavailable: 0
        type: RollingUpdate
      

tests

  • tests — 단위 테스트에서 사용하며 helm template을 사용할 때를 제외하고는 렌더링되지 않아요. 안전하게 무시할 수 있어요.
    • enabled (boolean: true)

Helm 차트 예시 (Helm chart examples)

아래 config.yaml은 기본 vault connection과 auth method 커스텀 리소스를 배포한 Vault Secrets Operator의 단일 레플리카 설치를 나타내요. 쿠버네티스 클러스터 안에서 로컬 Vault가 http://vault.default.svc.cluster.local:8200으로 접근 가능하고 TLS가 비활성화되어 있으며, 기본 ServiceAccount에 Vault Auth Method가 구성되어 있다고 가정해요.

# config.yaml

defaultVaultConnection:
  enabled: true
defaultAuthMethod:
  enabled: true

Helm 차트 커스터마이즈 (Customizing the helm chart)

추가 옵션으로 Helm 차트를 확장해야 한다면, vault-secrets-operator 프로젝트의 repo config/ 경로에 있는 kustomize 같은 서드파티 도구를 사용하는 것을 권장해요.

더 알아보기 (Learn more)