kubeadm init 시, --control-plane-endpoint를 설정하지 못한 경우, public ip로 노출하기 힘들다.

이를 위해 별도의 처리를 진행한다.

Apiserver 설정

/etc/kubernetes/manifests/kube-apiserver.yaml

--advertise-address=<PUBLIC_IP>

+) 상단에 보이는 제일 긴 영역도 수정한다.

kubeadm.kubernetes.io/kube-apiserver.advertise-address.endpoint: "<PUBLIC_IP>:6443"

인증서 처리

인증서 작성을 위한 yaml 작성

/etc/kubernetes/cluster-config.yaml

apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
kubernetesVersion: stable
controlPlaneEndpoint: "203.253.76.163:6443"
apiServer:
        certSANs:
                - "203.253.76.163"
                - "10.96.0.1"
                - "192.168.1.4"

기존 인증서 백업 및 삭제

sudo cp -r /etc/kubernetes/pki /etc/kubernetes/pki.bak
sudo find /etc/kubernetes/pki -type f -not -name 'ca.crt' -not -name 'ca.key' -delete
sudo find /etc/kubernetes/pki/etcd -type f -not -name 'ca.crt' -not -name 'ca.key' -delete

인증서 재생성 & kubeconfig 파일 재생성

sudo kubeadm init phase certs all --config /etc/kubernetes/cluster-config.yaml
sudo kubeadm init phase kubeconfig all --config /etc/kubernetes/cluster-config.yaml

apiserver 재시작

sudo systemctl restart kubelet

설정 확인 및 적용

kubectl get nodes
kubectl edit cm kube-proxy -n kube-system