GCP will be the DNS provider.
YOUR_GCP_PROJECT – Replace with the name of your GCP project
Create an account:
gcloud iam service-accounts create dns01-solver \ --display-name "dns01-solver"
We give him access to the DNS service:
gcloud projects add-iam-policy-binding YOUR_GCP_PROJECT \ --member serviceAccount:dns01-solver@YOUR_GCP_PROJECT.iam.gserviceaccount.com \ --role roles/dns.
We generate the key:
gcloud iam service-accounts keys create key.json \ --iam-account dns01-solver@YOUR_GCP_PROJECT.iam.gserviceaccount.com
Create a secret based on the generated key:
kubectl create secret generic clouddns-dns01-solver-svc-acct -n cert-manager \ --from-file=key.json
Create 2 YAML files for ClusterIssuer.
letsencrypt-staging.yml
apiVersion: certmanager.k8s.io/v1alpha1 kind: ClusterIssuer metadata: name: letsencrypt-staging spec: acme: # The ACME server URL server: https://acme-staging-v02.api.letsencrypt.org/directory # Email address used for ACME registration email: [email protected] # Name of a secret used to store the ACME account private key privateKeySecretRef: name: letsencrypt-staging solvers: - dns01: clouddns: # The ID of the GCP project project: YOUR_GCP_PROJECT # This is the secret used to access the service account serviceAccountSecretRef: name: clouddns-dns01-solver-svc-acct key: key.json
letsencrypt-production.yml
apiVersion: certmanager.k8s.io/v1alpha1 kind: ClusterIssuer metadata: name: letsencrypt-production namespace: cert-manager spec: acme: server: https://acme-v02.api.letsencrypt.org/directory # This will register an issuer with LetsEncrypt. Replace # with your admin email address. email: [email protected] privateKeySecretRef: # Set privateKeySecretRef to any unused secret name. name: letsencrypt-production dns01: providers: - name: dns clouddns: # Set this to your GCP project-id project: YOUR_GCP_PROJECT # Set this to the secret that we publish our service account key # in the previous step. serviceAccountSecretRef: name: clouddns-dns01-solver-svc-acct key: key.json
Do not forget to specify the name of your GCP project and mailbox.
Create a ClusterIssuer:
kubectl create -f letsencrypt-staging.yml kubectl create -f letsencrypt-production.yml
Ingress example:
apiVersion: extensions/v1beta1 kind: Ingress metadata: annotations: kubernetes.io/ingress.class: nginx certmanager.k8s.io/cluster-issuer: letsencrypt-production certmanager.k8s.io/acme-challenge-type: dns01 certmanager.k8s.io/acme-dns01-provider: dns name: artem-service-ing namespace: staging spec: tls: - hosts: - artem.services secretName: artem.services-tls rules: - host: artem.services http: paths: - path: / backend: serviceName: artem-services-svc servicePort: 80
artem-services-svc – service name
80 – service port