본문 바로가기
Programming/Kubernetes

Kubernetes API Certs Renew (k8s 인증서 갱신)

by guru_k 2021. 11. 1.
728x90
반응형

Kubernetes 에서 사용되는 인증서는 별도의 옵션을 지정하지 않으면 default 1년의 유효기간을 가진다. 만료되거나 만료가 임박한 인증서의 경우엔 업그레이드 시 자동적으로 갱신이 되며, 별도의 방법으론 kubeadm을 통해 갱신을 할 수 있다.

kubernetes cluster 에서 인증서 관리가 필요한 인증서는 아래와 같다.

  • kube-apiserver-etcd-client
  • kube-apiserver
  • kube-apiserver-kubelet-client
  • front-proxy-client
  • kubelet.conf
  • admin.conf
  • controller-manager.conf
  • scheduler.conf

또한, kubelet.conf를 제외한 위의 인증서들은 /etc/kuberntes/pki 에서 확인이 가능하다.

kubelet의 경우 인증서 자동 갱신 기능을 사용해 인증서 기간이 다가 오면 kubelet client가 자동으로 인증서를 갱신한다. (1.18 버전 이후)

위에 언급했다 시피 default 인증서 유효기간은 1년이나 kube-controller-manager의 옵션을 통해 최대 10년까지 연장이 가능하다.

# /etc/kuberntes/manifests/kube-controller-manager.conf
--experimental-cluster-signing-duration: 87600h

그럼 kubeadm을 통한 인증서 자동 갱신을 진행해보자.

인증서 유효기간 확인

먼저 인증서 유효기간들을 확인해보자 

$ sudo kubeadm alpha certs check-expiration
CERTIFICATE                EXPIRES                  RESIDUAL TIME   CERTIFICATE AUTHORITY   EXTERNALLY MANAGED
admin.conf                 Nov 07, 2021 07:20 UTC   1m                                      no
apiserver                  Nov 07, 2021 07:20 UTC   1m              ca                      no
apiserver-kubelet-client   Nov 07, 2021 07:20 UTC   1m              ca                      no
controller-manager.conf    Nov 07, 2021 07:20 UTC   1m                                      no
front-proxy-client         Nov 07, 2021 07:20 UTC   1m              front-proxy-ca          no
scheduler.conf             Nov 07, 2021 07:20 UTC   1m                                      no
 
CERTIFICATE AUTHORITY   EXPIRES                  RESIDUAL TIME   EXTERNALLY MANAGED
ca                      Feb 07, 2031 07:20 UTC   9y              no
front-proxy-ca          Feb 07, 2031 07:20 UTC   9y              no

인증서 유효기간 갱신

인증서 갱신이 필요한 인증서를 확인했으면 갱신을 진행 해보자.

renew 명령어를 사용해서 인증서를 갱신한다.

$ sudo kubeadm alpha certs renew scheduler.conf --use-api &
  
eprecated and will be removed when 'certificates.k8s.io/v1' releases.
[renew] Reading configuration from the cluster...
[renew] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml'
 
[certs] Certificate request "kubeadm-cert-system:kube-scheduler-m5dnd" created

 

인증서 갱신 중인 목록을 Certificate Signing Requests (이하 csr)을 통해 살펴보자. 아래처럼 인증서 갱신 요청이 Pending 상태인것을 확인할 수 있다.

$ kubectl get csr
NAME                                                AGE   SIGNERNAME                     REQUESTOR          CONDITION
kubeadm-cert-system:kube-scheduler-a4cqb            21s   kubernetes.io/legacy-unknown   kubernetes-admin   Pending

 

현재 Pending 상태의 certs 를 approve 해준다.

$ kubectl certificate approve kubeadm-cert-system:kube-scheduler-a4cqb
certificatesigningrequest.certificates.k8s.io/kubeadm-cert-system:kube-scheduler-kn82f approved

 

approve 이후에 인증서 요청 상태를 확인해보자. approved 상태가 되었으며 정상 발급된것을 확인할 수 있다.

$ kubectl get csr
NAME                                                AGE   SIGNERNAME                     REQUESTOR          CONDITION
kubeadm-cert-system:kube-scheduler-a4cqb            109s   kubernetes.io/legacy-unknown   kubernetes-admin   Approved,Issued

 

이후 check-expiration을 통해 인증서가 정상 갱신 되었는지 확인 해보자.

$ sudo kubeadm alpha certs check-expiration
CERTIFICATE                EXPIRES                  RESIDUAL TIME   CERTIFICATE AUTHORITY   EXTERNALLY MANAGED
admin.conf                 Nov 07, 2021 07:20 UTC   1m                                      no
apiserver                  Nov 07, 2021 07:20 UTC   1m              ca                      no
apiserver-kubelet-client   Nov 07, 2021 07:20 UTC   1m              ca                      no
controller-manager.conf    Nov 07, 2021 07:20 UTC   1m                                      no
front-proxy-client         Nov 07, 2021 07:20 UTC   1m              front-proxy-ca          no
scheduler.conf             Nov 07, 2022 07:20 UTC   1y                                      no
 
CERTIFICATE AUTHORITY   EXPIRES                  RESIDUAL TIME   EXTERNALLY MANAGED
ca                      Feb 07, 2031 07:20 UTC   9y              no
front-proxy-ca          Feb 07, 2031 07:20 UTC   9y              no
728x90
반응형

댓글