A cert-manager sample repository for creating an ACME DNS01 solver webhook
Find a file
2024-04-28 13:54:03 +02:00
.vscode Updated to recent version of cert-manager/webhook-example 2024-04-28 13:54:03 +02:00
deploy/example-webhook Add explicit namespaces to all namespaced resources in Helm charts 2022-04-16 10:19:05 +01:00
testdata/namecheap Updated to recent version of cert-manager/webhook-example 2024-04-28 13:54:03 +02:00
.gitignore Updated to recent version of cert-manager/webhook-example 2024-04-28 13:54:03 +02:00
Dockerfile bump image versions in Dockerfile 2023-11-16 13:04:04 +00:00
env.sample Updated to recent version of cert-manager/webhook-example 2024-04-28 13:54:03 +02:00
go.mod Updated to recent version of cert-manager/webhook-example 2024-04-28 13:54:03 +02:00
go.sum Updated to recent version of cert-manager/webhook-example 2024-04-28 13:54:03 +02:00
LICENSE Initial commit 2019-04-15 15:23:59 +01:00
main.go Updated to recent version of cert-manager/webhook-example 2024-04-28 13:54:03 +02:00
main_test.go Updated to recent version of cert-manager/webhook-example 2024-04-28 13:54:03 +02:00
Makefile fix makefile targets 2023-11-16 10:10:44 +00:00
OWNERS Annual review of the OWNERS file (2023): Maartje moved to Emeritus Maintainer 2023-08-18 18:19:40 +02:00
README.md Updated to recent version of cert-manager/webhook-example 2024-04-28 13:54:03 +02:00

cert-manager webhook for Namecheap

Instructions for use with Let's Encrypt

Thanks to Addison van den Hoeven, from https://github.com/jetstack/cert-manager/issues/646

Use helm to deploy this into your cert-manager namespace:

# Make sure you're in the right context:
# kubectl config use-context mycontext

# cert-manager is by default in the cert-manager context
helm install -n cert-manager namecheap-webhook deploy/cert-manager-webhook-namecheap/

Create the cluster issuers:

helm install --set email=yourname@example.com -n cert-manager letsencrypt-namecheap-issuer deploy/letsencrypt-namecheap-issuer/

Get your local public ip: curl https://ifconfig.co/ip

Go to namecheap and set up your API key (note that you'll need to whitelist the public IP of the k8s cluster to use the webhook), and set the secret:

apiVersion: v1
kind: Secret
metadata:
  name: namecheap-credentials
  namespace: cert-manager
type: Opaque
stringData:
  apiKey: my_api_key_from_namecheap
  apiUser: my_username_from_namecheap
  #clientIP: 1.2.3.4 # optional, if your setup can't detect the public IP

Now you can create a certificate in staging for testing:

apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: wildcard-cert-stage
  namespace: default
spec:
  secretName: wildcard-cert-stage
  commonName: "*.<domain>"
  issuerRef:
    kind: ClusterIssuer
    name: letsencrypt-stage
  dnsNames:
  - "*.<domain>"

And now validate that it worked:

kubectl get certificates -n default
kubectl describe certificate wildcard-cert-stage

And finally, create your production cert, and it'll be ready to use in the wildcard-cert-prod secret.

apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: wildcard-cert-prod
  namespace: default
spec:
  secretName: wildcard-cert-prod
  commonName: "*.<domain>"
  issuerRef:
    kind: ClusterIssuer
    name: letsencrypt-prod
  dnsNames:
  - "*.<domain>"

TODO: add simple nginx example to test that it works

Running the test suite

Steps

  1. Create testdata/namecheap/apikey.yaml and testdata/namecheap/config.json using your credentials.
  2. Run TEST_ZONE_NAME=example.com. make test . Note that the domain here should be updated to your own domain name. Also note that this is a full domain name with a . at the end.
  3. You should see all tests passing.
  4. In case the tests fail: set useSandbox to false