작성
·
1.5K
1
안녕하세요
ova 이미지(1.22)를 이용하여 실습환경을 재구성하였으나, 인증서 만료로 인한 문제인지 kubelet 실행이 되지 않는 상황입니다.
로그 확인 시 아래와 같은 로그가 확인되어, kubeadm 명령을 통해 인증서 renew 를 진행하였으나 문제는 동일합니다.
Jun 9 23:46:29 m-k8s kubelet: E0609 23:46:29.935776 1235 bootstrap.go:265] part of the existing bootstrap client certificate in /etc/kubernetes/kubelet.conf is expired: 2023-05-20 00:32:02 +0000 UTC
Jun 9 23:46:29 m-k8s kubelet: E0609 23:46:29.935812 1235 server.go:294] "Failed to run kubelet" err="failed to run Kubelet: unable to load bootstrap kubeconfig: stat /etc/kubernetes/bootstrap-kubelet.conf: no such file or directory"
인증서와 bootstrap-kubelet.conf 파일이 연관이 있는 것 인지 또한 궁금합니다.
위 이슈에 대한 원인, 해결방안등을 설명해주시면 감사하겠습니다.
감사합니다.
답변 4
0
인증서와 관련해서 다음을 보시면 도움이 되실 것 같습니다.
https://kubernetes.io/docs/setup/best-practices/certificates/
0
[root@m-k8s ~]# kubeadm certs check-expiration
[check-expiration] Reading configuration from the cluster...
[check-expiration] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
CERTIFICATE EXPIRES RESIDUAL TIME CERTIFICATE AUTHORITY EXTERNALLY MANAGED
admin.conf Jun 07, 2033 00:33 UTC 9y no
apiserver Jun 07, 2033 00:33 UTC 9y ca no
apiserver-etcd-client Jun 07, 2033 00:33 UTC 9y etcd-ca no
apiserver-kubelet-client Jun 07, 2033 00:33 UTC 9y ca no
controller-manager.conf Jun 07, 2033 00:33 UTC 9y no
etcd-healthcheck-client Jun 07, 2033 00:33 UTC 9y etcd-ca no
etcd-peer Jun 07, 2033 00:33 UTC 9y etcd-ca no
etcd-server Jun 07, 2033 00:33 UTC 9y etcd-ca no
front-proxy-client Jun 07, 2033 00:33 UTC 9y front-proxy-ca no
scheduler.conf Jun 07, 2033 00:33 UTC 9y no
CERTIFICATE AUTHORITY EXPIRES RESIDUAL TIME EXTERNALLY MANAGED
ca Jun 07, 2033 00:32 UTC 9y no
etcd-ca Jun 07, 2033 00:32 UTC 9y no
front-proxy-ca Jun 07, 2033 00:32 UTC 9y no
0
0
안녕하세요
좋은 질문에 감사드립니다.
1.인증서 이슈
우선 kubeadm renew 명령으로 인증서는 갱신되나 (/etc/kubernetes/pki) 이들이 각 컴포넌트(api,etcd,controller,scheduler)에 적용되지 않습니다.
따라서 다음의 방법들을 조치해야 합니다.
1-1) Manual
renew 이후에 각 컴포넌트에 모두 맞도록 하나하나 끼워 넣는 방법입니다.
expired 되지 않았다면, 노드 버전을 올리는 것으로 조치할 수 있으나...이미 expired 된 경우에는 manual 조치해야 할 것으로 보여집니다.
다만 alpha 시절에는 kubeadm 명령줄로 지원되었으나, 현재에는 config를 작성해야 합니다.
alpha 시절은 다음과 같으며..
https://www.ibm.com/docs/en/fci/1.1.0?topic=kubernetes-renewing-cluster-certificates
현재는
cluster config를 만들어서 넣어야 합니다. (--org 등 명령이 outdate 되었습니다)
저라면 인증서를 찾아서 개별 컴포넌트 파일에 모두 맞춰서 넣을 것 같습니다.
1-2) Vagrant up으로 배포하기
이 방법이 조치라고 볼 수 없긴 한데 1-1이 현실적으로 매우 복잡하니 , 대안이 될 수는 있을 것 같습니다.
현재 랩탑이 안된다면 되는 곳에서 추출해서 넣으실 수 있습니다.
1-3) 1-2주 정도 기다리기
이 방법은 즉각적인 조치라고 볼 수는 없긴 한데...1년은 좀 짧으니 더 긴 기간으로 다시 만들고 올리도록 하겠습니다.
2.kubelet bootstrap
아마 추측으로 드리는 부분이긴 한데...동작에 관심이 있으신거 같아서 다음의 내용을 공유드립니다.
다른 오픈소스 제품들도 유사하지만 소스 코드에 주석 및 쉬운 구성으로 설명되어 있어서 다음의 내용을 참고하시는게 좋을 것 같습니다.
간략하게 말씀드리자면, 저희가 알고 있는 부트스트랩처럼 init 해주는 역할을 본다고 보시면 될 것 같습니다.
// Bootstrap is a bootstrapping interface for kubelet, targets the initialization protocol
type Bootstrap interface {
GetConfiguration() kubeletconfiginternal.KubeletConfiguration
BirthCry()
StartGarbageCollection()
ListenAndServe(kubeCfg kubeletconfiginternal.KubeletConfiguration, tlsOptions server.TLSOptions, auth server.AuthInterface, tp trace.TracerProvider)
ListenAndServeReadOnly(address net.IP, port uint)
ListenAndServePodResources()
Run(<-chan kubetypes.PodUpdate)
RunOnce(<-chan kubetypes.PodUpdate) ([]RunPodResult, error)
https://github.com/kubernetes/kubernetes/blob/master/pkg/kubelet/kubelet.go#L232
설명해주신 내용과 참고 링크들이 이번 이슈와 관련하여 공부하고 이해하는데 많은 도움이 됐습니다.
이렇게 빨리 답변주실거라곤 생각도 못했는데..
번개같은 속도로 답변주셔서 너무너무너무 감사합니다.
조훈최고!