일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- kotin
- k8s-driver-plugin
- kubectl #
- #Kuberspawner
- kubernetes자동완성
- RunContainerError
- 삶이란...
- BigSur
- worker node
- nvidia-container-cli
- mac m1
- macm1
- nvidia-docker
- 코틀린
- ₩
- nvidia-driver-plugin
- kubernetes
- #kubernetes
- GPU
- 얼굴분류
- Kubernets 이론
- Pods Evicted
- 넘무무서웡...
- k8s고장나면
- k8s
- k8s-device-plugin
- kubectl completion bash
- Kotlin
- face verification
- 얼굴검출
- Today
- Total
더듬이
[Kubespawner] kubernetes pkl 인증서 갱신 본문
예전에 끔찍한 일이 한번 있었다.
kubespawner에서 컨테이너를 생성하는데 생전 처음보는 에러가 생성되었다.
SSL인증서가 만료되었다고 하는 말에 SSL 인증서 쓰는게 뭐있지... 하고 생각만했었다.
에러 로그 확인
HTTPSConnectionPool(host=hostVM, port=6443): Max retries exceeded with url: /api/v1/namespaces (Caused by SSLError(SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')])")))
해당 문제를 검색해보니 kubernetes cluster내부에서 통신시에 사용하는 ssl 인증서가 만료되어 발생한 문제였다.
그래서 인증서 갱신을 할때 사용하는 kubectl 명령어로 인증서를 갱신하려했지만.....
어떤 kubectl 명령어를 사용해도 아래와 같은 에러가발생했었다.
The connection to the serve
r hostvm:6443 was refused - did you specify the right host or port?
하.. 쿠버네티스 API 인증서도 만료.... 이때부터 눈물이 앞을 가렸다....
인증서 유효기간 확인
이제 남은건 kubernetes cluster 구성할때 이후로 한번도 써보지않은 kubeadm으로 인증서를 갱신하는 방법이다.
kubeadm alpha certs check-expiration
를 통해 인증서 남은 날짜를 확인하고
인증서 백업
일단 이전 인증서들을 백업하자.
mkdir /home/myuser/kube-backup/pki
mv {apiserver.crt,apiserver-etcd-client.key,apiserver-kubelet-client.crt,front-proxy-ca.crt,front-proxy-client.crt,front-proxy-client.key,front-proxy-ca.key,apiserver-kubelet-client.key,apiserver.key,apiserver-etcd-client.crt} /home/myuser/kube-backup/pki
mkdir /home/myuser/kube-backup/conf_dir
mv /etc/kubernetes/*.conf /home/myuser/kube-backup/conf_dir
인증서 갱신!
이후 아래 명령어를 통해 모든 인증서를 갱신한다.
kubeadm init phase certs all
그러면 아래와 같이 인증서들이 새로 생긴다.
[certs] Using certificateDir folder "/etc/kubernetes/pki"
[certs] Generating "ca" certificate and key
[certs] Generating "apiserver" certificate and key
[certs] apiserver serving cert is signed for DNS names [master-node kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] and IPs
[certs] Generating "apiserver-kubelet-client" certificate and key
[certs] Generating "front-proxy-ca" certificate and key
[certs] Generating "front-proxy-client" certificate and key
[certs] Generating "etcd/ca" certificate and key
[certs] Generating "etcd/server" certificate and key
[certs] etcd/server serving cert is signed for DNS names [master-node localhost] and IPs []
[certs] Generating "etcd/peer" certificate and key
[certs] etcd/peer serving cert is signed for DNS names [master-node localhost] and IPs []
[certs] Generating "etcd/healthcheck-client" certificate and key
[certs] Generating "apiserver-etcd-client" certificate and key
[certs] Generating "sa" key and public key
이제 다시 인증서 정보를 검색해보면 인증서 기간이연장된 것이 보인다.
kubeadm alpha certs check-expiration
config 파일에서 인증서 사용되는 필드 변경
내 master node는 예전에 한번 갱신해줘서 admin.conf 가 27일 남았지만
아마 만료 이후에 새로 인증서 갱신한 사람들은 만료되었다고 떳을 것이다 .
admin.conf 등의 config 파일들은 새로 갱신된 인증값들에 맞춰 따로 갱신해야한다.
W1209 11:22:11.438102 94815 validation.go:28] Cannot validate kube-proxy config - no validator is available
W1209 11:22:11.441018 94815 validation.go:28] Cannot validate kubelet config - no validator is available
CERTIFICATE EXPIRES RESIDUAL TIME CERTIFICATE AUTHORITY EXTERNALLY MANAGED
admin.conf Jan 06, 2021 01:06 UTC 27d no
apiserver Dec 09, 2021 02:21 UTC 364d ca no
apiserver-etcd-client Dec 09, 2021 02:21 UTC 364d etcd-ca no
apiserver-kubelet-client Dec 09, 2021 02:21 UTC 364d ca no
controller-manager.conf Jan 06, 2021 01:06 UTC 27d no
etcd-healthcheck-client Dec 09, 2021 02:21 UTC 364d etcd-ca no
etcd-peer Dec 09, 2021 02:21 UTC 364d etcd-ca no
etcd-server Dec 09, 2021 02:21 UTC 364d etcd-ca no
front-proxy-client Dec 09, 2021 02:21 UTC 364d front-proxy-ca no
scheduler.conf Jan 06, 2021 01:06 UTC 27d no
CERTIFICATE AUTHORITY EXPIRES RESIDUAL TIME EXTERNALLY MANAGED
ca Dec 07, 2030 02:21 UTC 9y no
etcd-ca Dec 07, 2030 02:21 UTC 9y no
front-proxy-ca Dec 07, 2030 02:21 UTC 9y no
아래 명령을 통해서 config 파일들을 새로 생성한다.
kubeadm init phase kubeconfig all
아래 메시지와 같이 나오면 갱신 성공이다.
W0331 19:09:50.508040 13442 version.go:102] falling back to the local client version: v1.16.3
[kubeconfig] Using kubeconfig folder "/etc/kubernetes"
[kubeconfig] Using existing kubeconfig file: "/etc/kubernetes/admin.conf"
[kubeconfig] Using existing kubeconfig file: "/etc/kubernetes/kubelet.conf"
[kubeconfig] Using existing kubeconfig file: "/etc/kubernetes/controller-manager.conf"
[kubeconfig] Using existing kubeconfig file: "/etc/kubernetes/scheduler.conf"
새로운 인증서 kubernetes에 적용!
이제 새로운 인증값들을 kuberntes에서 사용하도록 해주면 된다.
먼저 kubelet이 읽어오는 config 파일을 새로 생성한 admin.conf 파일로 교체!
cp /etc/kubernetes/admin.conf ~/.kube/config
systemctl restart kubelet
이렇게 한다음에 kubectl 명령어를 사용하면!
error: You must be logged in to the server (Unauthorized)
ㅎ... 현재 kube-system들의 pod들이 예전 인증 정보를 가지고 있기에 Unauthorized error가 발생한다.
docker restart를 통해서 전부 재실행 해준다. (이때 pod들이 자동 재시작 설정안되어 있으면 일일히 다시 켜줘야한다...)
이젠 진짜로 kubectl 커맨드도 작동되고 pods 생성도 잘된다....
NAMESPACE NAME READY STATUS RESTARTS AGE
admin-20 admin-2d20 1/1 Running 0 41d
admin-30 admin-2d30 1/1 Running 0 41d
kube-system coredns-6955765f44-l7l8s 1/1 Running 22 337d
kube-system coredns-6955765f44-ngb4s 1/1 Running 22 337d
kube-system etcd-master-node 1/1 Running 27 337d
kube-system kube-apiserver-master-node 1/1 Running 36 337d
kube-system kube-controller-manager-master-node 1/1 Running 167 337d
kube-system kube-proxy-k4966 1/1 Running 18 140d
kube-system kube-proxy-zdzzv 1/1 Running 6 140d
kube-system kube-scheduler-master-node 1/1 Running 150 337d
kube-system metrics-server-7779997b4-zjf42 1/1 Running 7 138d
kube-system weave-net-fw5r6 2/2 Running 19 337d
kube-system weave-net-wt54n 2/2 Running 60 337d
아무래도 처음부터 kubenretes cluster를 구성해보면 PKL인증서를 쓴다는 것을 바로 알 수 있는 문제 였고 명령어 한줄만 입력하면 발생하지 않을 문제였는데 Kubernets라는 수박을 할짝거리기만 해서 생긴 문제인것 같다.
'Kubernetes' 카테고리의 다른 글
[kubernetes] k8s 클러스터에 gpu worker node 붙이기 (0) | 2021.07.01 |
---|---|
[kubernetes] gpu 노드에 gpu 없이 없이 pods 생성하기 (0) | 2021.07.01 |
[Kubernetes] gpu 장비 에러 nvidia-container-cli Error nvidia-device-plugin RunContinerError (0) | 2021.07.01 |
[Kubernetes] Pods Evicted error The node was low on resource 해결 방법 (0) | 2021.05.25 |
[Kubernetes] kubectx 설치 후 사용하기 (0) | 2021.05.07 |