如何修复“调用 webhook“webhook.cert-manager.io”失败”?

Ste*_*fen 13 kubernetes cert-manager k3s

我正在尝试设置 K3s 集群。当我有一个主控和代理设置时,证书管理器没有任何问题。现在我正在尝试使用嵌入式 etcd 进行 2 主设置。我为两个虚拟机打开了 TCP 端口64432379-2380执行了以下操作:

VM1: curl -sfL https://get.k3s.io | sh -s server --token TOKEN --cluster-init
VM2: curl -sfL https://get.k3s.io | sh -s server --token TOKEN --server https://MASTER_IP:6443
Run Code Online (Sandbox Code Playgroud)
# k3s kubectl get nodes
NAME  STATUS   ROLES                       AGE    VERSION
VM1   Ready    control-plane,etcd,master   130m   v1.22.7+k3s1
VM2   Ready    control-plane,etcd,master   128m   v1.22.7+k3s1
Run Code Online (Sandbox Code Playgroud)

安装 cert-manager 工作正常:

# k3s kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.8.0/cert-manager.yaml
# k3s kubectl get pods --namespace cert-manager
NAME                                       READY   STATUS
cert-manager-b4d6fd99b-c6fpc               1/1     Running
cert-manager-cainjector-74bfccdfdf-gtmrd   1/1     Running
cert-manager-webhook-65b766b5f8-brb76      1/1     Running
Run Code Online (Sandbox Code Playgroud)

我的清单具有以下定义:

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt
spec:
  acme:
    server: https://acme-v02.api.letsencrypt.org/directory
    email: info@example.org
    privateKeySecretRef:
      name: letsencrypt-account-key
    solvers:
    - selector: {}
      http01:
        ingress: {}
Run Code Online (Sandbox Code Playgroud)

这会导致以下错误:

# k3s kubectl apply -f manifest.yaml
Error from server (InternalError): error when creating "manifest.yaml": Internal error occurred: failed calling webhook "webhook.cert-manager.io": failed to call webhook: Post "https://cert-manager-webhook.cert-manager.svc:443/mutate?timeout=10s": context deadline exceeded
Run Code Online (Sandbox Code Playgroud)

我尝试禁用两个防火墙,等待一天,重置并重新设置,但错误仍然存​​在。谷歌也没有提供太多帮助。我能找到的少量信息在很大程度上超出了我的理解范围,并且似乎没有教程可以执行任何额外的步骤。

Yur*_*mko 0

尝试在集群发行者中指定正确的入口类名称,如下所示:

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt
spec:
  acme:
    server: https://acme-v02.api.letsencrypt.org/directory
    email: info@example.org
    privateKeySecretRef:
      name: letsencrypt-account-key
    solvers:
    - http01:
        ingress:
          class: nginx
Run Code Online (Sandbox Code Playgroud)

另外,请确保您具有在 Ingress 中指定的证书管理器注释和 tls 秘密名称,如下所示:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
    annotations:
      cert-manager.io/cluster-issuer: letsencrypt
...
spec:
  tls:
    - hosts:
      - domain.com
      secretName: letsencrypt-account-key
Run Code Online (Sandbox Code Playgroud)