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.20200428
的kopeio/etcd-manager
镜像,则集群受影响。 - 如果这输出的镜像不是
kopeio/etcd-manager
,则集群可能受影响。 - 如果这没有输出任何内容或输出标签 >=
3.0.20200428
的kopeio/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。 虽然这两种工作流都需要对主节点进行滚动更新,但都不会导致控制平面停机(如果集群具有高可用性主节点)。
- 升级到 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
- 另一种解决方案是在 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