[Kubernetes] 쿠버네티스 컴포넌트(Controlplane) 인증서 재발급
쿠버네티스 클러스터를 구축하면 Api-server는 모든 통신을 함에 있어 기본적으로 Https 통신을 한다.
이로 인하여 각 쿠버네티스 컴포넌트는 Api-server와 통신을 할 때, 클러스터의 초기화 및 합류하는 시점에서 인증서와 개인 키를 발급하고 통신에 사용한다.
기본적으로 인증서의 유효 기간은 1년이며, 이번 내용은 발급된 인증서의 유효 기간 확인 및 재발급에 대하여 다룰 것이다.
Kubeadm으로 쿠버네티스 클러스터를 구축하고, Controlplane의 /etc/kubernetes 경로의 하위 파일들을 보면 아래와 같다.
이는 각 쿠버네티스 컴포넌트의 설정 값이 포함된 파일들이 있고, 그 내용은 아래 양식과 같다.
여기서 각 컴포넌트들의 인증서와 개인 키 값이 conf 파일에 내장되어 있는 것을 볼 수가 있는데, 이는 kubeadm을 초기화(init)할 때, 생성되는 설정 값으로 기한이 최대 1년인 인증서가 만들어진다.
그 외에도 api-server와 etcd 등에 이용되는 인증서 및 개인 키 파일은 /etc/kubernetes/pki에 생성이 된 것을 확인할 수 있다.
쿠버네티스 클러스터를 아래 깃허브에서 설명해 주는 것처럼 end-to-end로 구축을 한다면, 앞서 본 인증서와 개인 키들을 수동으로 각각 발급하고, 각 컴포넌트 별로 수동으로 설정해야 한다.
https://github.com/kelseyhightower/kubernetes-the-hard-way
※ 1.15 버전보다 낮을 경우 수동 발급할 필요가 있다.
(https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/)
최근 버전은 이러한 기능이 kubeadm에 내포되어 있다.
유효 기간 확인
※ 1.29 버전 기준
Controlplane 노드에서 아래 명령어를 실행하면, 각 컴포넌트의 유효 기간을 확인할 수 있다.
# 인증서 만료기간 확인
kubeadm certs check-expiration
명령어를 실행하면 아래처럼 확인이 가능하다.
admin.conf부터, 각 컴포넌트와 통신을 하기 위한 인증서 등의 잔존 기간을 확인할 수 있다.
또는 이전에서 보았던 /etc/kubernetes/pki 하위의 crt 파일을 직접 확인할 수도 있다.
아래는 api-server의 인증서의 유효 기간을 확인하는 명령어다.
# api-server 인증서 위치로 이동
/etc/kubernetes/pki
# api-server 유효 기간 확인
openssl x509 -in apiserver.crt -noout -dates
이전의 kubeadm에서 확인한 것과 같은 만료 시간이다.
인증서 재발급
인증서 유효 기간을 확인했으면, 이제는 새로 발급할 부분을 알아볼 것이다.
kubeadm에서 제공되기에 어렵지 않게 재발급을 할 수 있다.
# 모든 인증서 재발급
kubeadm certs renew all
한 줄의 명령어를 통하여 모든 인증서의 재발급이 가능하다.
위 사진처럼, 각 인증서들이 재발급되는 과정을 볼 수 있고, 이전의 각 인증서 확인하는 명령어를 통하여 유효 기간을 재 확인할 수 있다.
※ 재발급 후 각 컴포넌트 파드는 재시작해주어야 한다.
# 인증서 만료기간 확인
kubeadm certs check-expiration
위 사진을 기반으로, 인증서들은 만료기간이 연장된 것을 확인할 수 있다.
하지만 admin.conf는 kubeadm의 초기화 시 .kube에 복사했던 파일과 다르기에 아래 명령어를 통해 복사해줘야 한다.
# admin.conf 복사
cp /etc/kubernetes/admin.conf ~/.kube/config
※ /var/lib/kubelet/pki에 존재하는 crt는 업데이트되지 않으니 별도 작업을 통하여 재발급을 해야 하고, /etc/kubernetes 하위에 재발급되지 않은 인증서는 기본 10년 유효기간이니 참고해야 할 것이다.