qikqiak.com icon indicating copy to clipboard operation
qikqiak.com copied to clipboard

更新一个10年有效期的 Kubernetes 证书

Open cnych opened this issue 5 years ago • 10 comments

https://www.qikqiak.com/post/update-k8s-10y-expire-certs/

使用 kubeadm 安装 kubernetes 集群非常方便,但是也有一个比较烦人的问题就是默认的证书有效期只有一年时间,所以需要考虑证书升级的问题,本文的演示集群版本为 v1.16.2 版本,不保证下面的操作对其他版本也适用,在操作之前一定要先对证书目录进行备份,防止操作错误进行回滚。本文主要介绍两种方式来更新集群证书。

cnych avatar Aug 26 '20 11:08 cnych

--config kubeadm.yaml 这个文件是哪里来的?

zjcnew avatar Aug 30 '20 14:08 zjcnew

@zjcnew kubeadm config view 这个配置

cnych avatar Aug 31 '20 01:08 cnych

你这样配置requestheader-client-ca-file会存在证书冲突,可以看下这篇文档https://kubernetes.io/zh/docs/tasks/extend-kubernetes/configure-aggregation-layer/#ca-reusage-and-conflicts

fanfengqiang avatar Sep 04 '20 01:09 fanfengqiang

@fanfengqiang 后面直接用默认得 ca.crt 覆盖了 requestheader-client-ca-file 证书的

cnych avatar Sep 04 '20 01:09 cnych

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 证书。

fanfengqiang avatar Sep 04 '20 01:09 fanfengqiang

--use-api 这个参数 现在版本不支持了吧

lx308033262 avatar Oct 27 '20 11:10 lx308033262

@lx308033262 是的,所以不推荐这种方式哈

cnych avatar Oct 27 '20 11:10 cnych

那现在推荐哪种呢?

fighterhit avatar Mar 26 '21 12:03 fighterhit

@fighterhit renew all 命令这种方式~

cnych avatar Mar 26 '21 13:03 cnych

有个问题,按照文章操作后,发现apiserver 访问 metrics server403,需要更改metrics server的启动参数--requestheader-client-ca-file为apiserver的ca证书

inewlife avatar Mar 31 '21 07:03 inewlife