[K8S Deploy Study by Gasida]- k8s 컨트롤플레인 HA환경 구성 따라해보기 - 2 인증서 갱신
[K8S Deploy Study by Gasida]- k8s 컨트롤플레인 HA환경 구성 따라해보기 - 2 인증서 갱신
kubeadm certs renew 인증서 갱신과정
- 관리자가
kubeadm certs renew all명령어 실행한다. - /etc/kubernetes 에서 기존 인증서 및 Key를 로드한다.
- 새 만료기간 인증서 (.crt)를 저장한다
- Kubeconfig 내의 Embedded인증서를 업데이트 한다.
중요 : Static Pod는 인증서 변경을 자동으로 감지하지 못할 수 있음
- Static Pod 재시작을 유도한다. (manifests 파일 이동 또는 kubelet 재시작)
- kubelet새로운 인증서로 컨테이너를 재기동
- 갱신된 인증서로 서비스가 정상화 된다.
k8s-ctr1에서 kubeadm certs renew 인증서 갱신
인증서, kubeconfig 백업
/etc/kubernetes/pki 백업
1
2
cp -r /etc/kubernetes/pki /etc/kubernetes/pki.backup.$(date +%F)
ls -l /etc/kubernetes/pki.backup.$(date +%F)
/etc/kubernetes/*.conf 백업
1
2
3
mkdir /etc/kubernetes/backup-conf.$(date +%F)
cp /etc/kubernetes/*.conf /etc/kubernetes/backup-conf.$(date +%F)
ls -l /etc/kubernetes/backup-conf.$(date +%F)
etcd 정보 확인
1
# etctcdl 정보 확인 export ETCDCTL_API=3 # etcd v3 API를 사용 export ETCDCTL_CACERT=/etc/kubernetes/pki/etcd/ca.crt export ETCDCTL_CERT=/etc/kubernetes/pki/etcd/server.crt export ETCDCTL_KEY=/etc/kubernetes/pki/etcd/server.key export ETCDCTL_ENDPOINTS=https://127.0.0.1:2379 # listen-client-urls etcdctl member list -w table etcdctl endpoint status -w table
인증서 만료 상태 확인
kubeadm certs renew all 진행
- 인증서 전체 갱신 : 기존 cert 삭제 -> CA로 재서명된 새 cert 생성
- 참고로 CA 인증서(10년)는 변경되지 않음. 즉 나머지 controlplane node 에 CA 인증서 한번 더 복사할 필요 없음.
- 아래 출력 내용 처럼, 신규 인증서 적용을 위해서, static 파드 재시작 필요!
Expires Jan 24, 2027 14:34 UTC -> Jan 24, 2027 15:21 UTC 로 갱신된것 확인 
CA인증서는 그대로 두고 나머지 인증서를 신규생성한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
# ca 인증서는 그대로, 나머지 인증서는 신규 생성확인
ls -lt /etc/kubernetes/pki/
ls -lt /etc/kubernetes/pki/etcd
# apiserver 인증서
cat /etc/kubernetes/pki/apiserver.crt | openssl x509 -text -noout
# control component 의 kubeconfig 신규 생성 확인
ls -lt /etc/kubernetes/*.conf
# 특히 admin.conf 변경 확인
ls -l /etc/kubernetes/admin.conf
ls -l /etc/kubernetes/backup-conf.$(date +%F)/admin.conf
차이 발생 확인
1
vi -d /etc/kubernetes/backup-conf.$(date +%F)/admin.conf /etc/kubernetes/admin.conf
etcd도 여전히 leader인 상태확인
1
etcdctl endpoint status -w table
k8s-ctr1에서 Static Pod 재기동
static pod를 재기동할 것이다. Control Plane역시 HA 구성이 되어있으므로 영향이 없다.
static pod 매니페스트 백업
1
cp -r /etc/kubernetes/manifests /etc/kubernetes/manifests.backup.$(date +%F) ls -l /etc/kubernetes/manifests.backup.$(date +%F)
신규터미널에서 static pod 모니터링
1
2
watch -d crictl ps
watch -d kubectl get lease -n kube-system
이제 static pod manifest를 삭제해보자
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# static pod manifest 삭제 : 방안 1
# -------------------------------
rm -rf /etc/kubernetes/manifests/*.yaml
# static pod manifest 삭제 확인 : kube-apiserver 까지 삭제 확인
watch -d crictl ps
kubectl get lease -n kube-system
# static pod manifest 복사 -> 파드 재기동
cp /etc/kubernetes/manifests.backup.$(date +%F)/*.yaml /etc/kubernetes/manifests
tree /etc/kubernetes/manifests
# -------------------------------
# static pod manifest 삭제 : 방안 2
# -------------------------------
# crictl rmp - Remove one or more pods
crictl pods --namespace kube-system --name 'kube-scheduler-*|kube-controller-manager-*|kube-apiserver-*|etcd-*' -q | xargs crictl rmp -f
# -------------------------------
파드 기동 확인 : 참고로, CA가 바뀌지 않았기 때문에 예전 인증서도 신뢰됨
특히 admin.conf 변경 확인
1
2
3
ls -l /root/.kube/config
ls -l /etc/kubernetes/admin.conf
ls -l /etc/kubernetes/backup-conf.$(date +%F)/admin.conf
1
2
vi -d /root/.kube/config /etc/kubernetes/admin.conf
vi -d /etc/kubernetes/backup-conf.$(date +%F)/admin.conf /etc/kubernetes/admin.conf
admin.conf kubeconfig 재적용
1
2
3
4
yes | cp /etc/kubernetes/admin.conf ~/.kube/config ; echo
chown $(id -u):$(id -g) ~/.kube/config
kubectl config rename-context "kubernetes-admin@kubernetes" "HomeLab"
kubens default
kcm, scheduler 의 리더 파드가 k8s-ctr1 에서 각각 변경 확인!
etcd 리더에서 변경되었음을 확인하였다.
vagrant ssh k8s-ctr2가 리더가 되었음도 확인
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.












