Error

RKE2 클러스터 연결 이슈 (CrashLoopBackOff)

코린이 공대생 2024. 12. 10. 22:05

1. 이슈

  1. RKE2 클러스터 연결시 워커 노드에서 NotReady 이슈.
  2. 워커 노드 RKE2-Canal 파드 CrashLoopBackOff 이슈. (install-cni 컨테이너)
  3. RKE2-Server 와 RKE2-Agent 간 내부 통신 이슈.

 

2. 구성 환경

마스터 노드를 담당하고 있는 VM은 Oracle Cloud 에 올라가있고 워커 노드를 담당하고 있는 VM 은 GCP 에 올라가 있는 상태이다.

따라서 각 노드는 다른 네트워크 대역에 있으며 공인IP 도 다른 상황이다. 따라서 RKE2 에서 제공하는 가이드에 의한 config 설정은 server 의 주소인 공인IP 로 설정하였다. 또한 인증서 발급은 정상적으로 이루어진 상황이었다.

 

3. 원인

 

RKE2-Agent 가 API-Server 와 연결하지 못하는 문제가 발생 → RKE2-Agent 가 컨트롤 플레인의 Internal-IP 를 기준으로 연결을 시도하고 있었다. 즉, RKE2-Agent 가 config 에 설정된 server 의 공인 IP 주소로 접근하여 처음 연결에는 성공하였지만 API 서버가 내부 IP에 접속을 허락하지 않았기 때문에 네트워크 연결에 실패하게 되었다.

 

4. 해결

 

공식 문서를 참조하여, Master Node 의 config 설정에 advertise-address: <Master Node Internal IP> 만 추가해주면 된다.

 

4.1 advertise-address

기본적으로 Master Node 는 자신의 내부 IP를 다른 노드에 광고(advertise) 한다. 즉, 외부 IP 에서 접근하기 위해서는 반드시 설정을 해줘야 한다. 상단의 그림의 설명은 다음과 같다.

  1. Worker Node 는 config 설정에 의해 Master Node 의 Server IP 와 Token 을 통해 접근하여 API 서버와 첫번째 연결을 성공적으로 수행한다.
  2. 마스터 노드가 advertise-address 로 Internal IP 를 광고한다.
  3. Worker Node 는 이후에 모든 통신에서 Internal IP 를 사용하기 때문에 통신이 정상적으로 유지된다.

 

4.2 설정 방법

RKE2-Server 는 config 파일을 따로 만들지 않았었기 때문에 디렉토리와 함께 config 파일을 생성한뒤 코드 한줄만 작성하면 된다.

$ mkdir -p /etc/rancher/rke2/
$ vim /etc/ranchet/rke2/config.yaml

#config.yaml
advertise-adress: <MASTER_NODE_INTERNAL_IP>

 

4.3 성공

다음과 같이 RKE2-Server 와 RKE2-Agent 가 성공적으로 연결 된 것을 확인할 수 있다.

 

5. 생각하지 못한 이유

 

개인적으로 연습하기 위해 각기 다른 VM 을 설치하고 Master Node 와 Worker Node 를 설정했을 때에는 당연히 같은 네트워크에 존재하였기 때문에 외부IP를 생각하지 않아도 됬었다. 따라서 자연스럽게 내부IP 주소로 통신이 되었다.

 

더보기
더보기

꿀팁 : 두 명령어의 차이점을 보게 되면 하나는 간략하고 하나는 모든 정보를 보게 해준다.

$ kubectl get nodes -A
$ kubectl get nodes -o wide