跳至内容

etcd-manager 证书过期

etcd-manager 为 kube-apiserver 和 etcd 之间的 TLS 通信以及 etcd 成员之间的 TLS 通信配置证书。 这些证书由集群 CA 签署,有效期为 1 年。

受影响的 etcd-manager 版本目前**不会**在证书过期之前自动轮换这些证书。 如果这些证书在过期之前没有轮换,Kubernetes apiserver 将无法访问,并且您的控制平面将出现停机。

如何知道我是否受到影响?

如果集群使用的是 etcd-manager 版本 < 3.0.20200428,则会受到此问题的影响。 etcd-manager 版本会根据 kOps 版本自动设置。 这些 kOps 版本受影响

  • kOps 1.10.0-alpha.1 到 1.15.2
  • kOps 1.16.0-alpha.1 到 1.16.1
  • kOps 1.17.0-alpha.1 到 1.17.0-beta.1
  • kOps 1.18.0-alpha.1 到 1.18.0-alpha.2

可以通过检查 etcd-manager pod 的存在并观察其镜像标签来确认问题。

kubectl get pods -n kube-system -l k8s-app=etcd-manager-main \
  -o jsonpath='{range .items[*].spec.containers[*]}{.image}{"\n"}{end}'
  • 如果这输出标签早于 3.0.20200428kopeio/etcd-manager 镜像,则集群受影响。
  • 如果这输出的镜像不是 kopeio/etcd-manager,则集群可能受影响。
  • 如果这没有输出任何内容或输出标签 >= 3.0.20200428kopeio/etcd-manager 镜像,则集群不受影响。

也可以使用每个主节点上的 openssl 检查证书过期时间来确认问题。

find /mnt/ -type f -name me.crt -print -exec openssl x509 -enddate -noout -in {} \;

解决方案

升级 etcd-manager。 etcd-manager 版本 >= 3.0.20200428 管理证书生命周期,将在过期之前自动请求新证书。

我们建议使用两种工作流来升级集群中的 etcd-manager。 虽然这两种工作流都需要对主节点进行滚动更新,但都不会导致控制平面停机(如果集群具有高可用性主节点)。

  1. 升级到 kOps 1.15.3、1.16.2、1.17.0-beta.2 或 1.18.0-alpha.3。 这是推荐的方法。 升级 kOps 时按照正常步骤操作,并根据 kops update cluster 的输出确认 etcd-manager 镜像将被更新。
    kops update cluster --yes
    kops rolling-update cluster --instance-group-roles=Master --cloudonly
    
  2. 另一种解决方案是在 ClusterSpec 中覆盖 etcd-manager 镜像。 镜像将在两个地方设置,每个 etcdCluster(主节点和事件)一个。
    kops edit cluster $CLUSTER_NAME
    # Set `spec.etcdClusters[*].manager.image` to `kopeio/etcd-manager:3.0.20200428`
    kops update cluster # confirm the image is being updated
    kops update cluster --yes
    kops rolling-update cluster --instance-group-roles=Master --force --cloudonly