功能要求
kubeadm版本v1.12.5
环境:
uname -a
):Linux node1 4.4.0-141-generic#167-Ubuntu SMP Wed Dec 5 5:40:15 UTC 2018 x86_64 x86_64 x86_64 GNU / Linux我的集群中有3个已经使用1年了。 由于某些证书的有效期为一年,因此群集无法正常工作。 在证书到期之前,我已经将群集从1.10.12升级到1.11.6和1.12.5。
我遇到了几个问题:
/var/lib/kubelet/pki/kubelet-client-current.pem
已正确轮换,但是client-certificate
和client-key
/etc/kubernetes/kubelet.conf
仍指向/var/lib/kubelet/pki/kubelet-client.*
client-certificate-data
和client-key-data
/etc/kubernetes/kubelet.conf
仍然包含即将过期的证书。client-certificate-data
和client-key-data
sudo kubeadm alpha phase kubeconfig kubelet
在主节点和所有节点上重新生成此文件!kubeadm alpha phase certs renew all
不会更新KubeConfig文件sudo kubeadm alpha phase certs renew all
来续订/etc/kubernetes/pki
所有已过期的证书,但可以,/etc/kubernetes/admin.conf
/etc/kubernetes/controller-manager.conf
/etc/kubernetes/scheduler.conf
sudo kubeadm alpha phase kubeconfig all --apiserver-advertise-address=x.x.x.x
kubectl -n kube-system delete pod kube-apiserver-mater
看起来确实有效,但实际上pod从未重新启动-我不得不停止并使用docker stop / start启动容器。kubeadm alpha phase kubeconfig
应该在配置写入后重新启动静态Pod,或者通知用户这样做。此致
安德烈亚斯(Andreas)
@MalloZup
当然,但是请注意,加入阶段是高度优先的。
听起来不错! 多谢。
你好,
关于这个话题还有一件事。
如果在发出命令时已配置conf文件,则kubeadm alpha phase kubeconfig all
显示此消息:
[kubeconfig] Using existing up-to-date KubeConfig file: "/etc/kubernetes/admin.conf"
[kubeconfig] Using existing up-to-date KubeConfig file: "/etc/kubernetes/kubelet.conf"
[kubeconfig] Using existing up-to-date KubeConfig file: "/etc/kubernetes/controller-manager.conf"
[kubeconfig] Using existing up-to-date KubeConfig file: "/etc/kubernetes/scheduler.conf"
它不会检查证书是否已过期,因此我认为up-to-date
具有误导性。
要将更新的证书放入文件中,必须先删除文件,然后日志如下所示:
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/admin.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/kubelet.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/controller-manager.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/scheduler.conf"
就我而言,虽然我还不错,但几天后由于过期证书,静态Pod无法通信。
此致
安德烈亚斯(Andreas)
分配给@MalloZup
@MalloZup :GitHub不允许我分配以下用户:MalloZup。
请注意,只能分配kubernetes成员和回购协作者,并且问题/ PR只能同时有10个受让人。
有关更多信息,请参见贡献者指南。
针对此:
/分配
可在此处获得使用PR注释与我互动的说明。 如果您对我的行为有任何疑问或建议,请针对kubernetes / test-infra存储库提出问题。
嗨@adoerler thx问题。 关于误导性信息,我已经发送了PR https://github.com/kubernetes/kubernetes/pull/73798。
有时间后,我将继续讨论其余的问题。 对于问题的时间和精确度表示感谢
@adoerler我已向您发送DOC公关以供您提出建议。 随意看看tia:rocket:
(https://github.com/kubernetes/website/pull/12579)
嗨@MalloZup ,
谢谢你的公关!
我错过了有关kubeconfig文件的句子,因为certs renew
只是游戏的一部分。
就像是:
证书更新后,不要忘记使用
kubeadm alpha phase kubeconfig ...
重新创建KubeConfig文件。
谢谢。 我没有添加文档,因为我认为实际上我们可以续订kubeconfig文件。 其余重新启动的Pod,我们可以委派给用户并编写最少的文档。 @fabriziopandini @lubomir @ereslibre我在此实现上缺少某些内容吗? ia
@MalloZup我对证书续订的工作方式不甚了解。
就个人而言,我想在采取行动之前澄清一下总体历史-包括上面建议的内容-:
kubeadm alpha phase certs renew
应该管理什么kubeadm upgrade
期间应自动管理什么但我对这个领域比我更熟练的人说了最后一句话
我认为我们应该在会议上预留时间,讨论我们建议的证书续订政策应是什么。 关于证书管理的页面可能需要一些额外的细节:
https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-certs
而且我们至少需要针对单个控制平面集群编写一个小型指南。
用户一直在做的事情就是自己解决问题:
https://github.com/kubernetes/kubeadm/issues/581#issuecomment -421477139
^此评论和上面的评论包含用户制作的指南。
这表明我们需要添加官方指南。
cc @timothysc @liztio
/分配@ereslibre
目前,拥有数百名用户的集群处于阻塞状态。 我可以快速指南如何处理过期的证书吗?
[root<strong i="5">@controller0</strong> ~]# kubeadm alpha phase certs apiserver --apiserver-advertise-address 1.2.3.4
Error: unknown flag: --apiserver-advertise-address
Usage:
Flags:
-h, --help help for phase
Global Flags:
--log-file string If non-empty, use this log file
--rootfs string [EXPERIMENTAL] The path to the 'real' host root filesystem.
--skip-headers If true, avoid header prefixes in the log messages
-v, --v Level log level for V logs
error: unknown flag: --apiserver-advertise-address
[root<strong i="6">@controller0</strong> ~]# kubeadm alpha phase certs apiserver
This command is not meant to be run on its own. See list of available subcommands.
在1.13的init阶段中,已逐步升级为上级的init命令:
https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-init-phase/#cmd -phase-certs
在1.12中,该标志应位于:
https://v1-12.docs.kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-alpha/#cmd -phase-certs
1.11即将失去支持。
删除生命周期/活动标签。
移至1.15。
可能的文档在这里更新了一些想法:
https://github.com/kubernetes/kubeadm/issues/1361#issuecomment -463192631
@ neolit123
问题:在具有主HA的1.14中,是否足以在单个主服务器上遵循https://github.com/kubernetes/kubeadm/issues/581#issuecomment -421477139,否则我们必须重新加入辅助主服务器才能重新获取证书?
重新加入辅助控制平面节点,在1,14中似乎是一种快速可行的选择。
关于HA证书轮换,我们还没有任何文档。
(更不用说我们还没有添加适当的步骤,例如https://github.com/kubernetes/kubeadm/issues/581#issuecomment-421477139做到了)。
--experimental-upload-certs是否不是为HA中的证书轮换提供更简单解决方案的基础?
HA证书轮换的一种方法是:
kubeadm init phase upload-certs --experimental-upload-certs
存储证书密钥。
kubeadm token create --print-join-command
将连接命令与令牌一起存储。
使用令牌和证书密钥重新加入其余的控制平面节点,使用--certs-key .... --experimental-control-plane-join
一对一
对于工人:流失,使用新令牌重新加入,取消密码,一个接一个。
(可选)删除结果令牌。
@ neolit123
在3个主机集群中,当我们更改“主要”主机上的证书时,etcd将随着证书的更改而停止工作(仲裁必须至少为51%)? 如果是这样,也许我们必须以某种方式封锁两个二级主服务器,然后才更改证书? 是否可以使用“密码大师”?
我不是专家,但是我不认为自动证书副本会出现在这张图片中
自动复制证书可处理CA,前置代理CA,etcd-CA(具有10年的TTL)和SA密钥(无TTL)
证书更新命令触摸所有其他证书(具有TTL的1年),这些证书在主证书之间有所不同。
AFAIK,目前没有任何东西可以处理kubeconfig文件的证书续订
好的,我没有考虑“证书副本”实际上在这里做什么。
无论哪种方式,我们都需要编写适当的证书轮换文档。
/分配
/生命周期有效
我正在着手解决这个问题。
有待解决的不同问题(_2019年5月14日更新_)
我将在单独的PR中解决所有这些问题
@ neolit123 @fabriziopandini
您提到的轮换CA证书的步骤是什么? 是否可以将其记录下来? 旋转包括CA的私钥怎么办?
在另一个问题中跟踪了@ tushar00jain CA证书的轮换https://github.com/kubernetes/kubeadm/issues/1350
此问题仅针对已签名的证书
@fabriziopandini,我想在今天关闭这张票,因为您可以发送续签的PR。 门票应该关闭吗?
即使启用了证书轮换,kubelet.conf也会指向过期的证书(已由#1317跟踪)
是的,这是在一个单独的问题中进行跟踪的,可能需要就我们应提供的解决方法进行讨论/文档。
证书轮换不会更新apiserver / etcd / front-proxy-client证书(已由kubernetes / kubernetes#76862修复)
命令kubeadm alpha阶段的证书全部更新不会更新KubeConfig文件(由kubernetes / kubernetes#77180修复)
有关证书续订的文档(包含有关在何处,何时,kubeconfig,HA运行命令的更多详细信息)
上面的3应该做。
/关闭
根据上面的评论,大多数工作已经完成; 在单独的/专用的问题中跟踪丢失的位
@fabriziopandini :结束本问题。
针对此:
/关闭
根据上面的评论,大多数工作已经完成; 在单独的/专用的问题中跟踪丢失的位
可在此处获得使用PR注释与我互动的说明。 如果您对我的行为有任何疑问或建议,请针对kubernetes / test-infra存储库提出问题。
有人可以向我解释如何解决“即使启用了证书轮换,kubelet.conf也指向过期的证书”部分? 链接中提到此问题的唯一问题已明确关闭,转而支持另一个问题,该问题已用“我不确定此问题是否已解决,因此请打开新故障单”来解决。
我在1.16上,看不到kubelet.conf
与sudo kubeadm alpha certs renew all
发生任何续订。 缺少什么? @ neolit123
快速回顾很长的讨论。
到目前为止,第二点已适用于所有节点,但运行kubeadm init的节点除外。 https://github.com/kubernetes/kubernetes/pull/84118将解决此问题
@fabriziopandini谢谢你,这很有意义。
对于从现在到解决上述问题之间过时的kubelte.conf中面临证书问题的其他人,我发现本文很有帮助:
https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/#check -certificate-expiration
在使用kubeadm init创建的节点上,kubeadm 1.17之前的版本存在一个错误,您必须手动修改kubelet.conf的内容。 kubeadm初始化完成后,您应该更新kubelet.conf以指向旋转的kubelet客户端证书,方法是将client-certificate-data和client-key-data替换为:
client-certificate: /var/lib/kubelet/pki/kubelet-client-current.pem
client-key: /var/lib/kubelet/pki/kubelet-client-current.pem
@AndrewSav谢谢你。 我已经使用了promethes运算符来监视集群。 我最近收到一条警报:“ Kubernetes API证书将在不到7天的时间内到期”,我认为这与此问题有关。 我已经更新了主节点上kubelet.conf的内容。 但是我仍然得到警报。 你有什么建议吗? Tks。
@tannh(如果您使用kubeadm安装了集群),请使用kubeadm检查证书的到期时间。 否则,您的问题可能与您无关。
在使用kubeadm init创建的节点上,kubeadm 1.17之前的版本存在一个错误,您必须手动修改kubelet.conf的内容。 kubeadm初始化完成后,您应该更新kubelet.conf以指向旋转的kubelet客户端证书,方法是将client-certificate-data和client-key-data替换为:
这也将在1.17的发行说明中。
@adoerler我仍在运行旧版本的kubeadm,证书更新后如何更新kubelet.conf,admin.con等。
我运行了“ kubeadm alpha certs renew all”,它生成了新的证书,然后我需要在/ etc / kubernetes下编辑所有.conf,如何? 他们到底应该指向哪里?
如果是多个主节点,是否应该在所有主节点中运行该命令?
嗨@SuleimanWA ,
我无法告诉您如何在多主机环境中进行操作,我的设置中只有一个主机。
这是我所做的:
首先,请确保将现有的conf文件移开,因为现有的文件不会被覆盖!
mv /etc/kubernetes/admin.conf /backup
mv /etc/kubernetes/kubelet.conf /backup
mv /etc/kubernetes/controller-manager.conf /backup
mv /etc/kubernetes/scheduler.conf /backup
然后更新这些文件:
user<strong i="13">@master</strong>:~$ sudo kubeadm alpha phase kubeconfig all --apiserver-advertise-address=<INSERT-YOUR-APISERVER-IP-HERE>
I0124 21:56:14.253641 15040 version.go:236] remote version is much newer: v1.13.2; falling back to: stable-1.12
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/admin.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/kubelet.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/controller-manager.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/scheduler.conf"
要在静态系统Pod中应用新证书,对我而言,最简单的方法是简单地重新启动主服务器。
不要忘记将client-certificate-data
和client-key-data
从/etc/kubernetes/admin.conf
复制到本地.kube/config
。
希望这可以帮助
安德烈亚斯(Andreas)
知道如何在1.14.10上运行此命令吗? 我得到的是:
kubeadm alpha phase kubeconfig all --apiserver-advertise-address=192.168.102.170
Error: unknown flag: --apiserver-advertise-address
然后文档说:
kubeadm alpha phase kubeconfig all
我得到:
This command is not meant to be run on its own. See list of available subcommands.
谢谢
嗨@provgregoryabdo ,
您的kubeadm version
输出是多少?
安德烈亚斯(BR Andreas)
@provgregoryabdo phase
命令移出alpha并在更高版本中初始化,因此您可以使用类似
kubeadm init phase kubeconfig all --apiserver-advertise-address=<your_address>
@adoerler感谢您的帮助!
最有用的评论
/分配
/生命周期有效
我正在着手解决这个问题。
有待解决的不同问题(_2019年5月14日更新_)
我将在单独的PR中解决所有这些问题