更新一个10年有效期的 Kubernetes 证书
https://www.qikqiak.com/post/update-k8s-10y-expire-certs/
使用 kubeadm 安装 kubernetes 集群非常方便,但是也有一个比较烦人的问题就是默认的证书有效期只有一年时间,所以需要考虑证书升级的问题,本文的演示集群版本为 v1.16.2 版本,不保证下面的操作对其他版本也适用,在操作之前一定要先对证书目录进行备份,防止操作错误进行回滚。本文主要介绍两种方式来更新集群证书。
--config kubeadm.yaml 这个文件是哪里来的?
@zjcnew kubeadm config view 这个配置
你这样配置requestheader-client-ca-file会存在证书冲突,可以看下这篇文档https://kubernetes.io/zh/docs/tasks/extend-kubernetes/configure-aggregation-layer/#ca-reusage-and-conflicts
@fanfengqiang 后面直接用默认得 ca.crt 覆盖了 requestheader-client-ca-file 证书的
CA-重用和冲突 Kubernetes apiserver 有两个客户端 CA 选项:
--client-ca-file --requestheader-client-ca-file 这些功能中的每个功能都是独立的;如果使用不正确,可能彼此冲突。
--client-ca-file:当请求到达 Kubernetes apiserver 时,如果启用了此选项,则 Kubernetes apiserver 会检查请求的证书。如果它是由 --client-ca-file 引用的文件中的 CA 证书之一签名的,并且用户是公用名CN=的值,而组是组织O= 的取值,则该请求被视为合法请求。请参阅 关于 TLS 身份验证的文档。
--requestheader-client-ca-file:当请求到达 Kubernetes apiserver 时,如果启用此选项,则 Kubernetes apiserver 会检查请求的证书。如果它是由文件引用中的 --requestheader-client-ca-file 所签署的 CA 证书之一签名的,则该请求将被视为潜在的合法请求。然后,Kubernetes apiserver 检查通用名称CN=是否是 --requestheader-allowed-names 提供的列表中的名称之一。如果名称允许,则请求被批准;如果不是,则请求被拒绝。
如果同时提供了 --client-ca-file 和--requestheader-client-ca-file,则首先检查 --requestheader-client-ca-file CA,然后再检查--client-ca-file。通常,这些选项中的每一个都使用不同的 CA(根 CA 或中间 CA)。常规客户端请求与 --client-ca-file 相匹配,而聚合请求与 --requestheader-client-ca-file 相匹配。但是,如果两者都使用同一个 CA,则通常会通过 --client-ca-file 传递的客户端请求将失败,因为 CA 将与 --requestheader-client-ca-file 中的 CA 匹配,但是通用名称 CN= 将不匹配 --requestheader-allowed-names 中可接受的通用名称之一。这可能导致您的 kubelet 和其他控制平面组件以及最终用户无法向 Kubernetes apiserver 认证。
因此,请对用于控制平面组件和最终用户鉴权的 --client-ca-file 选项和用于聚合 apiserver 鉴权的 --requestheader-client-ca-file 选项使用不同的 CA 证书。
--use-api 这个参数 现在版本不支持了吧
@lx308033262 是的,所以不推荐这种方式哈
那现在推荐哪种呢?
@fighterhit renew all 命令这种方式~
有个问题,按照文章操作后,发现apiserver 访问 metrics server403,需要更改metrics server的启动参数--requestheader-client-ca-file为apiserver的ca证书