This document describes the two methods to configure TLS on the Vault servers for a Vault cluster.
If the TLS assets for a cluster are not specified using the custom resource (CR) specification field, spec.TLS, the operator creates a default CA and uses it to generate self-signed certificates for the Vault servers in the cluster.
These default TLS assets are stored in the following secrets:
-
<vault-cluster-name>-default-vault-client-tls: This secret contains thevault-client-ca.crtfile, which is the CA certificate used to sign the Vault server certificate. This CA can be used by the Vault clients to authenticate the certificate presented by the Vault server. -
<vault-cluster-name>-default-vault-server-tls: This secret contains theserver.crtandserver.keyfiles. These are the TLS certificate and key used to configure TLS on the Vault servers.
For example, create a Vault cluster with no TLS secrets specified using the following specification:
apiVersion: "vault.security.coreos.com/v1alpha1"
kind: "VaultService"
metadata:
name: example
spec:
nodes: 1The following default secrets are generated for the above Vault cluster:
$ kubectl get secrets
NAME TYPE DATA AGE
example-default-vault-client-tls Opaque 1 1m
example-default-vault-server-tls Opaque 2 1m
Users may pass in custom TLS assets while creating a cluster. Specify the client and server secrets in the following CR specification fields:
-
spec.TLS.static.clientSecret: This secret contains thevault-client-ca.crtfile, which is the CA certificate used to sign the Vault server certificate. This CA can be used by the Vault clients to authenticate the certificate presented by the Vault server. -
spec.TLS.static.serverSecret: This secret contains theserver.crtandserver.keyfiles. These are the TLS certificate and key for the Vault server. Theserver.crtcertificate allows the following wildcard domains:localhost*.<namespace>.pod<vault-cluster-name>.<namespace>.svc
The final CR specification is given below:
apiVersion: "vault.security.coreos.com/v1alpha1"
kind: "VaultService"
metadata:
name: <vault-cluster-name>
spec:
nodes: 1
TLS:
static:
serverSecret: <server-secret-name>
clientSecret: <client-secret-name>Use the hack/tls-gen.sh script to generate the necessary TLS assets and bundle them into required secrets.
Run the following command by providing the environment variable values as necessary:
$ KUBE_NS=<namespace> SERVER_SECRET=<server-secret-name> CLIENT_SECRET=<client-secret-name> hack/tls-gen.shSuccessful execution generates the required secrets in the desired namespace.
For example:
$ KUBE_NS=default SERVER_SECRET=vault-server-tls CLIENT_SECRET=vault-client-tls hack/tls-gen.sh
$ kubectl -n default get secrets
NAME TYPE DATA AGE
vault-client-tls Opaque 1 1m
vault-server-tls Opaque 2 1m