【问题标题】:Cert-Manager is not issuing any certificates Google Cloud KubernetesCert-Manager 未颁发任何证书 Google Cloud Kubernetes
【发布时间】:2020-02-23 13:55:30
【问题描述】:

我正在努力让 cert-manager 从 let's encrypt 颁发证书,我可以在 Google Cloud Kubernetes 中将其与我的入口一起使用。

我有一个在默认命名空间中使用部署、服务和入口运行的集群。我还在 namecheap 注册了一个域,并从我的入口向 IP 地址添加了一条 A 记录。现在我可以使用http访问该网站,一切都很好。现在我想转移到 https 并且事情不起作用。

我已经安装了证书管理器:

kubectl create namespace cert-manager
kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v0.13.1/cert-manager.yaml

我确认 cert-manager 正在运行:

kubectl get pods --namespace cert-manager
NAME                                       READY   STATUS    RESTARTS   AGE
cert-manager-5655447474-kw9k7              1/1     Running   0          99m
cert-manager-cainjector-59c9dfd4f7-fjzbf   1/1     Running   0          99m
cert-manager-webhook-865b8fb666-7kmx2      1/1     Running   0          99m

现在我在默认命名空间中创建了一个 ClusterIssuer kubectl apply -f letsencrypt-prod.yaml

apiVersion: certmanager.k8s.io/v1alpha1
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
spec:
  acme:
    server: https://acme-v02.api.letsencrypt.org/directory
    email: 'my@email.com'
    privateKeySecretRef:
      name: letsencrypt-prod
    http01: {}

并添加了带有kubectl apply -f certificate.yaml的证书:

apiVersion: certmanager.k8s.io/v1alpha1
kind: Certificate
metadata:
  name: my-certs
spec:
  secretName: my-certs
  issuerRef:
    name: letsencrypt-prod
    kind: ClusterIssuer
  commonName: "www.mydomain.de"
  dnsNames:
  - "www.mydomain.de"
  acme:
    config:
    - dns01:
        provider: cloud-dns
      domains:
      - "www.mydomain.de"

这是我的入口:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    kubernetes.io/ingress.global-static-ip-name: "my-ip"
spec:
  rules:
  - host: www.mydomain.de
    http:
      paths:
      - backend:
          serviceName: my-service
          servicePort: 80
  tls:
  - hosts:
    - www.mydomain.de
    secretName: my-certs

现在当我运行kubectl describe certificate my-certs 时,没有任何事件:

kubectl describe certificate my-certs
Name:         my-certs
Namespace:    default
Labels:       <none>
Annotations:  kubectl.kubernetes.io/last-applied-configuration:
                {"apiVersion":"certmanager.k8s.io/v1alpha1","kind":"Certificate","metadata":{"annotations":{},"name":"my-certs","namespace":"default"},"sp...
API Version:  certmanager.k8s.io/v1alpha1
Kind:         Certificate
Metadata:
  Creation Timestamp:  2020-02-23T13:30:15Z
  Generation:          1
  Resource Version:    787204
  Self Link:           /apis/certmanager.k8s.io/v1alpha1/namespaces/default/certificates/my-certs
  UID:                 a027a698-5640-11ea-bce8-42010a9c00dc
Spec:
  Acme:
    Config:
      Dns 01:
        Provider:  cloud-dns
      Domains:
        www.mydomain.de
  Common Name:  www.mydomain.de
  Dns Names:
    www.mydomain.de
  Issuer Ref:
    Kind:       ClusterIssuer
    Name:       letsencrypt-prod
  Secret Name:  my-certs
Events:         <none>

在 Google Cloud Console 中,我看到消息“找不到 TLS 证书。继续设置负载平衡器以服务 HTTP”用于入口。

这里有什么问题或者我错过了什么?

【问题讨论】:

  • 从证书管理器和 webhook pod 发布日志。您使用的是什么入口控制器?从入口控制器 pod 发布日志

标签: kubernetes https cert-manager


【解决方案1】:

您可以将以下注释添加到入口资源,而不是手动创建证书资源:

cert-manager.io/issuer: "letsencrypt-prod"

Cert-manager 将读取注释并使用它们创建证书。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    kubernetes.io/ingress.global-static-ip-name: "my-ip"
    cert-manager.io/cluster-issuer: "letsencrypt-prod"
spec:
  rules:
  - host: www.mydomain.de
    http:
      paths:
      - backend:
          serviceName: my-service
          servicePort: 80
  tls:
  - hosts:
    - www.mydomain.de
    secretName: my-certs

在此之后检查是否创建了名为 my-certs 的密钥和证书。

同时查看相关的issue

【讨论】:

  • 谢谢。这不应该是:cert-manager.io/cluster-issuer: "letsencrypt-prod"?因为我使用了 ClusterIssuer 而不是 Issuer?
  • 是的,你是对的......我错过了。编辑了答案。
  • 证书现在创建成功,但是还是报错:运行负载均衡器同步例程出错:负载均衡器不存在:证书创建失败-k8s-ssl-5c596d7308e70816-e3b0c44298fc1c14--9980a040e40e8402错误: googleapi:错误 400:字段“resource.certificate”的值无效:“”。必须为 SSL 证书创建指定证书。,无效
  • 错误在哪里?在证书管理器窗格中?此错误与上一个错误不同吗?
  • 您使用的是 GCE 入口还是其他?您是否检查了秘密是否已创建?你能描述一下这个秘密,看看它是否有非空的 tls 和密钥
猜你喜欢
  • 1970-01-01
  • 2019-06-28
  • 2018-12-12
  • 1970-01-01
  • 2022-01-16
  • 2018-08-05
  • 1970-01-01
  • 2020-04-25
  • 2021-12-03
相关资源
最近更新 更多