Как автоматизировать обновление сертификата Let's Encrypt в Кубернетесе с помощью cert-manager на голом железном кластере?
Я хотел бы получить доступ к своему кластеру из чистого металла в Kubernetes с открытым контроллером Nginx Ingress Controller для завершения TLS. Чтобы автоматизировать продление сертификатов, я бы хотел использовать менеджер сертификатов аддона Kubernetes, который является преемником kube-lego.
Что я сделал до сих пор:
Настройте кластер Kubernetes (v1.9.3) на голое железо (1 мастер, 1 миньон, оба работают под управлением Ubuntu 16.04.4 LTS) с kubeadm и фланелевой сетью в качестве модуля pod, следуя этому руководству.
Установленный nginx-ingress (версия диаграммы 0.9.5) с рулем диспетчера пакетов Kubernetes
helm install --name nginx-ingress --namespace kube-system stable/nginx-ingress --set controller.hostNetwork=true,rbac.create=true,controller.service.type=ClusterIP
Установлен cert-менеджер (чартовая версия 0.2.2) со штурвалом
helm install --name cert-manager --namespace kube-system stable/cert-manager --set rbac.create=true
Контроллер Ingress успешно открывается и работает, как и ожидалось, когда я тестирую с ресурсом Ingress. Для правильного управления сертификатами Let's Encrypt и автоматического обновления с помощью cert-manager мне прежде всего нужен ресурс эмитента. Я создал его из этого acme-staging-isser.yaml:
apiVersion: certmanager.k8s.io/v1alpha1
kind: Issuer
metadata:
name: letsencrypt-staging
namespace: default
spec:
acme:
server: https://acme-staging.api.letsencrypt.org/directory
email: email@example.com
privateKeySecretRef:
name: letsencrypt-staging
http01: {}
kubectl create -f acme-staging-Issue.yaml работает успешно, но Kubectl описать Issue / Letsencrypt-Staging дает мне:
Status:
Acme:
Uri:
Conditions:
Last Transition Time: 2018-03-05T21:29:41Z
Message: Failed to verify ACME account: Get https://acme-staging.api.letsencrypt.org/directory: tls: oversized record received with length 20291
Reason: ErrRegisterACMEAccount
Status: False
Type: Ready
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning ErrVerifyACMEAccount 1s (x11 over 7s) cert-manager-controller Failed to verify ACME account: Get https://acme-staging.api.letsencrypt.org/directory: tls: oversized record received with length 20291
Warning ErrInitIssuer 1s (x11 over 7s) cert-manager-controller Error initializing issuer: Get https://acme-staging.api.letsencrypt.org/directory: tls: oversized record received with length 20291
Без готового эмитента я не могу приступить к генерации сертификатов cert-manager или использованию ingress-shim (для автоматического продления).
Чего мне не хватает в моей настройке? Достаточно ли выставить входной контроллер, используя hostNetwork=true, или есть лучший способ выставить его порты 80 и 443 на кластер с "голым железом"? Как я могу устранить ошибку tls: oversized, полученную при создании ресурса Cert-manager Issuer?
1 ответ
Ошибка получения записи tls: oversize была вызвана неправильной настройкой /etc/resolv.conf
миньона Kubernetes. Это можно решить, отредактировав его так:
$ sudo vi /etc/resolvconf/resolv.conf.d/base
Добавить список серверов имен:
nameserver 8.8.8.8
nameserver 8.8.4.4
Обновите resolvconf:
$ sudo resolvconf -u