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
댓글