DevOps/Kubernetes

K3s certificate expired

KIM DEON 2023. 4. 26. 22:57

K3s 인증서 유효 기간은 1년이다. K3s 서비스를 재시작하면 만료 혹은 90일 이내로 남은 인증서가 업데이트된다. 

 

kubectl 사용시 다음과 같은 에러가 발생했는데 인증서 이슈였다. kubeconfig의 cert가 유효하지 않아 나는 에러이다.

$ kubectl get po
error: You must be logged in to the server (Unauthorized)

 

자세한 로그는 k3s 서비스 로그를 확인하자.

# master node
$ sudo systemctl status k3s

K3s 인증서 업데이트

1. 인증서 만료일 확인

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

2. 기존 tls  백업

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

3. dynamic-cert.json 파일 삭제

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

4. 기존 인증서 secret 삭제

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

5. k3s 서비스 재시작 (인증서 업데이트) 

sudo systemctl restart k3s

k3s kubeconfig 확인

cat /etc/rancher/k3s/config.yaml

해당 에러가 해결되어 이슈가 해결된 줄 알았으나 k8s service간 통신이 안되기 시작했다.

다른 서비스로 dns 요청도 서비스 ClusterIP를 통한 요청도 다 커넥션이 안되서 이게 대체 어느쪽 네트워크 이슈인가.. 했는데 k3s 로그를 보니 다른 노드와 통신이 안되는 듯 했다.

$ sudo systemctl status k3s 
...
k3s[11052]: time="2023-04-24T17:12:08.258729588+09:00" level=error msg="Failed to authenticate request from <worker node IP>:<port>: invalid username/password combination"
k3s[11052]: E0424 17:12:09.423109   11052 authentication.go:53] Unable to authenticate the request due to an error: x509: certificate has expired or is not yet valid: current time 2023-04-24T17:24:58+09:00 is after 2023-04-22T08:41:28Z

그리고 인증서 업데이트가 되었는데 만료된 인증서라고.. 

아무래도 worker node의 agent엔 인증서 반영이 안된 듯 했다.

 

worker node의 k3s-agent 재시작

# worker node
$ systemctl restart k3s-agent

해결..

kubeadm을 주로 사용하다보니 k3s 이슈가 생기면 당황스럽다ㅎㅎ