포스트

[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 라이센스를 따릅니다.