Kubernetes/Study
[K8s] 쿠버네티스에서 pod들이 서로 다른 가상 L2에 있는데 통신 되는 이유? (오버레이 네트워크)
lumination
2025. 6. 19. 21:06
오버레이 네트워크 설명 : Calico(vxlan 모드), GRE 등
✅ 요약부터 말하면:
쿠버네티스에서 Pod들은 서로 다른 가상 L2에 있지만, CNI가 L3 터널링(예: VXLAN)으로 감싸서 전송하니까 통신이 가능한 거예요.
🧠 구조적으로 보면:
1. 각 노드(Pod들이 띄워진 서버)는 자기만의 가상 L2 네트워크를 갖습니다.
- 예: docker0, cni0, flannel.1, calico0 같은 가상 브릿지
- 이건 물리 네트워크와 분리된 내부 네트워크(L2)예요
- 각 노드는 자기 Pod에게만 직접 L2 통신이 가능
2. 다른 노드의 Pod과 통신할 때는 CNI가 L3 터널링을 사용해서 “가짜로 L2처럼” 연결시킵니다.
예를 들어:
- Pod A (노드 1, 가상 L2-1)
- Pod B (노드 2, 가상 L2-2)
→ 실제로는 서로 다른 L2이기 때문에 MAC 기반 통신이 불가능
→ 하지만 CNI 플러그인(VXLAN, GRE 등)이 Packet을 캡슐화해서 L3 위로 보내버림
3. 이렇게 감싸서 보내니까 → 네트워크 입장에서 보면 **"L3 통신처럼 보이지만 내부적으로는 L2처럼 동작"**함
VXLAN 기준 예시:
[Pod A가 보내는 이더넷 프레임]
→ CNI가 VXLAN 헤더 + UDP 헤더 + IP 헤더로 감쌈
→ 물리 네트워크(L3)를 통해 전달
→ 노드 2에서 디캡슐화
→ Pod B가 이더넷 프레임을 받은 것처럼 처리
🎯 핵심 비유
- 각 노드는 자기만의 “가상 방”(가상 L2)을 가지고 있음
- 서로 다른 방에 있는 사람끼리는 말을 못함 → 문서를 봉투에 담아 L3 우편으로 보냄
- 받은 쪽은 봉투를 뜯고 내용을 꺼냄 → L2처럼 통신이 된 것처럼 처리
✅ 그래서 결론은:
쿠버네티스에서 Pod 간 통신이 되는 건 진짜 L2가 연결돼 있어서가 아니라,
CNI가 내부적으로 L2 패킷을 L3로 감싸서 보내주는 터널링 덕분이에요.