create helm charts for snapshot and unseal jobs
This commit is contained in:
		| @@ -16,5 +16,13 @@ dependencies: | ||||
|   - name: vault | ||||
|     version: 0.28.0 | ||||
|     repository: https://helm.releases.hashicorp.com | ||||
|   - name: app-template | ||||
|     alias: snapshot | ||||
|     repository: https://bjw-s.github.io/helm-charts/ | ||||
|     version: 3.2.1 | ||||
|   - name: app-template | ||||
|     alias: vault-unseal | ||||
|     repository: https://bjw-s.github.io/helm-charts/ | ||||
|     version: 3.2.1 | ||||
| icon: https://raw.githubusercontent.com/walkxcode/dashboard-icons/main/png/vault.png | ||||
| appVersion: 1.17.0 | ||||
|   | ||||
| @@ -1,64 +0,0 @@ | ||||
| apiVersion: batch/v1 | ||||
| kind: CronJob | ||||
| metadata: | ||||
|   name: vault-snapshot-cronjob | ||||
|   namespace: {{ .Release.Namespace }} | ||||
|   labels: | ||||
|     app.kubernetes.io/name: vault-snapshot-cronjob | ||||
|     app.kubernetes.io/instance: {{ .Release.Name }} | ||||
|     app.kubernetes.io/version: {{ .Chart.AppVersion }} | ||||
|     app.kubernetes.io/component: storage | ||||
|     app.kubernetes.io/part-of: {{ .Release.Name }}   | ||||
| spec: | ||||
|   schedule: "@every 24h" | ||||
|   successfulJobsHistoryLimit: 3 | ||||
|   failedJobsHistoryLimit: 3   | ||||
|   jobTemplate: | ||||
|     spec: | ||||
|       template: | ||||
|         spec: | ||||
|           restartPolicy: OnFailure         | ||||
|           containers: | ||||
|             - name: snapshot | ||||
|               image: hashicorp/vault:1.16.2 | ||||
|               imagePullPolicy: IfNotPresent | ||||
|               command: | ||||
|                 - /bin/ash | ||||
|               args: | ||||
|                 - -ec | ||||
|                 - | | ||||
|                   apk add --no-cache jq; | ||||
|                   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; | ||||
|               envFrom: | ||||
|                 - secretRef: | ||||
|                     name: vault-snapshot-agent-token | ||||
|               env: | ||||
|                 - name: VAULT_ADDR | ||||
|                   value: http://vault-active.vault.svc.cluster.local:8200 | ||||
|               volumeMounts: | ||||
|                 - mountPath: /opt/backup | ||||
|                   name: backup | ||||
|             - name: upload | ||||
|               image: amazon/aws-cli:2.15.42 | ||||
|               imagePullPolicy: IfNotPresent | ||||
|               command: | ||||
|                 - /bin/sh | ||||
|               args: | ||||
|                 - -ec | ||||
|                 - | | ||||
|                   until [ -f /opt/backup/vault-snapshot-s3.snap ]; do sleep 5; done; | ||||
|                   aws s3 cp /opt/backup/vault-snapshot-s3.snap s3://cl01tl-vault-snapshots/vault-snapshot-$(date +"%Y%m%d-%H-%M").snap; | ||||
|                   rm /opt/backup/vault-snapshot-s3.snap; | ||||
|               envFrom: | ||||
|                 - secretRef: | ||||
|                     name: vault-snapshot-s3 | ||||
|               volumeMounts: | ||||
|                 - mountPath: /opt/backup | ||||
|                   name: backup | ||||
|           volumes: | ||||
|             - name: backup | ||||
|               persistentVolumeClaim: | ||||
|                 claimName: vault-nfs-storage-backup                   | ||||
							
								
								
									
										243
									
								
								clusters/cl01tl/platform/vault/templates/external-secret.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										243
									
								
								clusters/cl01tl/platform/vault/templates/external-secret.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,243 @@ | ||||
| apiVersion: external-secrets.io/v1beta1 | ||||
| kind: ExternalSecret | ||||
| metadata: | ||||
|   name: vault-snapshot-agent-token | ||||
|   namespace: {{ .Release.Namespace }} | ||||
|   labels: | ||||
|     app.kubernetes.io/name: vault-snapshot-agent-token | ||||
|     app.kubernetes.io/instance: {{ .Release.Name }} | ||||
|     app.kubernetes.io/version: {{ .Chart.AppVersion }} | ||||
|     app.kubernetes.io/component: snapshot | ||||
|     app.kubernetes.io/part-of: {{ .Release.Name }} | ||||
| spec: | ||||
|   secretStoreRef: | ||||
|     kind: ClusterSecretStore | ||||
|     name: vault | ||||
|   data: | ||||
|     - secretKey: VAULT_APPROLE_ROLE_ID | ||||
|       remoteRef: | ||||
|         conversionStrategy: Default | ||||
|         decodingStrategy: None | ||||
|         key: /cl01tl/vault/snapshot/approle | ||||
|         metadataPolicy: None | ||||
|         property: role-id | ||||
|     - secretKey: VAULT_APPROLE_SECRET_ID | ||||
|       remoteRef: | ||||
|         conversionStrategy: Default | ||||
|         decodingStrategy: None | ||||
|         key: /cl01tl/vault/snapshot/approle | ||||
|         metadataPolicy: None | ||||
|         property: secret-id | ||||
|  | ||||
| --- | ||||
| apiVersion: external-secrets.io/v1beta1 | ||||
| kind: ExternalSecret | ||||
| metadata: | ||||
|   name: vault-snapshot-s3 | ||||
|   namespace: {{ .Release.Namespace }} | ||||
|   labels: | ||||
|     app.kubernetes.io/name: vault-snapshot-s3 | ||||
|     app.kubernetes.io/instance: {{ .Release.Name }} | ||||
|     app.kubernetes.io/version: {{ .Chart.AppVersion }} | ||||
|     app.kubernetes.io/component: snapshot | ||||
|     app.kubernetes.io/part-of: {{ .Release.Name }} | ||||
| spec: | ||||
|   secretStoreRef: | ||||
|     kind: ClusterSecretStore | ||||
|     name: vault | ||||
|   data: | ||||
|     - secretKey: AWS_ACCESS_KEY_ID | ||||
|       remoteRef: | ||||
|         conversionStrategy: Default | ||||
|         decodingStrategy: None | ||||
|         key: /cl01tl/vault/approle/job | ||||
|         metadataPolicy: None | ||||
|         property: AWS_ACCESS_KEY_ID | ||||
|     - secretKey: AWS_DEFAULT_REGION | ||||
|       remoteRef: | ||||
|         conversionStrategy: Default | ||||
|         decodingStrategy: None | ||||
|         key: /cl01tl/vault/approle/job | ||||
|         metadataPolicy: None | ||||
|         property: AWS_DEFAULT_REGION | ||||
|     - secretKey: AWS_ENDPOINT_URL | ||||
|       remoteRef: | ||||
|         conversionStrategy: Default | ||||
|         decodingStrategy: None | ||||
|         key: /cl01tl/vault/approle/job | ||||
|         metadataPolicy: None | ||||
|         property: AWS_ENDPOINT_URL | ||||
|     - secretKey: AWS_SECRET_ACCESS_KEY | ||||
|       remoteRef: | ||||
|         conversionStrategy: Default | ||||
|         decodingStrategy: None | ||||
|         key: /cl01tl/vault/approle/job | ||||
|         metadataPolicy: None | ||||
|         property: AWS_SECRET_ACCESS_KEY | ||||
|  | ||||
| --- | ||||
| apiVersion: external-secrets.io/v1beta1 | ||||
| kind: ExternalSecret | ||||
| metadata: | ||||
|   name: vault-unseal-agent-token | ||||
|   namespace: {{ .Release.Namespace }} | ||||
|   labels: | ||||
|     app.kubernetes.io/name: vault-unseal-agent-token | ||||
|     app.kubernetes.io/instance: {{ .Release.Name }} | ||||
|     app.kubernetes.io/version: {{ .Chart.AppVersion }} | ||||
|     app.kubernetes.io/component: unseal | ||||
|     app.kubernetes.io/part-of: {{ .Release.Name }} | ||||
| spec: | ||||
|   secretStoreRef: | ||||
|     kind: ClusterSecretStore | ||||
|     name: vault | ||||
|   data: | ||||
|     - secretKey: VAULT_APPROLE_ROLE_ID | ||||
|       remoteRef: | ||||
|         conversionStrategy: Default | ||||
|         decodingStrategy: None | ||||
|         key: /cl01tl/vault/unseal/approle | ||||
|         metadataPolicy: None | ||||
|         property: role-id | ||||
|     - secretKey: VAULT_APPROLE_SECRET_ID | ||||
|       remoteRef: | ||||
|         conversionStrategy: Default | ||||
|         decodingStrategy: None | ||||
|         key: /cl01tl/vault/unseal/approle | ||||
|         metadataPolicy: None | ||||
|         property: secret-id | ||||
|  | ||||
| --- | ||||
| apiVersion: external-secrets.io/v1beta1 | ||||
| kind: ExternalSecret | ||||
| metadata: | ||||
|   name: vault-unseal-config-1 | ||||
|   namespace: {{ .Release.Namespace }} | ||||
|   labels: | ||||
|     app.kubernetes.io/name: vault-unseal-key-1 | ||||
|     app.kubernetes.io/instance: {{ .Release.Name }} | ||||
|     app.kubernetes.io/version: {{ .Chart.AppVersion }} | ||||
|     app.kubernetes.io/component: unseal | ||||
|     app.kubernetes.io/part-of: {{ .Release.Name }} | ||||
| spec: | ||||
|   secretStoreRef: | ||||
|     kind: ClusterSecretStore | ||||
|     name: vault | ||||
|   data: | ||||
|     - secretKey: vault-unseal.yaml | ||||
|       remoteRef: | ||||
|         conversionStrategy: Default | ||||
|         decodingStrategy: None | ||||
|         key: /cl01tl/vault/unseal/config | ||||
|         metadataPolicy: None | ||||
|         property: vault-unseal.yaml-1 | ||||
|  | ||||
| --- | ||||
| apiVersion: external-secrets.io/v1beta1 | ||||
| kind: ExternalSecret | ||||
| metadata: | ||||
|   name: vault-unseal-config-2 | ||||
|   namespace: {{ .Release.Namespace }} | ||||
|   labels: | ||||
|     app.kubernetes.io/name: vault-unseal-key-2 | ||||
|     app.kubernetes.io/instance: {{ .Release.Name }} | ||||
|     app.kubernetes.io/version: {{ .Chart.AppVersion }} | ||||
|     app.kubernetes.io/component: unseal | ||||
|     app.kubernetes.io/part-of: {{ .Release.Name }} | ||||
| spec: | ||||
|   secretStoreRef: | ||||
|     kind: ClusterSecretStore | ||||
|     name: vault | ||||
|   data: | ||||
|     - secretKey: vault-unseal.yaml | ||||
|       remoteRef: | ||||
|         conversionStrategy: Default | ||||
|         decodingStrategy: None | ||||
|         key: /cl01tl/vault/unseal/config | ||||
|         metadataPolicy: None | ||||
|         property: vault-unseal.yaml-2 | ||||
|  | ||||
| --- | ||||
| apiVersion: external-secrets.io/v1beta1 | ||||
| kind: ExternalSecret | ||||
| metadata: | ||||
|   name: vault-unseal-config-3 | ||||
|   namespace: {{ .Release.Namespace }} | ||||
|   labels: | ||||
|     app.kubernetes.io/name: vault-unseal-config-3 | ||||
|     app.kubernetes.io/instance: {{ .Release.Name }} | ||||
|     app.kubernetes.io/version: {{ .Chart.AppVersion }} | ||||
|     app.kubernetes.io/component: unseal | ||||
|     app.kubernetes.io/part-of: {{ .Release.Name }} | ||||
| spec: | ||||
|   secretStoreRef: | ||||
|     kind: ClusterSecretStore | ||||
|     name: vault | ||||
|   data: | ||||
|     - secretKey: vault-unseal.yaml | ||||
|       remoteRef: | ||||
|         conversionStrategy: Default | ||||
|         decodingStrategy: None | ||||
|         key: /cl01tl/vault/unseal/config | ||||
|         metadataPolicy: None | ||||
|         property: vault-unseal.yaml-3 | ||||
|  | ||||
| --- | ||||
| apiVersion: external-secrets.io/v1beta1 | ||||
| kind: ExternalSecret | ||||
| metadata: | ||||
|   name: vault-token | ||||
|   namespace: {{ .Release.Namespace }} | ||||
|   labels: | ||||
|     app.kubernetes.io/name: vault-token | ||||
|     app.kubernetes.io/instance: {{ .Release.Name }} | ||||
|     app.kubernetes.io/version: {{ .Chart.AppVersion }} | ||||
|     app.kubernetes.io/component: token | ||||
|     app.kubernetes.io/part-of: {{ .Release.Name }} | ||||
| spec: | ||||
|   secretStoreRef: | ||||
|     kind: ClusterSecretStore | ||||
|     name: vault | ||||
|   data: | ||||
|     - secretKey: token | ||||
|       remoteRef: | ||||
|         conversionStrategy: Default | ||||
|         decodingStrategy: None | ||||
|         key: /cl01tl/vault/token | ||||
|         metadataPolicy: None | ||||
|         property: token | ||||
|     - secretKey: unseal_key_1 | ||||
|       remoteRef: | ||||
|         conversionStrategy: Default | ||||
|         decodingStrategy: None | ||||
|         key: /cl01tl/vault/token | ||||
|         metadataPolicy: None | ||||
|         property: unseal_key_1 | ||||
|     - secretKey: unseal_key_2 | ||||
|       remoteRef: | ||||
|         conversionStrategy: Default | ||||
|         decodingStrategy: None | ||||
|         key: /cl01tl/vault/token | ||||
|         metadataPolicy: None | ||||
|         property: unseal_key_2 | ||||
|     - secretKey: unseal_key_3 | ||||
|       remoteRef: | ||||
|         conversionStrategy: Default | ||||
|         decodingStrategy: None | ||||
|         key: /cl01tl/vault/token | ||||
|         metadataPolicy: None | ||||
|         property: unseal_key_3 | ||||
|     - secretKey: unseal_key_4 | ||||
|       remoteRef: | ||||
|         conversionStrategy: Default | ||||
|         decodingStrategy: None | ||||
|         key: /cl01tl/vault/token | ||||
|         metadataPolicy: None | ||||
|         property: unseal_key_4 | ||||
|     - secretKey: unseal_key_5 | ||||
|       remoteRef: | ||||
|         conversionStrategy: Default | ||||
|         decodingStrategy: None | ||||
|         key: /cl01tl/vault/token | ||||
|         metadataPolicy: None | ||||
|         property: unseal_key_5 | ||||
| @@ -18,7 +18,7 @@ vault: | ||||
|     logFormat: standard | ||||
|     resources: | ||||
|       requests: | ||||
|         cpu: 100m       | ||||
|         cpu: 100m | ||||
|         memory: 256Mi | ||||
|     ingress: | ||||
|       enabled: true | ||||
| @@ -165,3 +165,154 @@ vault: | ||||
|           for: 5m | ||||
|           labels: | ||||
|             severity: critical | ||||
| snapshot: | ||||
|   controllers: | ||||
|     main: | ||||
|       type: cronjob | ||||
|       cronjob: | ||||
|         suspend: false | ||||
|         concurrencyPolicy: Forbid | ||||
|         timeZone: US/Central | ||||
|         schedule: "@every 24h" | ||||
|         startingDeadlineSeconds: 90 | ||||
|         successfulJobsHistory: 3 | ||||
|         failedJobsHistory: 3 | ||||
|         backoffLimit: 3 | ||||
|         parallelism: 1 | ||||
|       containers: | ||||
|         snapshot: | ||||
|           image: | ||||
|             repository: hashicorp/vault | ||||
|             tag: 1.16.2 | ||||
|             pullPolicy: IfNotPresent | ||||
|           command: | ||||
|             - /bin/ash | ||||
|           args: | ||||
|             - -ec | ||||
|             - | | ||||
|               apk add --no-cache jq; | ||||
|               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; | ||||
|           envFrom: | ||||
|             - secretRef: | ||||
|                 name: vault-snapshot-agent-token | ||||
|           env: | ||||
|             - name: VAULT_ADDR | ||||
|               value: http://vault-active.vault.svc.cluster.local:8200 | ||||
|           resources: | ||||
|             requests: | ||||
|               cpu: 100m | ||||
|               memory: 128Mi | ||||
|         backup: | ||||
|           image: | ||||
|             repository: amazon/aws-cli | ||||
|             tag: 2.15.42 | ||||
|             pullPolicy: IfNotPresent | ||||
|           command: | ||||
|             - /bin/sh | ||||
|           args: | ||||
|             - -ec | ||||
|             - | | ||||
|               until [ -f /opt/backup/vault-snapshot-s3.snap ]; do sleep 5; done; | ||||
|               aws s3 cp /opt/backup/vault-snapshot-s3.snap s3://cl01tl-vault-snapshots/vault-snapshot-$(date +"%Y%m%d-%H-%M").snap; | ||||
|               rm /opt/backup/vault-snapshot-s3.snap; | ||||
|           envFrom: | ||||
|             - secretRef: | ||||
|                 name: vault-snapshot-s3 | ||||
|           resources: | ||||
|             requests: | ||||
|               cpu: 100m | ||||
|               memory: 128Mi | ||||
|   serviceAccount: | ||||
|     create: true | ||||
|   persistence: | ||||
|     config: | ||||
|       existingClaim: vault-nfs-storage-backup | ||||
|       advancedMounts: | ||||
|         main: | ||||
|           snapshot: | ||||
|             - path: /opt/backup | ||||
|               readOnly: false | ||||
|           backup: | ||||
|             - path: /opt/backup | ||||
|               readOnly: false | ||||
| vault-unseal: | ||||
|   controllers: | ||||
|     main: | ||||
|       type: cronjob | ||||
|       cronjob: | ||||
|         suspend: false | ||||
|         concurrencyPolicy: Allow | ||||
|         timeZone: US/Central | ||||
|         schedule: "0 * * * *" | ||||
|         startingDeadlineSeconds: 90 | ||||
|         successfulJobsHistory: 3 | ||||
|         failedJobsHistory: 3 | ||||
|         backoffLimit: 3 | ||||
|         parallelism: 3 | ||||
|       containers: | ||||
|         unseal-1: | ||||
|           image: | ||||
|             repository: ghcr.io/lrstanley/vault-unseal | ||||
|             tag: 0.5.1 | ||||
|             pullPolicy: IfNotPresent | ||||
|           resources: | ||||
|             requests: | ||||
|               cpu: 100m | ||||
|               memory: 128Mi | ||||
|         unseal-2: | ||||
|           image: | ||||
|             repository: ghcr.io/lrstanley/vault-unseal | ||||
|             tag: 0.5.1 | ||||
|             pullPolicy: IfNotPresent | ||||
|           resources: | ||||
|             requests: | ||||
|               cpu: 100m | ||||
|               memory: 128Mi | ||||
|         unseal-3: | ||||
|           image: | ||||
|             repository: ghcr.io/lrstanley/vault-unseal | ||||
|             tag: 0.5.1 | ||||
|             pullPolicy: IfNotPresent | ||||
|           resources: | ||||
|             requests: | ||||
|               cpu: 100m | ||||
|               memory: 128Mi | ||||
|   serviceAccount: | ||||
|     create: true | ||||
|   persistence: | ||||
|     config-1: | ||||
|       enabled: true | ||||
|       type: configMap | ||||
|       name: vault-unseal-config-1 | ||||
|       advancedMounts: | ||||
|         main: | ||||
|           unseal-1: | ||||
|             - path: /etc/vault-unseal.yaml | ||||
|               readOnly: true | ||||
|               mountPropagation: None | ||||
|               subPath: vault-unseal.yaml | ||||
|     config-2: | ||||
|       enabled: true | ||||
|       type: configMap | ||||
|       name: vault-unseal-config-2 | ||||
|       advancedMounts: | ||||
|         main: | ||||
|           unseal-2: | ||||
|             - path: /etc/vault-unseal.yaml | ||||
|               readOnly: true | ||||
|               mountPropagation: None | ||||
|               subPath: vault-unseal.yaml | ||||
|     config-3: | ||||
|       enabled: true | ||||
|       type: configMap | ||||
|       name: vault-unseal-config-3 | ||||
|       advancedMounts: | ||||
|         main: | ||||
|           unseal-3: | ||||
|             - path: /etc/vault-unseal.yaml | ||||
|               readOnly: true | ||||
|               mountPropagation: None | ||||
|               subPath: vault-unseal.yaml | ||||
|   | ||||
		Reference in New Issue
	
	Block a user