Как автоматизировать обновление сертификата 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
Другие вопросы по тегам