[Kubernetes] 갑자기 Pod가 안 떠? 인증서 만료를 의심해보세요!

[Kubernetes 운영] 갑자기 Pod가 안 떠? 인증서 만료를 의심해보세요!

며칠 전, Argo CD에서 배포가 계속 지연되고 kubectl 명령어가 작동하지 않는 이상한 상황을 겪었습니다.
"클러스터는 멀쩡한데 왜 Argo가 sync를 못 하지?"라고 의문이 들었죠. 결국 원인은 Kubernetes 인증서 만료였습니다.

💥 이런 증상 보이면 의심하세요

CI/CD가 갑자기 죽거나, 아래와 같은 에러 메시지를 보셨다면 인증서를 꼭 확인해보세요:

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

혹은 kubectl 명령어에서 아래와 같은 메시지가 나올 수도 있습니다:

Unable to connect to the server: x509: certificate has expired or is not yet valid

이 경우, apiserver 인증서의 만료 시점을 확인해보는 것이 첫 번째 조치입니다.

🔍 인증서 만료일 확인하는 법

마스터 노드에 접속해서 아래 명령어를 입력하세요:

openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text | grep ' Not '

예시 출력:

Not Before: Mar 01 06:00:00 2023 GMT
Not After : Feb 29 06:00:00 2024 GMT

현재 날짜가 Not After를 지났다면 인증서가 만료된 상태입니다. 🙀

🔧 인증서 갱신 Step-by-Step

1️⃣ 기존 인증서 백업

cp -r /etc/kubernetes/pki /etc/kubernetes/pki-backup

2️⃣ 인증서 일괄 갱신

kubeadm certs renew all

kubeadm alpha certs renew all은 최신 버전에서는 deprecated 되었으니 주의!

3️⃣ 갱신 확인

openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text | grep ' Not '

출력 결과에서 Not After 날짜가 연장되었는지 확인하세요.
예: Not After : Mar 27 07:30:00 2025 GMT

🧾 kubeconfig도 재생성해줘야 해요

4️⃣ Kubernetes 설정 디렉토리 백업

cp -r /etc/kubernetes /etc/kubernetes-backup

5️⃣ 주요 구성파일 다시 만들기

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

6️⃣ 사용자 kubeconfig 적용

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

🔄 서비스 재시작으로 마무리

🖥️ systemd 기반이면

systemctl daemon-reload
systemctl restart kubelet
systemctl restart kube-apiserver
systemctl restart kube-scheduler
systemctl restart kube-controller-manager

🐳 Docker로 실행 중이라면

docker restart k8s_kube-apiserver
docker restart k8s_kube-scheduler
docker restart k8s_kube-controller-manager

✅ 마무리 정리

  • Kubernetes 인증서는 기본적으로 1년 유효합니다.
  • 만료되면 kubelet, kubectl, CI/CD 등 전반적으로 영향이 갑니다.
  • kubeadm certs renew all로 인증서 갱신 후, 구성 파일도 함께 재생성해야 합니다.
  • 정기적인 확인 또는 알림 시스템 도입을 권장합니다.

운영 중인 클러스터가 갑자기 멈췄을 때, 인증서를 꼭 먼저 의심해보세요! 🔐

댓글

가장 많이 본 글