콘텐츠로 이동

[Kubernetes] Rancher 환경에서 Connection was refused 해결하는 방법

서론

여태 잘 사용하던 kubectl이 갑자기 에러가 나면서 사용이 안된다.

The connection to the server IP:Port was refused - did you specify the right host or port?

방법 검색

구글링을 해본 결과 수십개의 답변이 대체로 다 똑같았다.

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

이렇게 하라고 했지만 애당초 /etc/kubernetes/admin.conf 파일이 존재하지 않는다.
이 방법은 kubeadmin으로 구축한 Cluster에 접근할 때 에러 발생 시 사용한다.

문제 확인

시스템 구성이 Rancher로 Kubernetes를 관리하고 있었고
Docker로 살펴보니 Rancher가 계속해서 재시작되고 있었다.
해당 Container 로그를 확인해본 걸과 Rancher의 인증서가 만료된 것이 문제였다.

Github Issue를 확인해보니 비슷한 사람들이 많았다.

우션 낮은 버전의 Rancher는 인증서 문제가 많다.
서버 시계를 인증서 만료시간 이전으로 돌려서 작업도 해보고
인증서도 넣어보고 새로 생성도 시켜보고
현 상황에서 할 수 있는 것은 다 해봤으나 해결할 수 없었다.

Certification Expired

Rancher v2.3.x 이전 버전 사용 시 1년 후 인증서 만료로 사용할 수 없음

해결 방법

결국 지금 사용하고 있는 Rancher의 버전이 낮아 인증서 자동 갱신이 되지 않으니 업그레이드가 답이다.
그런데 막상 새로 설치하자니 복잡한 설정을 다시하기가 장난이 아니었다.
역시나 구글링의 도움을 받아 방법을 찾았다.

Upgrading Rancher Installed with Docker

  1. 기존 Rancher Container 작동 중지
    docker stop <RANCHER_CONTAINER_NAME>
    
  2. 기존 Rancher server Container 데이터를 복사
    docker create --volumes-from <RANCHER_CONTAINER_NAME> --name rancher-data rancher/rancher:<RANCHER_CONTAINER_TAG>
    
  3. 최신 Docker Image를 Pull
    docker pull rancher/rancher:<RANCHER_VERSION_TAG>
    
  4. Rancher 구동 시 volumes-from으로 복사한 데이터와 연결하여 실행
    docker run -d --volumes-from rancher-data --restart=unless-stopped -p 80:80 -p 443:443 --privileged rancher/rancher:<RANCHER_VERSION_TAG>
    

중간에 데이터를 복사하고 tar ball로 백업하는 과정이 있었는데 이미 이전에 사용하던 Volume 저장소를 따로 복사해놔서 스킵했다.

업그레이드 후

새로워진 웹 GUI를 구경하면서 이전에 설정한 Cluster의 Update가 끝나길 기다렸는데 또 에러 발생.
테스트하겠다고 이전에 7443로 설정했던 포트를 8443으로 했더니 생긴 에러였다.
포트도 꼭 맞춰 줘야한다.
이제 kubectl도 정상적으로 작동을 잘 한다.
전에 쓰던 Rancher Image를 깔끔하게 삭제했다.

결론

Rancher로 kubernetes 관리 시 kubectl에서 Connection was refused 에러가 발생하면

Upgrading Rancher Installed with Docker 참고하여 최신버전으로 업그레이드해라.

짜릿해.
늘 새로워.
최신 버전이 최고야.

끝.


마지막 업데이트: 2022-05-13

댓글