문제사항
내부에 기구축된 k8s 클러스터가 존재하여 외부에서 `kubectl`을 통한 클러스터 접근이 필요한 상황에서, 공유기의 포트포워딩 설정 후 공인아이피로 kubeconfig 파일수정 후 접근 시 아래 오류 발생
Unable to connect to the server: tls: failed to verify certificate: x509: certificate is valid for 10.96.0.1, 192.168.219.200, not {public-ip}
임시 해결 방법
`kubectl [command] --insecure-skip-tls-verify`시 인증서 검증 없이 명령을 처리하기 때문에 조회가 가능함
kubectl get pod --insecure-skip-tls-verify
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 12 (13m ago) 53d
문제 원인
임시 해결 방법에서 유추 가능하듯이 k8s 클러스터에 생성된 사설 인증기관에 공인ip에 대한 내용이 제외되어 있기 때문에 인증서 검증 오류가 발생함
root@controller:/etc/kubernetes/pki# openssl x509 -in apiserver.crt -text -noout
Certificate:
--생략--
X509v3 extensions:
X509v3 Subject Alternative Name:
DNS:controller.junkmm.lab, DNS:kubernetes, DNS:kubernetes.default, DNS:kubernetes.default.svc, DNS:kubernetes.default.svc.cluster.local, IP Address:10.96.0.1, IP Address:192.168.219.200
`kubeadm init`으로 클러스터 생성 시 내부 IP 정보로 SAN이 등록되어 apiserver.crt의 `X509v3 Subject Alternative Name.DNS` 필드 확인 시 공인 ip에 대한 정보가 없음
결론 : 공인 ip로 k8s apiserver 까지의 통신상 문제는 없으나 인증서 SANS가 등록되지 않아 검증 오류 발생
문제 해결
먼저 기존 apiserver 인증서를 백업한다.
# kubernetes 인증서 폴더 이동
cd /etc/kubernetes/pki
# bak 폴더를 만들고 apiserver.crt 및 .key를 bak 폴더로 옮김
mkdir bak && mv apiserver.* ./bak
아래 명령어를 통해 apiserver에 sans를 추가해준다. `8.8.8.8`은 예시 ip이고 본인의 ip나 dns를 입력해도 된다.
kubeadm init phase certs apiserver --apiserver-cert-extra-sans "8.8.8.8"
명령어가 정상 수행되었다면 `/etc/kubernetes/pki`폴더에 새로운 apiserver.crt와 key파일이 생겼을 것이다. 다시 openssl 명령을 통해 SANS 정보를 확인해보자.
openssl x509 -in apiserver.crt -text -noout
Certificate:
--생략--
X509v3 extensions:
X509v3 Subject Alternative Name:
DNS:controller.junkmm.lab, DNS:kubernetes, DNS:kubernetes.default, DNS:kubernetes.default.svc, DNS:kubernetes.default.svc.cluster.local, IP Address:10.96.0.1, IP Address:192.168.219.200, IP Address:{public-ip}
오류 발생 전과 비교해보면 `X509v3 Subject Alternative Name.DNS`필드에 새로 추가한 공인 ip를 확인할 수 있다.
기존의 api-server를 삭제하고 재기동 해야 한다. 본인 클러스터에 배포된 api-server의 이름에 맞춰 pod를 삭제하자.
kubectl delete pod -n kube-system kube-apiserver-controller.junkmm.lab
잘 작동하는지 확인하기 위해 ~/.kube/config 파일에 클러스터 ip주소를 공인ip로 변경한 상태로 `kubectl` 명령을 실행해보자.
참고
'ETC' 카테고리의 다른 글
HP SSA(Smart Storage Administrator) RAID 구성하기 (0) | 2023.07.04 |
---|