개요
kubernetes 인증서는 1년의 유효기간을 갖고 있으므로 매년 갱신이 필요하다.
이 글에서는 kubeadm으로 구성된 쿠버네티스 클러스터 인증서 갱신 방법을 정리해둔다.
인증서 갱신 방법
1. 인증서 유효기한 확인
kubeadm alpha certs check-expiration
# 또는
kubeadm certs check-expiration
2022년 4월 10일에 대부분의 인증서가 만료되는 것을 확인할 수 있다.
2. 인증서 등 설정 백업
인증서 갱신이 원활하지 않을 경우를 대비하여 원하는 경로에 설정 파일 등을 백업해둔다.
실제 인증서 관련 디렉터리는 /etc/kubernetes/pki이다.
# kubernetes 설정 백업
cp -rp /etc/kubernetes /etc/kubernetes_yyyymmdd
# kubeconfig 설정 백업
cp -rp ~/.kube ~/kube_yyyymmdd
3. 인증서 갱신
kubeadm alpha certs renew all
# 또는
kubeadm certs renew all
4. 인증서 갱신 결과 확인
인증서 유효 기간이 364일로 갱신된 것을 확인할 수 있다.
이후에 추가적인 작업이 몇 가지 필요하다.
쿠버네티스 컴포넌트 재시작
쿠버네티스에서 일부 구성 요소 및 인증서에 대한 동적 재로딩을 지원하지 않기 때문에 controlplane node(master node)의 static pod는 수동으로 재시작해야 한다.
재시작이 필요한 static pod는 kube-apiserver, kube-controller, kube-scheduler, etcd이며, kubelet 서비스 또한 재시작이 필요하다. kubeadm으로 구성된 클러스터의 경우 /etc/kubernetes/manifest 아래의 yaml 파일을 잠시 다른 경로로 옮겨두었다가 원복 하는 방식으로 static pod를 재시작할 수 있다.
1. Static Pod 프로세스 확인
실행 중인 도커 컨테이너 또는 프로세스 목록을 확인하도록 한다.
docker 엔진 사용 시
docker ps
ps -ef | grep kube-
2. Static Pod 종료
관련 매니페스트 파일을 다른 경로로 옮긴다.
mkdir /etc/kubernetes/manifests_backup
mv /etc/kubernetes/manifests/* /etc/kubernetes/manifests_backup/
기본적으로 컴포넌트 종료에 20초 ~ 2분 정도의 대기시간이 필요하다.
3. Static Pod 프로세스 종료 확인
관련 컨테이너가 실행되고 있지 않은 것을 확인할 수 있다.
4. Static Pod 시작
프로세스가 종료된 것을 확인했다면 잠시 옮겨두었던 매니페스트 파일을 다시 기존 경로로 원복 한다.
mv /etc/kubernetes/manifests_backup/* /etc/kubernetes/manifests/
5. 프로세스 확인
관련 컨테이너가 재생성된 것을 확인할 수 있다.
6. kubelet 서비스 재시작
systemctl restart kubelet.service
kubeconfig 적용
kube-apiserver와 통신하기 위한 kubeconfig가 변경되었으므로 kubectl을 사용할 계정에 kubeconfig를 적용시킨다.
먼저 해당 파일이 정상적으로 변경되었는지 확인한다.
md5sum /etc/kubernetes/admin.conf ~/kube_yyyymmdd/config
결과값에 차이가 있는지 확인한 후, admin.conf를 복사한다.
sudo cp /etc/kubernetes/admin.conf ~/.kube/config
# 또는
cp /etc/Kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
chmod 777 $HOME/.kube/config
서비스 확인
이후로는 kubernetes 클러스터에서 동작하고 있던 서비스에 이상이 없는지 확인한다.
특정 서비스(내 경우, JupyerHub)는 서비스 재시작을 해야 정상적으로 동작했다.
갱신 작업 자체는 완료되었지만 기존 인증서 만료일 이후에도 이상이 없는지는 해당 시점에 확인해봐야 할 것 같다.
참고 문서
https://kubernetes.io/ko/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/
https://jinsiri.tistory.com/599
https://malwareanalysis.tistory.com/125
https://github.com/tmax-cloud/install-k8s/blob/main/KUBE_CERTIFICATE_UPDATE_README.md