[Kubernetes] API Server 에 SAN(Subject Alternative Name)추가

91Savage·2023년 9월 19일
0

kubernetes

목록 보기
3/4

클라우드에 KubeSpray로 구축한 클러스트를 로컬 PC에서 접근하여 사용하려고 하는중에 문제 발생

~/.kube 하위에 config 값을 로컬 PC에 붙여넣어 두니 연결은 잘 되었다

그러나 kubectl 명령어를 칠 때마다

tls: failed to verify certificate: x509: certificate is valid for 10.233.0.1, 10.128.0.8, 127.0.0.1, not “PublicIP”

라고 에러가 뜸

kubectl —insecure-skip-tls-verify —context=kubernetes-admin@cluster.local get all 

이런식으로 인증을 skip하는 형식으로 하면 잘 됨

이런 경우엔 클러스터 API 서버의 인증서에 PublicIp가 등록되어 있지 않아서 발생하는 이슈이다.

openssl x509 -in /etc/kubernetes/pki/apiserver.crt -text
X509v3 Subject Alternative Name:
                DNS:kubernetes, DNS:kubernetes.default, DNS:kubernetes.default.svc, DNS:kubernetes.default.svc.cluster.local, DNS:lb-apiserver.kubernetes.local, DNS:localhost, DNS:master, DNS:master.cluster.local, IP Address:10.233.0.1, IP Address:10.128.0.8, IP Address:127.0.0.1

내용을 보면 x509v3 Subject Alternative Name에 등록되어 있는 IP 중 PublicIP는 없는것이 확인 된다.

kubectl -n kube-system get configmap kubeadm-config -o yaml

certSANs 에 IP를 추가 해야 됨.

IP를 추가 하기전에 /etc/kubernetes/pki 에 있는 apiserver.key, apiserver.crt 파일을 다른곳에 옮겨야 함.
그렇지 않으면 인증서가 새로 생성되지 않음

mv apiserver.key apiserver.crt ~/.kube/
  • Public IP 추가
sudo kubeadm init phase certs apiserver --apiserver-cert-extra-sans="추가할 IP"
sudo kubeadm init phase certs apiserver --apiserver-cert-extra-sans="Public IP"
I0919 04:58:00.024803  147790 version.go:256] remote version is much newer: v1.28.2; falling back to: stable-1.27
[certs] Generating "apiserver" certificate and key
[certs] apiserver serving cert is signed for DNS names [kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local master] and IPs [10.96.0.1 10.128.0.8 "Public IP"]
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -text

Public IP가 추가된것이 확인 됨.

0개의 댓글