개요
보안 상의 이유로 IP의 Class A, Class B를 가리고, 등록할 엔드포인트 IP는 10.10.10.1 이라고 가정하겠다.
관리하는 쿠버네티스의 클러스터가 많아질 수록, kubeconfig 파일에 여러 개의 클러스터를 등록해서 사용하게 될 것이다.
그러던 중, 폐쇄망 환경의 클러스터를 연결한 외부망 프록시 IP를 클러스터의 엔드포인트로 설정하였는데,
아래와 같은 에러 문제가 발생하였다.
kubectl get node
Unable to connect to the server: x509: certificate is valid for x.x.0.1, x.x.50.24, x.x.10.176, not 10.10.10.1
클러스터에 등록하려는 엔드포인트 IP가 10,10.10.1이라고 가정하였을때 해당 IP는 쿠버네티스 API Server 인증서에 SAN으로 등록이 되어 있지 않았기 때문이다.
API Server 인증서 SAN(Subject Alternative Name) 등록
# 기존 인증서에 등록된 ip 확인
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -text
509v3 Subject Alternative Name:
DNS:kubernetes, DNS:kubernetes.default, DNS:kubernetes.default.svc, DNS:kubernetes.default.svc.cluster.local, DNS:master1, IP Address:x.x.0.1, IP Address:x.x.50.24, IP Address:x.x.35.40, IP Address:x.x.0.176
# 업데이트를 위해 기존 인증서 이동
mv /etc/kubernetes/pki/apiserver.crt ~/backup
mv /etc/kubernetes/pki/apiserver.key ~/backup
# kubeadm init phase certs --apiserver-cert-extra-sans <IP>
kubeadm init phase certs --apiserver-cert-extra-sans 10.10.10.1
# 결과
I1020 09:08:17.331987 26958 version.go:256] remote version is much newer: v1.28.2; falling back to: stable-1.26
[certs] Generating "apiserver" certificate and key
[certs] apiserver serving cert is signed for DNS names [kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.clust
er.local master1] and IPs [x.x.x.x - x.x.x.x]
# 새로 업데이트한 인증서 확인(apiserver.key,apiserver.crt)
ls /etc/kubernetes/pki
# 안될때는 아래 컨피그맵 확인 필요
# kubectl -n kube-system edit cm kubeadm-config
apiVersion: v1
data:
ClusterConfiguration: |
apiServer:
extraArgs:
authorization-mode: Node,RBAC
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controlPlaneEndpoint: x.x.0.17:16443
controllerManager: {}
dns: {}
etcd:
local:
dataDir: /var/lib/etcd
imageRepository: registry.k8s.io
kind: ClusterConfiguration
kubernetesVersion: v1.26.0
networking:
dnsDomain: cluster.local
podSubnet: x.x.0.0/24
serviceSubnet: x.x.0.0/12
scheduler: {}
kind: ConfigMap
metadata:
creationTimestamp: "2023-06-05T08:06:59Z"
name: kubeadm-config
namespace: kube-system
resourceVersion: "201"
uid: 487ab7b1-d925-4080-935a-b638513847d4
'Kubernetes > Security' 카테고리의 다른 글
쿠버네티스 - dig 명령어로 CoreDNS Service Discovery 확인 (0) | 2023.10.24 |
---|