NfreerCom / servermaster

시스템관리자
MIT License
0 stars 0 forks source link

쿠버네티스 인증서 종료시 #76

Open NfreerCom opened 2 months ago

NfreerCom commented 2 months ago

ubernetes(쿠버네티스) 인증서 교체하기 (x509: certificate has expired) DevOps/Kubernetes

by Hoonjo 2023. 6. 16. 19:00 본문

Kubernetes(쿠버네티스) 내부 인증서 교체하기

(unable to connect to the server: x509: certificate has expired or is not yet valid:)

사내 쿠버네티스에 ArgoCD로 어플리케이션 배포중 x.509 certificate 관련 에러 발발 💣

에러 내용 :
unable to connect to the server: x509: certificate has expired or is not yet valid: current time...

어..? 이건 또 뭔....

어플리케이션에서 사용하는 SSL 인증서만 교체해주면 되는지 알았더니

쿠버네티스가 사용하는 인증서가 별도로 있었고...

그 인증서가 만료가 된 것이다.

잠깐 혹시.. 서비스에 영향이 있을까?

접속해보니 서비스는 잘 된다.

다만 kubectl 명령어가 안되더이다. 그러니 배포도 안되지

다행히 운영 K8s에는 아직 만료되지 않았고, 개발 K8s에 먼저 교체 후 운영에도 빠른 조치를 진행했다.

1. 인증서 기간 확인

기존 인증서 기간 확인 해보자

명령어:

kubeadm certs check-expiration

kubeadm certs check-expiration kubeadm certs check-expiration 결과

바꿔 바꾸라고

2. 기존 인증서 백업

혹시 잘못될 경우 롤백 해야한다 백업은 생활화 하자

/etc/kubernetes 경로에 쿠버네티스 설정파일과 인증서들이 존재한다.

명령어:

cp -pr /etc/kubernetes/ /etc/kubernetes_backup

3. 인증서 갱신

명령어로 간단히 갱신이 가능하다.

명령어:

kubeadm certs renew all

kubeadm certs renew all 결과

/etc/kubernetes 폴더에서 ll (또는 ls -l) 명령어로 확인하면 admin.conf 파일이 수정된 것이 보인다.

ls -l 결과

이 인증서를 $HOME/.kube 경로에 존재하는 config 파일에 덮어씌워야 한다.

왜?

실제 admin.conf 파일과 config 파일을 열어보면 양식이 일치한다.
기본적으로 kubectl 명령어를 사용하면 $HOME/.kube 경로에 존재하는 config 파일을 먼저 찾게된다.
그래서 config 파일을 교체해줘야 하더이다.

명령어:

\cp /etc/kubernetes/admin.conf /root/.kube/config

kube-apiserver, kube-controller-manager, kube-scheduler, kubelet, daemon 재기동 및 설정 적용해보자.

명령어:

kill -s SIGHUP $(pidof kube-apiserver) kill -s SIGHUP $(pidof kube-controller-manager) kill -s SIGHUP $(pidof kube-scheduler) systemctl restart kubelet systemctl daemon-reload

kubeadm certs check-expiration 결과