Automatically Rotating Webhook TLS Credentials
By default, when Linkerd is installed with the Linkerd CLI or with the Linkerd Helm chart, TLS credentials are automatically generated for all of the webhooks. If these certificates expire or need to be regenerated for any reason, performing a Linkerd upgrade (using the Linkerd CLI or using Helm) will regenerate them.
This workflow is suitable for most users. However, if you need these webhook certificates to be rotated automatically on a regular basis, it is possible to use cert-manager to automatically manage them.
As a first step, and create the namespace that cert-manager will use to store its webhook-related resources. For simplicity, we suggest the default Linkerd control plane namespace:
Save the signing key pair as a Secret
Next, we will use the tool, to create a signing key pair which will be used to sign each of the webhook certificates:
step certificate create webhook.linkerd.cluster.local ca.crt ca.key \
--profile root-ca --no-password --insecure --san webhook.linkerd.cluster.local &&
kubectl create secret tls \
webhook-issuer-tls \
--cert=ca.crt \
--key=ca.key \
--namespace=linkerd
Issuing certificates and writing them to a secret
Finally, we can create cert-manager “Certificate” resources which use the Issuer to generate the desired certificates:
cat <<EOF | kubectl apply -f -
apiVersion: cert-manager.io/v1alpha3
kind: Certificate
metadata:
name: linkerd-proxy-injector
namespace: linkerd
spec:
secretName: linkerd-proxy-injector-k8s-tls
duration: 24h
issuerRef:
name: webhook-issuer
kind: Issuer
commonName: linkerd-proxy-injector.linkerd.svc
keyAlgorithm: ecdsa
usages:
- server auth
---
apiVersion: cert-manager.io/v1alpha3
kind: Certificate
metadata:
name: linkerd-sp-validator
namespace: linkerd
spec:
secretName: linkerd-sp-validator-k8s-tls
duration: 24h
renewBefore: 1h
issuerRef:
name: webhook-issuer
kind: Issuer
commonName: linkerd-sp-validator.linkerd.svc
keyAlgorithm: ecdsa
usages:
- server auth
apiVersion: cert-manager.io/v1alpha3
kind: Certificate
metadata:
name: linkerd-tap
namespace: linkerd
spec:
secretName: linkerd-tap-k8s-tls
duration: 24h
renewBefore: 1h
issuerRef:
name: webhook-issuer
kind: Issuer
commonName: linkerd-tap.linkerd.svc
isCA: false
keyAlgorithm: ecdsa
usages:
- server auth
EOF
At this point, cert-manager can now use these Certificate resources to obtain TLS credentials, which are stored in the linkerd-proxy-injector-k8s-tls
, linkerd-sp-validator-k8s-tls
, and linkerd-tap-k8s-tls
secrets respectively.
Now we just need to inform Linkerd to consume these credentials.
To configure Linkerd to use the credentials from cert-manager rather than generating its own, we generate a supplemental config file:
Installing with Helm
For Helm installation, we can configure the Helm values directly:
Note
When installing Linkerd with Helm, you must also provide the issuer trust root and issuer credentials as described in Installing Linkerd with Helm.
Note