服务器错误:cert-manager 的转换 webhook。io/v1alpha2 for cert-manager ClusterIssuer

Error from server: conversion webhook for cert-manager.io/v1alpha2 for cert-manager ClusterIssuer

当我尝试使用 NGINX Ingress 控制器和 cert-manager 为我的集群应用程序配置 TLS Let's Encrypt 证书时,ClusterIssuer 出现问题。

我的 ClusterIssuer 定义如下:

apiVersion: cert-manager.io/v1alpha2
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
spec:
  acme:
    email: user@example.com
    server: https://acme-v02.api.letsencrypt.org/directory
    privateKeySecretRef:
      name: letsencrypt-prod
    solvers:
    - http01:
        ingress:
          class: nginx

当我通过 kubectl 查看 clusterissuer 时,它说 ClusterIssuer 是 READY

$ kubectl get clusterissuer --namespace mynamespace

回复:

NAME               READY   AGE
letsencrypt-prod   True    13s

但是当我描述 ClusterIssuer 时出现错误。

$ kubectl describe clusterissuer letsencrypt-prod --namespace mynamespace

回复:

Error from server: conversion webhook for cert-manager.io/v1alpha2, Kind=ClusterIssuer failed: Post https://cert-manager-webhook.cert-manager.svc:443/convert?timeout=30s: service "cert-manager-webhook" not found

我通过 Helm 3 安装了 cert-manager 并手动添加了 CRD。

如何解决这个问题?

当 CRD 手动应用到您的集群时,证书管理器图表不接受不同的命名空间。 install CRD 作为 Helm 3 版本的一部分,而不是首先手动应用它们。

$ helm repo add jetstack https://charts.jetstack.io

$ helm repo update

$ helm install \
  cert-manager jetstack/cert-manager \
  --namespace mynamespace \
  --version v0.15.1 \
  --set installCRDs=true

我通过在 metadata

下添加 namespace: cert-manager 解决了这个问题

看起来像这样:

apiVersion: cert-manager.io/v1alpha2
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
  namespace: cert-manager
spec:
  acme:
    email: user@example.com
    server: https://acme-v02.api.letsencrypt.org/directory
    privateKeySecretRef:
      name: letsencrypt-prod
   solvers:
   - http01:
       ingress:
         class: nginx