kubeadm으로 관리하기 인증서 관리 - 01
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