302 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
			
		
		
	
	
			302 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
vault:
 | 
						|
  global:
 | 
						|
    enabled: true
 | 
						|
    tlsDisable: true
 | 
						|
    psp:
 | 
						|
      enable: false
 | 
						|
    serverTelemetry:
 | 
						|
      prometheusOperator: true
 | 
						|
  injector:
 | 
						|
    enabled: false
 | 
						|
  server:
 | 
						|
    enabled: true
 | 
						|
    image:
 | 
						|
      repository: hashicorp/vault
 | 
						|
      tag: 1.20.1
 | 
						|
    updateStrategyType: "RollingUpdate"
 | 
						|
    logLevel: debug
 | 
						|
    logFormat: standard
 | 
						|
    resources:
 | 
						|
      requests:
 | 
						|
        cpu: 50m
 | 
						|
        memory: 512Mi
 | 
						|
    ingress:
 | 
						|
      enabled: false
 | 
						|
    route:
 | 
						|
      enabled: false
 | 
						|
    authDelegator:
 | 
						|
      enabled: false
 | 
						|
    readinessProbe:
 | 
						|
      enabled: true
 | 
						|
      port: 8200
 | 
						|
    livenessProbe:
 | 
						|
      enabled: false
 | 
						|
    volumes:
 | 
						|
      - name: vault-nfs-storage-backup
 | 
						|
        persistentVolumeClaim:
 | 
						|
          claimName: vault-nfs-storage-backup
 | 
						|
    volumeMounts:
 | 
						|
      - mountPath: /opt/backups/
 | 
						|
        name: vault-nfs-storage-backup
 | 
						|
        readOnly: false
 | 
						|
    affinity: |
 | 
						|
      podAntiAffinity:
 | 
						|
        requiredDuringSchedulingIgnoredDuringExecution:
 | 
						|
          - labelSelector:
 | 
						|
              matchLabels:
 | 
						|
                app.kubernetes.io/name: {{ template "vault.name" . }}
 | 
						|
                app.kubernetes.io/instance: "{{ .Release.Name }}"
 | 
						|
                component: server
 | 
						|
            topologyKey: kubernetes.io/hostname
 | 
						|
    networkPolicy:
 | 
						|
      enabled: false
 | 
						|
    service:
 | 
						|
      enabled: true
 | 
						|
      active:
 | 
						|
        enabled: true
 | 
						|
      standby:
 | 
						|
        enabled: false
 | 
						|
      type: ClusterIP
 | 
						|
      port: 8200
 | 
						|
      targetPort: 8200
 | 
						|
    dataStorage:
 | 
						|
      enabled: true
 | 
						|
      size: 1Gi
 | 
						|
      mountPath: "/vault/data"
 | 
						|
      accessMode: ReadWriteOnce
 | 
						|
    auditStorage:
 | 
						|
      enabled: false
 | 
						|
      size: 5Gi
 | 
						|
      mountPath: "/vault/audit"
 | 
						|
      accessMode: ReadWriteOnce
 | 
						|
    dev:
 | 
						|
      enabled: false
 | 
						|
    standalone:
 | 
						|
      enabled: false
 | 
						|
    ha:
 | 
						|
      enabled: true
 | 
						|
      replicas: 3
 | 
						|
      raft:
 | 
						|
        enabled: true
 | 
						|
        config: |
 | 
						|
          ui = true
 | 
						|
 | 
						|
          listener "tcp" {
 | 
						|
            tls_disable = 1
 | 
						|
            address = "[::]:8200"
 | 
						|
            cluster_address = "[::]:8201"
 | 
						|
            telemetry {
 | 
						|
              unauthenticated_metrics_access = "true"
 | 
						|
            }
 | 
						|
          }
 | 
						|
 | 
						|
          storage "raft" {
 | 
						|
            path = "/vault/data"
 | 
						|
            retry_join {
 | 
						|
              leader_api_addr = "http://vault-0.vault-internal:8200"
 | 
						|
            }
 | 
						|
            retry_join {
 | 
						|
              leader_api_addr = "http://vault-1.vault-internal:8200"
 | 
						|
            }
 | 
						|
            retry_join {
 | 
						|
              leader_api_addr = "http://vault-2.vault-internal:8200"
 | 
						|
            }
 | 
						|
          }
 | 
						|
 | 
						|
          service_registration "kubernetes" {}
 | 
						|
 | 
						|
          telemetry {
 | 
						|
            prometheus_retention_time = "30s"
 | 
						|
            disable_hostname = true
 | 
						|
          }
 | 
						|
 | 
						|
      disruptionBudget:
 | 
						|
        enabled: true
 | 
						|
        maxUnavailable: null
 | 
						|
    serviceAccount:
 | 
						|
      create: true
 | 
						|
      serviceDiscovery:
 | 
						|
        enabled: true
 | 
						|
    hostNetwork: false
 | 
						|
  ui:
 | 
						|
    enabled: true
 | 
						|
    publishNotReadyAddresses: true
 | 
						|
    activeVaultPodOnly: false
 | 
						|
    serviceType: "ClusterIP"
 | 
						|
    serviceNodePort: null
 | 
						|
    externalPort: 8200
 | 
						|
    targetPort: 8200
 | 
						|
  csi:
 | 
						|
    enabled: false
 | 
						|
  serverTelemetry:
 | 
						|
    serviceMonitor:
 | 
						|
      enabled: true
 | 
						|
      interval: 30s
 | 
						|
      scrapeTimeout: 10s
 | 
						|
    prometheusRules:
 | 
						|
      enabled: true
 | 
						|
      rules:
 | 
						|
        - alert: vault-HighResponseTime
 | 
						|
          annotations:
 | 
						|
            message: The response time of Vault is over 500ms on average over the last 5 minutes.
 | 
						|
          expr: vault_core_handle_request{quantile="0.5", namespace="mynamespace"} > 500
 | 
						|
          for: 5m
 | 
						|
          labels:
 | 
						|
            severity: warning
 | 
						|
        - alert: vault-HighResponseTime
 | 
						|
          annotations:
 | 
						|
            message: The response time of Vault is over 1s on average over the last 5 minutes.
 | 
						|
          expr: vault_core_handle_request{quantile="0.5", namespace="mynamespace"} > 1000
 | 
						|
          for: 5m
 | 
						|
          labels:
 | 
						|
            severity: critical
 | 
						|
snapshot:
 | 
						|
  global:
 | 
						|
    fullnameOverride: vault-snapshot
 | 
						|
  controllers:
 | 
						|
    snapshot:
 | 
						|
      type: cronjob
 | 
						|
      cronjob:
 | 
						|
        suspend: false
 | 
						|
        concurrencyPolicy: Forbid
 | 
						|
        timeZone: US/Central
 | 
						|
        schedule: 0 4 * * *
 | 
						|
        startingDeadlineSeconds: 90
 | 
						|
        successfulJobsHistory: 3
 | 
						|
        failedJobsHistory: 3
 | 
						|
        backoffLimit: 3
 | 
						|
        parallelism: 1
 | 
						|
      initContainers:
 | 
						|
        snapshot:
 | 
						|
          image:
 | 
						|
            repository: hashicorp/vault
 | 
						|
            tag: 1.20.1
 | 
						|
            pullPolicy: IfNotPresent
 | 
						|
          command:
 | 
						|
            - /bin/ash
 | 
						|
          args:
 | 
						|
            - -ec
 | 
						|
            - |
 | 
						|
              apk add --no-cache jq;
 | 
						|
              echo ">> Running Vault snapshot"
 | 
						|
              export VAULT_TOKEN=$(vault write auth/approle/login role_id=$VAULT_APPROLE_ROLE_ID secret_id=$VAULT_APPROLE_SECRET_ID -format=json | jq -r .auth.client_token);
 | 
						|
              vault operator raft snapshot save /opt/backup/vault-snapshot-latest.snap;
 | 
						|
              cp /opt/backup/vault-snapshot-latest.snap /opt/backup/vault-snapshot-$(date +"%Y%m%d-%H-%M").snap;
 | 
						|
              cp /opt/backup/vault-snapshot-latest.snap /opt/backup/vault-snapshot-s3.snap;
 | 
						|
              echo ">> Completed Vault snapshot"
 | 
						|
          envFrom:
 | 
						|
            - secretRef:
 | 
						|
                name: vault-snapshot-agent-token
 | 
						|
          env:
 | 
						|
            - name: VAULT_ADDR
 | 
						|
              value: http://vault-active.vault.svc.cluster.local:8200
 | 
						|
          resources:
 | 
						|
            requests:
 | 
						|
              cpu: 10m
 | 
						|
              memory: 64Mi
 | 
						|
      containers:
 | 
						|
        s3-backup:
 | 
						|
          image:
 | 
						|
            repository: d3fk/s3cmd
 | 
						|
            tag: latest@sha256:243e81a62890dcc76771240f38c7492365e72fee84b29692178337cfd80b2ce2
 | 
						|
            pullPolicy: IfNotPresent
 | 
						|
          command:
 | 
						|
            - /bin/sh
 | 
						|
          args:
 | 
						|
            - -ec
 | 
						|
            - |
 | 
						|
              echo ">> Running S3 backup for Vault snapshot"
 | 
						|
              s3cmd put --no-check-md5 --no-check-certificate -v /opt/backup/vault-snapshot-s3.snap ${BUCKET}/cl01tl/cl01tl-vault-snapshots/vault-snapshot-$(date +"%Y%m%d-%H-%M").snap;
 | 
						|
              rm -f /opt/backup/vault-snapshot-s3.snap;
 | 
						|
              echo ">> Completed S3 backup for Vault snapshot"
 | 
						|
          env:
 | 
						|
            - name: BUCKET
 | 
						|
              valueFrom:
 | 
						|
                secretKeyRef:
 | 
						|
                  name: vault-s3cmd-config
 | 
						|
                  key: BUCKET
 | 
						|
          resources:
 | 
						|
            requests:
 | 
						|
              cpu: 100m
 | 
						|
              memory: 128Mi
 | 
						|
  persistence:
 | 
						|
    config:
 | 
						|
      existingClaim: vault-nfs-storage-backup
 | 
						|
      advancedMounts:
 | 
						|
        snapshot:
 | 
						|
          snapshot:
 | 
						|
            - path: /opt/backup
 | 
						|
              readOnly: false
 | 
						|
          s3-backup:
 | 
						|
            - path: /opt/backup
 | 
						|
              readOnly: false
 | 
						|
    s3cmd-config:
 | 
						|
      enabled: true
 | 
						|
      type: secret
 | 
						|
      name: vault-s3cmd-config
 | 
						|
      advancedMounts:
 | 
						|
        snapshot:
 | 
						|
          s3-backup:
 | 
						|
            - path: /root/.s3cfg
 | 
						|
              readOnly: true
 | 
						|
              mountPropagation: None
 | 
						|
              subPath: .s3cfg
 | 
						|
unseal:
 | 
						|
  global:
 | 
						|
    fullnameOverride: vault-unseal
 | 
						|
  controllers:
 | 
						|
    unseal-1:
 | 
						|
      type: deployment
 | 
						|
      replicas: 1
 | 
						|
      strategy: Recreate
 | 
						|
      revisionHistoryLimit: 3
 | 
						|
      containers:
 | 
						|
        main:
 | 
						|
          image:
 | 
						|
            repository: ghcr.io/lrstanley/vault-unseal
 | 
						|
            tag: 0.7.2
 | 
						|
            pullPolicy: IfNotPresent
 | 
						|
          envFrom:
 | 
						|
            - secretRef:
 | 
						|
                name: vault-unseal-config-1
 | 
						|
          resources:
 | 
						|
            requests:
 | 
						|
              cpu: 10m
 | 
						|
              memory: 24Mi
 | 
						|
    unseal-2:
 | 
						|
      type: deployment
 | 
						|
      replicas: 1
 | 
						|
      strategy: Recreate
 | 
						|
      revisionHistoryLimit: 3
 | 
						|
      containers:
 | 
						|
        main:
 | 
						|
          image:
 | 
						|
            repository: ghcr.io/lrstanley/vault-unseal
 | 
						|
            tag: 0.7.2
 | 
						|
            pullPolicy: IfNotPresent
 | 
						|
          envFrom:
 | 
						|
            - secretRef:
 | 
						|
                name: vault-unseal-config-2
 | 
						|
          resources:
 | 
						|
            requests:
 | 
						|
              cpu: 10m
 | 
						|
              memory: 24Mi
 | 
						|
    unseal-3:
 | 
						|
      type: deployment
 | 
						|
      replicas: 1
 | 
						|
      strategy: Recreate
 | 
						|
      revisionHistoryLimit: 3
 | 
						|
      containers:
 | 
						|
        main:
 | 
						|
          image:
 | 
						|
            repository: ghcr.io/lrstanley/vault-unseal
 | 
						|
            tag: 0.7.2
 | 
						|
            pullPolicy: IfNotPresent
 | 
						|
          envFrom:
 | 
						|
            - secretRef:
 | 
						|
                name: vault-unseal-config-3
 | 
						|
          resources:
 | 
						|
            requests:
 | 
						|
              cpu: 10m
 | 
						|
              memory: 24Mi
 |