Ssl 将证书管理器证书移动到另一个Kubernetes群集

Ssl 将证书管理器证书移动到另一个Kubernetes群集,ssl,kubernetes,cert-manager,Ssl,Kubernetes,Cert Manager,我正在将web服务从一个Kubernetes集群移动到另一个集群。我们的目标是在不中断服务的情况下做到这一点 这对于证书管理器和HTTP挑战来说很困难,因为新集群上的证书管理器只能在DNS入口指向该集群时检索证书。但是,如果我将DNS条目切换到新群集,则客户端可能会在生成有效证书之前与新群集通信。这就像鸡和蛋的问题 如何将证书管理器证书移动到新群集,以便在我进行DNS切换后它已经拥有证书?证书存储在Kubernetes secrets中。如果机密与入口对象匹配,证书管理器将拾取现有机密,而不是创

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

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


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

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

因此,假设两个集群上的入口对象看起来相同,并且使用了相同的名称空间,那么复制机密就这么简单:

kubectl--context OLD_CLUSTER-n NAMESPACE get secret_NAME--output yaml\
|kubectl——上下文新集群-n命名空间应用-f-
  • OLD_CLUSTER
    NEW_CLUSTER
    替换为相应集群的kubectl上下文名称(请参见
    kubectl config get contexts
  • SECRET\u NAME
    替换为存储证书的密钥的名称。该名称可以在入口中找到
  • 名称空间
    替换为您正在使用的实际名称空间
该命令只是以YAML格式导出机密,然后使用
kubectl apply-f
在新集群中创建相同的资源

一旦入口在新集群上就位,您就可以使用
openssl s_client
验证证书是否工作:

openssl s_客户端-连接群集\u IP:443-服务器名服务\u DNS\u名称
同样,相应地更换
群集\u IP
服务\u DNS\u名称