kubernetes Kubelet证书在端口10250上到期

lokaqttq  于 2023-03-07  发布在  Kubernetes
关注(0)|答案(2)|浏览(271)

我遇到了一个Kubernetes节点上的过期证书问题。检查端口10250上使用的证书,结果显示该证书将于7月23日过期:

我已经检查了kubelet服务使用的证书,其中显示了以下信息:

我仔细检查了位于/etc/kuberbetes/pki以及/var/lib/kubelet/pki的所有证书。这些位置上的所有证书都有效且不会过期。
是否有其他位置可以证明我在这里丢失了?

sycxhyv7

sycxhyv71#

您看到的kubelet-client-current.pem是Kubelet将使用的客户端证书,通过Kubernetes API进行身份验证。
您要查找的服务器证书应该是/var/lib/kubelet/kubelet.crt证书。

# openssl x509 -text -noout -in /var/lib/kubelet/pki/kubelet-client-current.pem  | grep -A4 'X509v3 extensions'
        X509v3 extensions:
            X509v3 Key Usage: critical
                Digital Signature, Key Encipherment
            X509v3 Extended Key Usage: 
                TLS Web Client Authentication

# openssl x509 -text -noout -in /var/lib/kubelet/pki/kubelet.crt  | grep -A4 'X509v3 extensions'
        X509v3 extensions:
            X509v3 Key Usage: critical
                Digital Signature, Key Encipherment
            X509v3 Extended Key Usage: 
                TLS Web Server Authentication

第一个用于认证客户端,第二个用于认证服务器。

zbwhf8kr

zbwhf8kr2#

另外,检查kublet是否使用--rotate-certificates=true和--rotate-server-certificates=true标志启动。
我在集群中的节点上检查了这一点,它们没有设置,节点上的kubelets仍然使用较旧的证书之一,而不是上次更新证书时kubeadm创建的证书。
我的节点运行在Ubuntu上,服务由systemd维护,因此在路径/etc/systemd/system/kubelet.service.d中有一些文件,我编辑这些文件以添加这些循环标志,如下所示:

root@UNI-DEV-2-KubW-1:/etc/systemd/system/kubelet.service.d# ls
10-kubeadm.conf  20-extra-args.conf
root@UNI-DEV-2-KubW-1:/etc/systemd/system/kubelet.service.d# cat 20-extra-args.conf 
[Service]
Environment="KUBELET_EXTRA_ARGS=--fail-swap-on=false"
root@UNI-DEV-2-KubW-1:/etc/systemd/system/kubelet.service.d# cat 10-kubeadm.conf 
# Note: This dropin only works with kubeadm and kubelet v1.11+
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"
Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"
# This is a file that "kubeadm init" and "kubeadm join" generates at runtime, populating the KUBELET_KUBEADM_ARGS variable dynamically
EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
# This is a file that the user can use for overrides of the kubelet args as a last resort. Preferably, the user should use
# the .NodeRegistration.KubeletExtraArgs object in the configuration files instead. KUBELET_EXTRA_ARGS should be sourced from this file.
EnvironmentFile=-/etc/default/kubelet
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS --rotate-certificates=true --rotate-server-certificates=true
root@UNI-DEV-2-KubW-1:/etc/systemd/system/kubelet.service.d#

我可能想把这些添加到20个额外的args.conf中,但是添加了它们,如图所示,它工作了。
编辑完这些文件后,我输入了以下命令:

systemctl daemon-reload
systemctl restart kubelet

在此之后,有必要批准创建新的kubelet证书,如下所示:

kubectl get csr
kubectl certificate approve <csrname>

在批准出现的csr之后,kubelet开始在端口10250上使用新证书。
我从aitorhh的堆栈交换帖子中得到了这个信息,地址如下:
https://serverfault.com/questions/1068751/var-lib-kubelet-pki-kubelet-crt-is-expired-how-to-renew-it

相关问题