공부하기싫어
article thumbnail
Published 2024. 3. 10. 22:07
K3S - Flannel VXLAN Kubernetes/Lightweight

k3s cluster 를 사용하여 현재 가상화폐 자동매매 워크로드를 실행중이다.
dashboard 나 모니터링 툴 등을 추가하기 위해 워커노드 추가가 필수적인데, 테스트 시 워커노드에서는 test-pod 가 실행되지 않는 문제가 발생했다.

신기하게 master node 에서 pod 를 실행시킬 땐 slack message 를 잘 받아오지만, worker node 에서 pod 를 실행하면 slack message 조차 오지 않았다.

 

pod describe 와 log 에서 찾았던 aws ssm 에 대한 url 응답을 받아오지 못해서 계속 실패가 났던 로그를 확인하여 자격증명에 대해 뭔가 설정이 잘못되었나 싶어서 한참 헛고생을 했는데...

 

https://chat.openai.com/g/g-tXRU6PcBN-devops-gpt

 

ChatGPT - DevOps GPT

AI coding expert for all cloud operation needs. Responds concisely with cost efficient and secure practices.

chat.openai.com

위 GPTs 를 활용하여 trouble shooting 에 성공했다.

현재 test 상황을 pdf 로 정리하여 첨부하고 차례차례 문제를 점검해 나갔다.

문제의 원인을 파악하던 중, worker node 에서 실행한 pod 는 외부와 통신이 되지 않는 것을 확인했다.

 

Trouble Shooting Result

VXLAN

이거 때문이였다.

아마 내부 통신을 위한 UDP 포트인데 이걸 보안그룹에서 개방을 안해줘서, 워커노드에서 실행된 POD가 외부와 통신이 안되어서 계속 실패가 났던것 같다. 이게 master node 에서 실행했을땐 성공하고, worker node 에서 pod를 실행했을 때 실패한 이유인 것 같다.

VXLAN

VXLAN, 또는 Virtual Extensible LAN,은 기존 네트워크의 한계를 극복할 수 있는 네트워크 가상화 기술입니다. 이 기술은 서로 다른 노드의 컨테이너가 효율적으로 통신해야 하는 Kubernetes와 같은 환경에서 특히 유용합니다.

 

리눅스 커널 버전 3.7부터 VXLAN 지원이 통합되기 시작하여 3.12 버전에서 더욱 강화되었습니다. VXLAN은 레이어 2 이더넷 프레임을 레이어 4 UDP 패킷으로 캡슐화합니다. 이 캡슐화를 통해 서로 다른 물리적 네트워크나 환경을 가로질러 가상 오버레이 네트워크를 만들 수 있으며, 이는 Kubernetes 클러스터의 컨테이너 네트워킹에 이상적입니다.

 

VXLAN - K3S cluster

Kubernetes(k3s) 클러스터 내 Flannel에서 VXLAN은 중요한 역할을 합니다. Flannel은 Kubernetes를 위해 디자인된 간단하고 사용하기 쉬운 컨테이너 네트워킹 솔루션으로, 클러스터의 각 노드에 서브넷을 할당하는 역할을 합니다. Flannel이 VXLAN 모드를 사용할 때, 다른 노드의 팟 간 통신을 위한 오버레이 네트워크를 생성합니다.

 

동일한 노드 내에서 컨테이너는 브리지 인터페이스(예: cni0)를 통해 연결되며, VXLAN 캡슐화는 필요하지 않습니다. 그러나 노드 간 통신의 경우, 프로세스에는 더 많은 단계가 포함됩니다. 한 노드의 팟이 다른 노드의 팟과 통신하려고 할 때, 트래픽은 VXLAN 터널 종단점(VTEP)으로 전달되며, 여기에서 원본 패킷이 VXLAN 패킷으로 캡슐화되어 목적지 노드로 전송됩니다. 수신 측에서는 프로세스가 반전되며, 패킷이 복캡슐화되고 원본 패킷이 목적지 팟으로 전달됩니다.

 

VXLAN - Flannel

Flannel의 VXLAN 역할은 노드 간 팟 통신을 보장하고 일관되고 통합된 네트워크 공간을 유지하는 것입니다. 이 메커니즘은 Kubernetes의 동적 컨테이너 워크로드에 필수적인 확장 가능하고 유연한 네트워킹을 허용합니다.

AWS 보안 그룹 규칙에 대한 VXLAN의 경우, VXLAN이 캡슐화된 트래픽을 위해 사용하는 기본 포트인 UDP 포트 8472를 열어야 합니다. 이 포트를 열지 않으면, 캡슐화된 패킷이 노드 간에 흐를 수 없어, 노드 간 팟 통신이 방해받을 수 있습니다.

 

 

 

 

 

k8s 는 TCP 포트만 고려했었지만, k3s 는 추가로 VXLAN 을 사용하는 UDP 8472를 꼭 열어줘야 마스터-워커간 통신이 가능하다는 것을 처음 알았다...

공식 문서에서 Important 로 강조해 놓은 내용도 참고해서 inbound rule 을 aws private cidr 로만 한정해서 추가해줬다.

'Kubernetes > Lightweight' 카테고리의 다른 글

k3s  (0) 2023.06.05
minikube 설치 (VM-linux)  (0) 2023.05.31
minikube 설치 (linux-ubuntu)  (0) 2023.05.31
minikube 설치 (window)  (0) 2023.05.02