cert SANS 내용에서 127.0.0.1 을 빠뜨렸다. kubeadm init 할 때 만들어지는 인증서다.
kubernetes api를 ssh 터널링을 통해 사용하고 있어서 127.0.0.1이 필요하다.
kubeadm 명령어는 kubeadm 진행 중간 과정만 다시 재현할 수 있다고 한다.
mkdir -p /etc/kubernetes/pki/back
mv /etc/kubernetes/pki/apiserver.* /etc/kubernetes/pki/back/
ADD_IP="127.0.0.1"
kubeadm init phase certs all --apiserver-advertise-address=0.0.0.0 --apiserver-cert-extra-sans=${ADD_IP}
docker rm -f `docker ps -q -f 'name=k8s_kube-apiserver*'`
systemctl restart kubelet
아래와 같이 실행하면 되는데,
실행 전에 꼭 /etc/kubernetes/pki/apiserver.* 파일들을 백업 및 이동해야 한다.
ls -al /etc/kubernetes/pki/
mv /etc/kubernetes/pki/apiserver.* ./
ADD_IP="127.0.0.1"
kubeadm init phase certs apiserver --apiserver-cert-extra-sans ${ADD_IP}
만약 NIC가 여러개라서 아래와 같은 에러가 나면,
[root@localhost yaml]# kubeadm init phase certs apiserver --config kubeadm-conf.yaml
W0111 02:54:34.449187 26018 common.go:148] WARNING: could not obtain a bind address for the API Server: no default routes found in "/proc/net/route" or "/proc/net/ipv6_route"; using: 0.0.0.0
W0111 02:54:34.657445 26018 configset.go:348] WARNING: kubeadm cannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io]
cannot use "0.0.0.0" as the bind address for the API Server
IP를 지정해준다
kubeadm --v=5 init phase certs apiserver --apiserver-cert-extra-sans "127.0.0.1" --apiserver-advertise-address=100.100.100.210
다시 /etc/kubernetes/pki/ 위치를 확인해보면 인증서가 생성되어 있다.
아래 명령어로 넣으려던 IP가 추가되었는지 확인하자.
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -text
확실하게 apiserver와 kubelet 을 재시작한다.
docker rm `docker ps -q -f 'name=k8s_kube-apiserver*'`
systemctl restart kubelet
https://stackoverflow.com/questions/46360361/invalid-x509-certificate-for-kubernetes-master