1. 이슈
- RKE2 클러스터 연결시 워커 노드에서 NotReady 이슈.
- 워커 노드 RKE2-Canal 파드 CrashLoopBackOff 이슈. (install-cni 컨테이너)
- 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 에서 접근하기 위해서는 반드시 설정을 해줘야 한다. 상단의 그림의 설명은 다음과 같다.
- Worker Node 는 config 설정에 의해 Master Node 의 Server IP 와 Token 을 통해 접근하여 API 서버와 첫번째 연결을 성공적으로 수행한다.
- 마스터 노드가 advertise-address 로 Internal IP 를 광고한다.
- 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
'Error' 카테고리의 다른 글
[Error] JSTL 설정 오류 (0) | 2024.05.13 |
---|