
В качестве DNS Provider'а будет выступать GCP.
YOUR_GCP_PROJECT — Замените на имя своего GCP проекта
Создаем аккаунт:
gcloud iam service-accounts create dns01-solver \ --display-name "dns01-solver"
Предоставляем ему доступ к DNS сервису:
gcloud projects add-iam-policy-binding YOUR_GCP_PROJECT \ --member serviceAccount:dns01-solver@YOUR_GCP_PROJECT.iam.gserviceaccount.com \ --role roles/dns.
Генерируем ключ:
gcloud iam service-accounts keys create key.json \ --iam-account dns01-solver@YOUR_GCP_PROJECT.iam.gserviceaccount.com
Создаем секрет на основе сгенерированного ключа:
kubectl create secret generic clouddns-dns01-solver-svc-acct -n cert-manager \ --from-file=key.json
Создаем 2 YAML файла для 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
Не забываем указать имя своего GCP проекта и почтовый ящик.
Создаем ClusterIssuer:
kubectl create -f letsencrypt-staging.yml kubectl create -f letsencrypt-production.yml
Пример Ingress'а:
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 — имя сервиса
80 — порт сервиса


