【问题标题】:How to automate Let's Encrypt certificate renewal in Kubernetes with cert-manager on a bare-metal cluster?如何在裸机集群上使用 cert-manager 在 Kubernetes 中自动进行 Let's Encrypt 证书更新?
【发布时间】:2018-08-13 17:07:29
【问题描述】:

我想使用暴露的 Nginx Ingress Controller 访问我的 Kubernetes 裸机集群以进行 TLS 终止。为了能够自动更新证书,我想使用 Kubernetes 插件 cert-manager,它是 kube-lego 的继任者。

到目前为止我做了什么:

  • 在裸机(1 个 master,1 个 minion,都运行 Ubuntu 16.04.4 LTS)上设置一个 Kubernetes (v1.9.3) 集群,使用 kubeadm 和 flannel 作为 pod 网络,遵循 guide。

  • 已安装 nginx-ingress(图表版本 0.9.5)和 Kubernetes 包管理器 helm
    helm install --name nginx-ingress --namespace kube-system stable/nginx-ingress --set controller.hostNetwork=true,rbac.create=true,controller.service.type=ClusterIP

  • 使用 helm 安装 cert-manager(图表版本 0.2.2)
    helm install --name cert-manager --namespace kube-system stable/cert-manager --set rbac.create=true

当我使用 Ingress 资源进行测试时,Ingress Controller 已成功公开并按预期工作。为了使用 cert-manager 进行适当的 Let's Encrypt 证书管理和自动续订,我首先需要一个 Issuer 资源。我从这个 acme-staging-issuer.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-issuer.yaml 运行成功,但 kubectl describe issuer/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?在创建 cert-manager Issuer 资源时,如何解决 tls: oversized record received 错误?

【问题讨论】:

    标签: kubernetes lets-encrypt kubernetes-helm kubernetes-ingress cert-manager


    【解决方案1】:

    tls: oversized record received 错误是由 Kubernetes minion 的 /etc/resolv.conf 配置错误引起的。可以通过如下编辑来解决:

    $ sudo vi /etc/resolvconf/resolv.conf.d/base
    

    添加域名服务器列表:

    nameserver 8.8.8.8
    nameserver 8.8.4.4
    

    更新resolvconf:

    $ sudo resolvconf -u
    

    【讨论】:

      猜你喜欢
      • 2021-07-14
      • 2021-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-25
      • 2021-06-20
      相关资源
      最近更新 更多