티스토리 뷰

vm에 nat, nat network, host only 등의 네트워크 어댑터를 이용하여 네트워크 설정을 하고 master node를 셋팅하면 master node의 internal ip가 private ip로 나올 것이다.

 

이 경우에는 kubeadm join을 했을 때 certificate is valid for 10.96.0.1, 10.0.2.15, not <공인ip> 라는 에러가 나올 것이다.

(물론 이전에 master node의 apiserver가 그 공인ip에서 포워딩되도록  했다는 전제이다.)

왜냐하면 master node의 kubeadm init을 내부ip로 했기 때문이다.

 

해결방법은 certification이  worker node에서 추가하려는 master node의 공인 ip에 valid되게 만드는 것이다. 

 

kube-apiserver의 certificate에 새롭게 public ip를 추가하기

 

kubeadm configuration부분 백업하고 수정하기

새로 kubeadm init을 하기에는 이미 init을 해버렸기 때문에  configuration파일을 변경하는 방법을 택하는 것이 좋다.

Kubeadm 관련 config를 보려면

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

여기서 Configuration부분만 yaml파일로 저장한다

kubectl get configmap kubeadm-config -n kube-system -o jsonpath='{.data.ClusterConfiguration}' > kubeadm-conf.yaml

그리고 kubeadm-conf.yaml파일을 다음과 같이 수정하고 저장한다

apiServer:
  certSANs:   #추가
  - <공인ip>  #추가
  extraArgs:
    authorization-mode: Node,RBAC
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes

 

 

인증서 지우고 새로 발급받기

/etc/kubernetes/pki에있던 apiserver.crt 그리고 apiserver.key 인증서를 다른 폴더에 옮겨 놓는다.

mv apiserver.crt /temp
mv apiserver.key /temp

 

그리고 새로운 apiserver인증서를 발급받는다.

이때 아까 저장한 kubeadm-conf.yaml을 입력받아 cert와 key를 재생성한다.

sudo kubeadm init phase certs apiserver --config kubeadm-conf.yaml

그럼 새로운  apiserver.crtapiserver.key 가 생긴것을 알 수 있다.

그리고나서

openssl x509 -in /etc/kubernetes/pki/apiserver.crt -text

을 보면 방금 추가한 공인 ip까지 SAN으로 등록되어 있는 것을 확인할 수 있다.

 

 

cluster-info 정보변경

방금까지한 후 다시 worker node로 등록하려는 서버에서 kubeadm join을 하면 

Get "https://<Private IP주소>/api/v1/namespaces/kube-system/configmaps/kubeadm-config?timeout=10s": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
failed to get config map

라고 뜨면서 kubeadm-config에 연결할 수 없다고 timeout뜰 것이다.

그렇기 때문에 저 <Private IP주소>를 아까 추가한 <Public IP>로 변경해주기 위해서 cluster-info를 수정해야 한ㄷ.

#cluster-info 의 configuration 확인
kube e get cm cluster-info -oyaml -n kube-public

#cluster-info 의 configuration 수정
kubectl edit cm cluster-info -oyaml -n kube-public

여기에 들어가서

 server: <Public IP>   #ip주소 변경
      name: ""
    contexts: null
    current-context: ""

 

변경하고 저장하고 나온다

 

Worker Node의 clusterip 수정

worker node에서 kubectl 명령어를 사용하려면

$HOME/.kube/config

에서 ip가 아까 설정한 공인ip로 되어 있어야 한다.

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함