카테고리 없음

kubeadm으로 관리하기 인증서 관리 - 01

겸겸사 2022. 2. 17. 18:30

Kubeadm을 사용한 인증서 관리

 

kubeadm을 통해 생성된 Client 인증서는 1년 후에 만료된다.

 

사용자 정의 인증서를 사용하려면 아래의 링크에 대한 내용을 확인 및 파악, 익숙하게 사용해야 가능하다.

https://kubernetes.io/ko/docs/setup/best-practices/certificates/

 

PKI 인증서 및 요구 사항

쿠버네티스는 TLS를 통한 인증을 위해서 PKI 인증서가 필요하다. 만약 kubeadm으로 쿠버네티스를 설치한다면, 클러스터에 필요한 인증서는 자동으로 생성된다. 또한 더 안전하게 자신이 소유한 인

kubernetes.io

 

그렇지 않은경우는 사용자 정의 인증서 처리를 안 하는 것을 추천한다.

 

위의 내용에 대하여서 이해가 있다는것을 전제로 이후 내용에 대해서 설명하겠다. 

 

[사용자 정의 인증서 사용방법]

kubeadm init 을 수행할 때 --cert-dir 플래그를 통해 지정하거나 kubeadm의 ClusterConfiguration의 certificatesDir 필드에 지정된 디렉터리에 인증서를 저장해서 사용하면 된다. Default 값은 /etc/kubernetes/pki 다. 

 

그 외에 지정된 인증서 및 개인키 (Private Key) 가 존재한다면, kubeadm을 이를 덮어쓰기 처리를 하지 않는다. 

 

[외부 CA]

ca.key 파일이 아닌 ca.crt 파일만 제공이 가능하나, 이는 Root CA 파일에만 가능하다.  다른 모든 인증서 및 kubeconfig 파일이 있는 경우 kubeadm 이 이 조건을 인지하고 "외부 CA" 모드를 활성화한다. 

--controllers=csrsigner를 사용하여 controller-manager를 독립적으로 실행

 

[인증서 만료 확인방법]

check-expiration 명령어를 사용하여 인증서 만료시점이 확인이 가능하다. 

 

kubeadm certs check-expiration 

 

출력결과는 아래의 내용처럼 출력된다. 

 

CERTIFICATE                EXPIRES                  RESIDUAL TIME   CERTIFICATE AUTHORITY   EXTERNALLY MANAGED
admin.conf                 Dec 30, 2020 23:36 UTC   364d                                    no
apiserver                  Dec 30, 2020 23:36 UTC   364d            ca                      no
apiserver-etcd-client      Dec 30, 2020 23:36 UTC   364d            etcd-ca                 no
apiserver-kubelet-client   Dec 30, 2020 23:36 UTC   364d            ca                      no
controller-manager.conf    Dec 30, 2020 23:36 UTC   364d                                    no
etcd-healthcheck-client    Dec 30, 2020 23:36 UTC   364d            etcd-ca                 no
etcd-peer                  Dec 30, 2020 23:36 UTC   364d            etcd-ca                 no
etcd-server                Dec 30, 2020 23:36 UTC   364d            etcd-ca                 no
front-proxy-client         Dec 30, 2020 23:36 UTC   364d            front-proxy-ca          no
scheduler.conf             Dec 30, 2020 23:36 UTC   364d                                    no

CERTIFICATE AUTHORITY   EXPIRES                  RESIDUAL TIME   EXTERNALLY MANAGED
ca                      Dec 28, 2029 23:36 UTC   9y              no
etcd-ca                 Dec 28, 2029 23:36 UTC   9y              no
front-proxy-ca          Dec 28, 2029 23:36 UTC   9y              no

이 명령은 /etc/kubernetes/pki 폴더의 클라이언트 인증서와 kubeadm이 사용하는 KUBECONFIG 파일(admin.conf, controller-manager.conf  scheduler.conf)에 포함된 클라이언트 인증서의 만료/잔여기간을 표시한다.

또한, kubeadm은 인증서가 외부에서 관리되는지를 사용자에게 알린다. 이 경우 사용자는 수동으로 또는 다른 도구를 사용해서 인증서 갱신 관리를 해야 한다.

 

!! kubeadm 은 외부 CA 가 서명한 인증서를 관리할 수 없다. 보여만 준다. 

 

kubelet.conf 는 위 목록에 포함되어있지 않은데 이는 kubeadm 이 자동 인증서 갱신을 위해 각 Node에 존제하는 /var/lib/kubelet/pki 에 있는 갱신 가능한 인증서를 이용하여 kubelet을 구성하기 때문이다. 

 

!! kubeadm 1.17 이전의 버전에서 kubeadm init 으로 작성된 Node 에는 kubelet.conf 파일을 수동으로 수정해야 하는 버그가 있다. "https://github.com/kubernetes/kubeadm/issues/1753

 

kubeadm init 수행 완료 후, client-certificate-data  client-key-data 를 다음과 같이 교체하여, 로테이트 된 kubelet 클라이언트 인증서를 가리키도록 kubelet.conf 를 업데이트해야 한다.

client-certificate: /var/lib/kubelet/pki/kubelet-client-current.pem
client-key: /var/lib/kubelet/pki/kubelet-client-current.pem