A webhook to use Linode DNS Manager as a DNS01 ACME Issuer for cert-manager.
helm install cert-manager-webhook-linode \
--namespace cert-manager \
https://github.com/linode/cert-manager-webhook-linode/releases/download/v0.4.1/cert-manager-webhook-linode-v0.4.1.tgzkubectl create secret generic linode-credentials \
--namespace=cert-manager \
--from-literal=token=<LINODE TOKEN>apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-staging
spec:
acme:
server: https://acme-staging-v02.api.letsencrypt.org/directory
email: example@example.com
privateKeySecretRef:
name: letsencrypt-staging
solvers:
- dns01:
webhook:
solverName: linode
groupName: acme.slicen.meBy default, the Linode API token used will be obtained from the linode-credentials Secret in the same namespace as the webhook.
If you would prefer to use separate Linode API tokens for each namespace (e.g. in a multi-tenant environment):
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: letsencrypt-staging
namespace: default
spec:
acme:
server: https://acme-staging-v02.api.letsencrypt.org/directory
email: example@example.com
privateKeySecretRef:
name: letsencrypt-staging
solvers:
- dns01:
webhook:
solverName: linode
groupName: acme.slicen.me
config:
apiKeySecretRef:
name: linode-credentials
key: tokenThis webhook supports delegated subdomain zones. When you request a certificate for a domain, the webhook will automatically find the longest matching zone in your Linode DNS Manager.
For example, if you have the following zones configured:
example.comteam.example.comto.example.com
The webhook will correctly handle certificates for:
www.example.com→ uses zoneexample.comwww.team.example.com→ uses zoneteam.example.comwww.to.example.com→ uses zoneto.example.comteam.to.example.com→ uses zoneto.example.com(cross-zone domain)to.team.example.com→ uses zoneteam.example.com(cross-zone domain)
This is particularly useful when you have delegated DNS management for specific subdomains to different zones in Linode DNS Manager.
Conformance testing is achieved through Kubernetes emulation via the kubebuilder-tools suite, in conjunction with real calls to the Linode API on an test domain, using a valid API token.
The test configures a cert-manager-dns01-tests TXT entry, attempts to verify its presence, and removes the entry, thereby verifying the Prepare and CleanUp functions.
Run the test suite with:
export LINODE_TOKEN=$(echo -n "<your API token>" | base64 -w 0)
envsubst < testdata/linode/secret.yaml.example > testdata/linode/secret.yaml
TEST_ZONE_NAME=yourdomain.com. make verify