Установка
Для установки с помощью Helm выполните:
$ helm repo add cert-manager-webhook-pdns https://zachomedia.github.io/cert-manager-webhook-pdns
$ helm install cert-manager-webhook-pdns cert-manager-webhook-pdns/cert-manager-webhook-pdns
Без Helm выполните:
$ make rendered-manifest.yaml
$ kubectl apply -f _out/rendered-manifest.yaml
Issuer/ClusterIssuer
Пример настройки издателя (Issuer):
apiVersion: v1
kind: Secret
metadata:
name: pdns-api-key
type: Opaque
data:
key: APIKEY_BASE64
---
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: letsencrypt-staging
spec:
acme:
email: certificates@example.ca
server: https://acme-staging-v02.api.letsencrypt.org/directory
privateKeySecretRef:
name: letsencrypt-staging-account-key
solvers:
- dns01:
webhook:
groupName: acme.zacharyseguin.ca
solverName: pdns
config:
# Базовый URL сервера PowerDNS.
host: https://ns1.example.ca
# Ссылка на секрет Kubernetes, содержащий API-ключ.
apiKeySecretRef:
name: pdns-api-key
key: key
###
### НЕОБЯЗАТЕЛЬНЫЕ ПАРАМЕТРЫ
###
# Схема API-ключа https://www.iana.org/assignments/http-authschemes/http-authschemes.xhtml
# по умолчанию: схема отсутствует ""
apiKeyScheme: ""
# Имя заголовка для передачи API-ключа.
#
# По умолчанию используется X-API-Key, но можно задать другое значение,
# например Authorization.
apiKeyHeaderName: ""
# Идентификатор сервера для API PowerDNS.
# Если не задан, используется значение "localhost".
#
# Как правило, этот параметр оставляют пустым; он нужен только
# в тех случаях, когда перед API PowerDNS стоит прокси,
# требующий другого значения.
serverID: localhost
# Заголовки запросов при подключении к API PowerDNS.
# Следующие заголовки задаются по умолчанию, но могут быть переопределены:
# X-API-Key
# Content-Type
headers:
key: value
# CA-пакет для TLS-соединений.
# Если не задан, используется системное хранилище сертификатов.
caBundle: BASE64_ENCODED_CA_BUNDLE
# TTL для DNS-записей
# (в секундах)
ttl: 120
# Таймаут запросов к серверу PDNS API
# (в секундах)
timeout: 30
# Если сервер имеет право редактировать только определённые зоны,
# укажите их здесь; по умолчанию список пуст — разрешены все зоны.
# *ВАЖНО*: не забудьте поставить точку в конце имени зоны,
# чтобы оно было полностью квалифицированным (fully qualified).
allowed-zones:
- example.com.
- example.org.
- example.net.
После этого можно выпустить сертификат:
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: test-example-ca
namespace: default
spec:
secretName: example-com-tls
dnsNames:
- example.ca
- www.example.ca
issuerRef:
name: letsencrypt-staging
kind: Issuer
group: cert-manager.io
Разработка
Запуск набора тестов
Запустить набор тестов можно следующим образом:
-
make setup -
make test
Для этого необходимо наличие установленных openssl, docker и docker-compose.