본문 바로가기
개발/Docker&kubernetes

K3s 인증서 갱신(certificate has expired or is not yet valid)

by 궁즉변 변즉통 통즉구 2023. 1. 15.
반응형

K3s는 경량화된 Kubernetes로 설치가 쉽고, 적은 메모리/binary 파일을 사용하여 Edge/IoT 환경 혹은 CI/Dev 환경에서 k8s를 쉽게 사용할 수 있도록 도와주는 도구이다. Kubernetes를 줄여서 K8s라고 부르는데 그것보다 좀 더 경량화 된 버전을 Rancher에서 개발한 것이 K3s이다. 

 

K3s를 구성하여 테스트용도로 사용하는 중에 인증서 관련 오류가 발생해서 kubectl 명령들이 동작하지 않았다. 인증서 문제로 K3s 클러스터와의 통신이 되지 않는 상황이다. 

# kubectl get pods
Unable to connect to the server: x509: certificate has expired or is not yet valid

일반적인 K8s의 인증서 갱신 방법과는 달리 kubeadm 등을 사용하는 것도 아니라서 다음에 잘 기억하기 위해 정리해본다.

 

기본적으로 K3s는 수명이 1년인 내부 인증서를 생성한다. K3s 서비스를 다시 시작하면 만료되었거나 90일 이내에 만료될 예정인 인증서가 자동으로 교체되는데, K3s버전에 따라서 캐시된 인증서가 지워지지 않는 경우가 있다. 이런 경우 캐시를 수동으로 지워야 한다.

 

먼저 Host에서 아래 명령으로 인증서 만료일을 체크해본다.

openssl s_client -connect localhost:6443 -showcerts < /dev/null 2>&1 | openssl x509 -noout -enddate 

 

인증서 만료가 된 경우 먼저 K3s재시작을 해서 서비스를 확인해본다.

sudo systemctl restart k3s

 

 

만약, 재시작을 해서도 문제가 계속 발생하면 아래 내용들을 진행해본다.

 

먼저 tls 디렉토리를 혹시 모를 상황을 대비해서 백업해둔다.

sudo cp -r /var/lib/rancher/k3s/server/tls /var/lib/rancher/k3s/server/tls_backup

 

다음으로 tls의 dynamic-cert.json 파일을 삭제해준다.

sudo rm /var/lib/rancher/k3s/server/tls/dynamic-cert.json

 

다음으로 secret에 캐시된 인증서를 제거 한다.

sudo kubectl --insecure-skip-tls-verify=true delete secret -n kube-system k3s-serving

 

K3s서비스를 재시작해서 확인해보니 잘 된다.

sudo systemctl restart k3s

 

 

반응형

댓글