vault/website/source/docs/platform/k8s/helm/examples.html.md
Jason O'Donnell b4659217fd
doc: update helm to 0.3.0 (#8057)
* doc: update helm to 0.3.0

* Add data type to extraContainers

* Update examples

* Update image in examples
2019-12-19 12:03:51 -05:00

4.3 KiB

layout, page_title, sidebar_current, sidebar_title, description
layout page_title sidebar_current sidebar_title description
docs Examples docs-platform-k8s-examples Examples This section documents configuration options for the Vault Helm chart

Helm Chart Examples

~> Important Note: This chart is not compatible with Helm 3. Please use Helm 2 with this chart.

The following are different configuration examples to support a variety of deployment models.

Standalone Server with Load Balanced UI

The below values.yaml can be used to set up a single server Vault cluster with a LoadBalancer to allow external access to the UI and API.

global:
  enabled: true

server:
  image:
    repository: "vault"
    tag: "1.3.1"

  standalone:
    enabled: true
    config: |
      ui = true

      listener "tcp" {
        tls_disable = 1
        address = "[::]:8200"
        cluster_address = "[::]:8201"
      }
      storage "file" {
        path = "/vault/data"
      }

  service:
    enabled: true

  dataStorage:
    enabled: true
    size: 10Gi
    storageClass: null
    accessMode: ReadWriteOnce

ui:
  enabled: true
  serviceType: LoadBalancer

Standalone Server with TLS

The below values.yaml can be used to set up a single server Vault cluster using TLS. This assumes that a Kubernetes secret exists with the server certificate, key and certificate authority:

global:
  enabled: true
  tlsDisable: false

server:
  image:
    repository: "vault"
    tag: "1.3.1"

  extraVolumes:
  - type: secret
    name: vault-server-tls

  standalone:
    enabled: true
    config: |
      listener "tcp" {
        address = "[::]:8200"
        cluster_address = "[::]:8201"
        tls_cert_file = "/vault/userconfig/vault-server-tls/vault.crt"
        tls_key_file  = "/vault/userconfig/vault-server-tls/vault.key"
        tls_client_ca_file = "/vault/userconfig/vault-server-tls/vault.ca"
      }

      storage "file" {
        path = "/vault/data"
      }

  service:
    enabled: true

  dataStorage:
    enabled: true
    size: 10Gi
    storageClass: null
    accessMode: ReadWriteOnce

Standalone Server with Audit Storage

The below values.yaml can be used to set up a single server Vault cluster with auditing enabled.

global:
  enabled: true

server:
  image:
    repository: "vault"
    tag: "1.3.1"

  standalone:
    enabled: true
    config: |
      listener "tcp" {
        tls_disable = true
        address = "[::]:8200"
        cluster_address = "[::]:8201"
      }

      storage "file" {
        path = "/vault/data"
      }

  service:
    enabled: true

  dataStorage:
    enabled: true
    size: 10Gi
    storageClass: null
    accessMode: ReadWriteOnce

  auditStorage:
    enabled: true
    size: 10Gi
    storageClass: null
    accessMode: ReadWriteOnce

After Vault has been deployed, initialized and unsealed, auditing can be enabled by running the following command against the Vault pod:

$ kubectl exec -ti <POD NAME> --  vault audit enable file file_path=/vault/audit/vault_audit.log

Highly Available Vault Cluster with Consul

The below values.yaml can be used to set up a five server Vault cluster using Consul as a highly available storage backend, Google Cloud KMS for Auto Unseal.

global:
  enabled: true

server:
  image:
    repository: "vault"
    tag: "1.3.1"

  extraEnvironmentVars:
    GOOGLE_REGION: global
    GOOGLE_PROJECT: myproject
    GOOGLE_APPLICATION_CREDENTIALS: /vault/userconfig/my-gcp-iam/myproject-creds.json

  extraVolumes: []
    - type: secret
      name: my-gcp-iam

  affinity: |
    podAntiAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        - labelSelector:
            matchLabels:
              app: {{ template "vault.name" . }}
              release: "{{ .Release.Name }}"
              component: server
          topologyKey: kubernetes.io/hostname

  service:
    enabled: true

  ha:
    enabled: true
    replicas: 5

    config: |
      ui = true

      listener "tcp" {
        tls_disable = 1
        address = "[::]:8200"
        cluster_address = "[::]:8201"
      }

      storage "consul" {
        path = "vault"
        address = "HOST_IP:8500"
      }

      seal "gcpckms" {
         project     = "myproject"
         region      = "global"
         key_ring    = "vault-unseal-kr"
         crypto_key  = "vault-unseal-key"
      }