Kubernetes 인증서 만료

Published: by Creative Commons Licence

인증서 만료일 확인

회사 쿠버네티스 인증서 만료일이 얼마 남지 않았다는 이야기를 들었다. 확인을 위해 인증서 만료일을 확인하기 위해서 마스터 노드에 접속 후 확인해 보았다. 확인을 해보니 인증서 만료일은 Jun 11 02:31:10 2021 GMT 이고 이 기간 내에 인증서 갱신을 하지 않으면 서비스에는 영향이 없지만 kubectl 명령을 정상적으로 사용할 수 없게 된다.

명령어로 직접 확인

$ cd /etc/kubernetes/pki

$ openssl x509 -in apiserver.crt -noout -dates
notBefore=Dec  9 07:53:31 2019 GMT
notAfter=Jun 11 02:31:10 2021 GMT

$ openssl x509 -in apiserver-kubelet-client.crt -noout -dates
notBefore=Dec  9 07:53:31 2019 GMT
notAfter=Jun 11 02:31:10 2021 GMT

$ openssl x509 -in front-proxy-client.crt -noout -dates
notBefore=Dec  9 07:53:32 2019 GMT
notAfter=Jun 11 02:31:11 2021 GMT

check.sh 스크립트를 만들어서 확인

$ cat check.sh 
for crt in /etc/kubernetes/pki/*.crt; do
     printf '%s: %s\n' \
     "$(date --date="$(openssl x509 -enddate -noout -in "$crt"|cut -d= -f 2)" --iso-8601)" \
     "$crt"
done | sort

$ sh check.sh
2021-06-11: /etc/kubernetes/pki/apiserver-kubelet-client.crt
2021-06-11: /etc/kubernetes/pki/apiserver.crt
2021-06-11: /etc/kubernetes/pki/front-proxy-client.crt
2029-12-06: /etc/kubernetes/pki/ca.crt
2029-12-06: /etc/kubernetes/pki/front-proxy-ca.crt

인증서 생성

apiserver-kubelet-client 인증서만 다시 생성하면 되지만 만료일이 2021-06-11 로 같은 apiserver, front-proxy-client 인증서도 생성할 예정이다.

인증서 백업

$ cd /etc/kubernetes/pki
$ mv apiserver.key apiserver.key.old
$ mv apiserver.crt apiserver.crt.old
$ mv apiserver-kubelet-client.key  apiserver-kubelet-client.key.old
$ mv apiserver-kubelet-client.crt  apiserver-kubelet-client.crt.old
$ mv apiserver-etcd-client.key front-proxy-client.key.old
$ mv apiserver-etcd-client.crt front-proxy-client.crt.old

X509v3 Subject Alternative Name 확인

X509v3 Subject Alternative Name 항목에 마스터 노드의 IP가 포함되어 있어야 한다.

... 생략

X509v3 Subject Alternative Name: 
                DNS:xxx-cluster-01, DNS:kubernetes, DNS:kubernetes.default, DNS:kubernetes.default.svc, DNS:kubernetes.default.svc.mobon.platform, IP Address:xx.xx.x.1, IP Address:xx.xxx.x.191, IP Address:xx.xxx.x.194
                
...생략

kubeadm을 이용한 인증서 생성

–apiserver-cert-extra-sans 파라미터의 값으로 X509v3 Subject Alternative Name에서 조회한 값을 넣고 실행할 예정. 결과는 해보고 업데이트 할 예정이다.

$ kubeadm alpha phase certs apiserver --apiserver-cert-extra-sans 'X509v3 Subject Alternative Name에서 조회한 값'
$ kubeadm alpha phase certs apiserver-kubelet-client
$ kubeadm alpha phase certs front-proxy-client

conf파일 다시 생성

$ cd /etc/kubernetes
$ mv admin.conf admin.conf.old
$ mv kubelet.conf kubelet.conf.old
$ mv controller-manager.conf controller-manager.conf.old
$ mv scheduler.conf scheduler.conf.old

$ kubeadm alpha phase kubeconfig all
OR
$ kubeadm alpha phase kubeconfig admin
$ kubeadm alpha phase kubeconfig kubelet
$ kubeadm alpha phase kubeconfig controller-manager
$ kubeadm alpha phase kubeconfig scheduler

개발노트를 정리하는 지금은 인증서 업데이트를 하기 전 준비단계이다. 2021-06-11 인증서 만료일 전에 업데이트를 진행하고 개발노트에 결과를 반영할 예정이다. 인증서 갱신하는 날 내가 휴가라 갱신 과정을 정확하지 못했지만 위의 절차대로 진행하게 되면 큰 문제없이 인증서 갱신이 되었을 것이라고 팀장님께 피드백을 전달받았다…

참고

kubernetes 인증서 만료
K8S apiserver에 SAN(Subject Alternative Name) 추가