【问题标题】:Move cert-manager certificate to another Kubernetes cluster将 cert-manager 证书移动到另一个 Kubernetes 集群
【发布时间】:2020-12-15 08:21:45
【问题描述】:

我正在将 Web 服务从一个 Kubernetes 集群转移到另一个集群。目标是在不中断服务的情况下做到这一点。

这对于 cert-manager 和 HTTP 挑战来说很困难,因为新集群上的 cert-manager 只能在 DNS 条目指向该集群时检索证书。但是,如果我将 DNS 条目切换到新集群,客户端可能会在生成有效证书之前与新集群通信。这就像先有鸡还是先有蛋的问题。

如何将 cert-manager 证书移动到新集群,以便在我进行 DNS 切换后它已经拥有证书?

【问题讨论】:

    标签: ssl kubernetes cert-manager


    【解决方案1】:

    证书存储在 Kubernetes 机密中。如果秘密与入口对象匹配,证书管理器将选择现有秘密而不是创建新秘密。

    所以假设 ingress 对象在两个集群上看起来相同,并且使用相同的命名空间,复制秘密就这么简单:

    kubectl --context OLD_CLUSTER -n NAMESPACE get secret SECRET_NAME --output yaml \
      | kubectl --context NEW_CLUSTER -n NAMESPACE apply -f -
    
    • 将OLD_CLUSTER 和NEW_CLUSTER 替换为各自集群的kubectl 上下文名称(请参阅kubectl config get-contexts)。
    • 将SECRET_NAME 替换为存储证书的机密名称。可以在入口中找到此名称。
    • 将NAMESPACE 替换为您正在使用的实际命名空间。

    该命令只是以 YAML 格式导出密钥,然后使用 kubectl apply -f 在新集群中创建相同的资源。

    在新集群上设置好入口后,您可以使用 openssl s_client 验证证书是否有效:

    openssl s_client -connect CLUSTER_IP:443 -servername SERVICE_DNS_NAME 
    

    同样,相应地替换 CLUSTER_IP 和 SERVICE_DNS_NAME。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-28
      • 2022-01-25
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-30
      相关资源
      最近更新 更多