뒤로가기

Kubernetes

Kubernetes 인증서 만료시 갱신 방법

반윤성 2022.03.28.

Kubernetes cluster의 인증 기간

Kubernetes cluster 인증서의 수명은 1년입니다.

Kubernetes 인증서가 만료되면, 결과적으로 kubelet 서비스가 실패합니다.

실제로 현재 운영중인 gitlab-runner가 정상적으로 작동하지 않았던 현상이 있습니다.

ERROR: Build failed (system failure): timedout waiting for pod to start

또한 kubectl 명령어 수행 시 Unable to connect to the server: x509: certificate has expired or is not yet valid. 과 같은 메시지가 출력되기도합니다.

Kubernetes expired ?

어느 순간 Kubernetes의 pod가 정상적으로 동작하지 않거나 서버로부터 응답이 없다면 인증서가 만료 되었는지 확인해보아야 합니다.

k8s 마스터 인증서 기간 확인을 위해 다음과 같이 입력합니다.

[12:53:32][danawa@kube3 /etc/kubernetes/pki]
$ openssl x509 -in apiserver.crt -noout -text |grep ' Not '
            Not Before: Mar 25 08:12:56 2020 GMT
            Not After : Mar 25 08:29:03 2022 GMT

이 글을 쓰는 현재 시간은 2022년 3월 28일 입니다. 위 내용을 통해 인증서 파일이 만료되었다는 것을 확인할 수 있고, 이때부터 관련된 기능들이 정상적으로 동작하지 않습니다.

인증서 갱신 방법

1. 인증서가 존재하는 pki 디렉토리를 백업합니다.

cp -f /etc/kubernetes/pki /etc/kubernetes/pki-backup

2. 인증서를 일괄적으로 업데이트 합니다.

kubeadm alpha certs renew all

3. 갱신 여부를 다시 체크합니다.

[12:56:54][danawa@kube3 /etc/kubernetes/pki]
$ openssl x509 -in apiserver.crt -noout -text |grep ' Not '
            Not Before: Mar 25 08:12:56 2020 GMT
            Not After : Mar 28 02:26:40 2023 GMT

정상적으로 1년 연장 되었습니다.

4. 사용자 구성을 업데이트 하기 위해 kubernetes 디렉토리를 백업합니다.

cp -f /etc/kubernetes /etc/kubernetes-backup

5. 사용자 구성을 업데이트합니다.

kubeadm alpha kubeconfig user --client-name=admin
kubeadm alpha kubeconfig user --org system:masters --client-name kubernetes-admin > /etc/kubernetes/admin.conf
kubeadm alpha kubeconfig user --client-name system:kube-controller-manager > /etc/kubernetes/controller-manager.conf
kubeadm alpha kubeconfig user --org system:nodes --client-name system:node:$(hostname) > /etc/kubernetes/kubelet.conf
kubeadm alpha kubeconfig user --client-name system:kube-scheduler > /etc/kubernetes/scheduler.conf

6. /root/.kube/config를 교체합니다.

cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

7. 서비스를 재시작합니다.

systemctl daemon-reload&&systemctl restart kubelet

# systemctl 서비스에서 사용할 경우
systemctl restart kube-apiserver
systemctl restart kube-scheduler

# 도커 컨테이너를 사용할 경우
docker restart [apiserver 컨테이너]
docker restart [scheduler 컨테이너]
docker restart [controller 컨테이너]

정리

Kubernetes의 인증서는 갱신 방법을 살펴보았습니다. 갱신이 되지않는다면 정상적으로 서비스를 운용할수가 없기때문에, 관련 내용을 염두해두고 있어야 신속하게 troubleshooting 할 수 있을 것으로 보입니다.

참고 자료

  • https://www.ibm.com/docs/en/fci/1.0.3?topic=kubernetes-renewing-114x-cluster-certificates