上传 ssl 证书,它会被删除(Nginx/K8s)

问题描述 投票:0回答:1

一些背景: 我们的应用程序在 Kubernetes(GCP)中运行。 Ingress 是通过 Nginx Ingress 控制器\Cert-manager 配置的。

问题: 已应用 ssl 证书且处于有效状态。 我需要向证书添加新的 DNS。所以我下载了ssl机密。 使用 certbot 我手动生成了新的证书和私钥(使用现有的和新的 dns)。我删除了当前的 ssl 证书以开始续订过程。这一步也导致了秘密的删除。

当我在 nginx ns 中应用 sll 密钥时,该密钥会立即被删除。
GCP 日志显示“kube-system:generic-garbage-collector”正在删除机密。

我停止了证书管理器只是为了确保它不会删除证书。尝试应用秘密,但它仍然被删除。

我希望创建秘密并且证书生效。

nginx controller ssl-certificate
1个回答
0
投票

出现此问题的原因是 Cert-Manager 正在管理 SSL 证书机密,并在该机密与其应管理的

Certificate
资源不一致时将其删除。

解决方案:

  1. 重新创建

    Certificate
    资源

    • Cert-Manager 依赖
      Certificate
      资源来管理 SSL 密钥。您需要使用更新的 DNS 名称重新创建
      Certificate
      资源并引用密钥。这将触发 Cert-Manager 生成正确的证书和私钥并将其存储在密钥中。
    • 示例 YAML:
      apiVersion: cert-manager.io/v1
      kind: Certificate
      metadata:
        name: my-app-cert
        namespace: <your-namespace>
      spec:
        secretName: my-app-tls-secret
        dnsNames:
        - existing.example.com
        - new.example.com
        issuerRef:
          name: <your-issuer-name>
          kind: ClusterIssuer
      
  2. 避免手动更改秘密

    • Cert-Manager 负责管理证书和机密。手动更改或删除密钥(例如,使用 Certbot)可能会导致问题,因为它可能与 Cert-Manager 预期的状态不匹配。让 Cert-Manager 自动处理续订和更新。
  3. 使用证书管理器验证

    • 通过检查日志确保 Cert-Manager 正确处理证书续订:
      kubectl logs -n cert-manager deploy/cert-manager
      
    • 检查
      Certificate
      资源的状态以查看是否正在颁发新证书:
      kubectl describe certificate <certificate-name>
      
  4. 验证垃圾收集

    • Kubernetes 中的垃圾收集器将清理与任何活动资源无关的资源(例如
      Certificate
      资源)。确保
      Certificate
      链接到正确的秘密名称和命名空间。

通过确保应用

Certificate
资源,Cert-Manager 将正确管理机密,并且应正确更新证书。

© www.soinside.com 2019 - 2024. All rights reserved.