Flannel이란? (feat. 쿠버네티스, Kubernetes, K8s)

2025. 12. 7. 15:51·Infra/DevOps

아래 글은 내가 홈서버에 쿠버네티스를 구축하면서 찾아보고 공부한 내용이다

오늘 내용을 두줄로 요약하면 아래와 같다


두줄 요약

1) Flannel은 쿱네에서 pod간에 통신을 가능하게 만드는 네트워크 담당자이자 CNI

2) pod에게 IP를 주고, ,노드간 VXLAN 터널을 만들어주는 역할


1. 사전 지식

- 아래 내용을 알고 있으면 이해하기 한결 쉽다


CNI란?

- Container Network Interface

- 컨테이너가 네트워크에 붙을 수 있도록 표준화된 규칙/플러그인 시스템

- 컨테이너(pod)에 IP를 주고, 통신 규칙을 만들고, pod/Node 간 네트워크를 구성하는 표준 인터페이스


NIC란?

- Network Interface Card

- 컴퓨터가 외부 네트워크와 데이터를 주고받게 해주는 '네트워크 어댑터'

- 유선 LAN 포트, wifi 수신기 이런거임


VXLAN이란?

- 쉽게 말하면 서버가 서로 전혀 다른 네트워크에 있어도, 같은 스위치 안에 있는 것처럼 속여주는 기술

- 물리 네트워크 위에 가상의 Layer2 네트워크를 만드는 기술 

- Pod 패킷을 UDP로 캡슐화해서 다른 노드로 보냄

- 포트는 8472 사용 (Flannel 기본)


2. Flannel이 무엇인가?

출처 : https://github.com/flannel-io/flannel?tab=readme-ov-file

- Flannel은 K8s의 네트워크를 만들어주는 CNI 플러그인이다 (Network Overlay)

- NIC가 노드(서버)마다 달라도 알아서 식별하고 잡아줌

- 가끔 하드 코딩으로 NIC 명을 기록해둘 때가 있는데 이건 노드(서버)의 NIC가 여러 개 일 때 지정해두고자 그렇게 함

(e.g. 꽂혀있는 랜선이 2개 이상일 경우)

 

- 근데 그럴 의도가 아니었는데 하드코딩 해뒀다면 주의해야 함

- 서버마다 NIC가 다른데 이걸 하드코딩으로 적어두면 없는 NIC 찾는다고 에러 뜰 수 있음

https://ratatou2.tistory.com/308#9.%20Flannel%20설정에%20CNI%20이름%20하드코딩%20하면%20안됨-1-9

 

쿠버네티스(Kubernetes, K8s) 구축 과정에 마주한 에러들

내가 마주한 에러들진짜 쿠버네티스 분산 처리보다 어려웠다정확히는 챙겨야하는게 많았고 에러도 많았다양이 방대해서 개념 정리도 필요했음1. kube-apiserver / etcd 강제 종료 & 무한 재시작- 6443

ratatou2.tistory.com

- K8s는 pod간 통신은 모두 가능해야한다는 규칙이 있음

- Pod는 서로 직접 IP로 통신해야 함

- Pod IP는 NAT 없이 그대로 보임

- 다른 노드(서버)에 있는 Pod와도 네트워크 적으로 완전 동등해야 함

- 여기서 문제가 발생!!

- 물리적으로 분리되어있는 리눅스 호스트끼리는 서로 다른 네트워크이다 (그야 당연히 각자 다른 PC니까)

- 근데 사실 pod 생성할 때마다 새로운 IP를 부여해야 함 (그래야 해당 pod에 접근이 가능할테니까)

- 근데 이걸 사람이 어떻게 매번 생성하고 규칙 추가하고... 귀찮고 헷갈려서 못하지

- 이것을 편리하게 하기 위한 것이 바로 CNI인것!!

- 그리고 CNI들 중에서도 단순하고 널리 쓰이는게 Flannel임!!


3. 그럼 Flannel의 실질적인 역할은?


1. pod 네트워크를 만든다

- Overlay Network, 네트워크 위에 덧씌우는 가상의 네트워크 / pod끼리의 통신용도

- 각 노드에 고유한 Pod 대역을 준다 

- 서버마다 구분할 수 있게 대역을 떼준다는 의미

- e.g. 

노드 (= 서버) IP 대역
A노드 10.244.'0'.0/24
B노드 10.244.'1'.0/24
C노드 10.244.'2'.0/24

- 이 덕분에 pod는 서로 다이렉트로 통신이 가능해진다


2. 서로 다른 노드의 pod 통신을 가능하게 하는 VXLAN 터널링

물리적으로 분리 되어있는 pod끼리 통신 가능하게 해줌

- 노드끼리 서로 다른 서버라서 네트워크도 물리적으로 떨어져있음

- 그래서 원래는 노드1의 pod_a랑 노드2의 pod_b는 통신할 수 없음

- 이를 해결하기 위해 Flannel은 VXLAN 터널을 노드간에 생성해줌

- 이 덕분에 서로 다른 노드에 소속된 pod 끼리도 마치 같은 네트워크안(하나의 서버 안)에 있는 것처럼 통신할 수 있음


3. pod에게 IP를 부여 (Subnet Manager)

- Flannel은 pod가 생성될 때 아래 세가지를 확인하고 정한다

1. 어느 노드에 필요한 IP 대역에 있는지
2. 남은 대역은 얼마인지 (생성할 수 있는 IP 갯수는 제한이 있으니까)
3. 새 pod에게 어떤 IP를 배정할지 

- 위 세 가지를 하는 것을 Subnet Manager라고 부름!


4. 노드간 라우팅 정보를 etcd or kube-apiserver에 저장

- 걍 쉽게 말해서 서버간의 네트워크를 저장해둔다는 것

- 저장하는 정보는 아래 세가지

1) 각 노드의 pod CIDR
2) VXLAN의 turnnel 정보
3) pod routing table

5. iptables or neftables 규칙을 자동 생성

- pod끼리 통신에 필요한 규칙을 자동으로 세팅해준다


4. 정리하면

- Flannel이 없으면, 사실상 K8s는 동작 불가 (정확히는 CNI가 없으면 K8s는 동작 불가이다, Flannel은 CNI 중 하나)

- K8s는 '컨테이너 오케스트레이션'을 하는 것이지 통신 담당이 아니기 때문

- 비유하자면 Flannel은 K8s의 통신담당관이다


번외

또 다른 CNI들?

이름 장점
Flannel 가장 단순, 안정적, 설치 쉬움 (홈서버에 추천되는 이유)
Calico 네트워크 정책/보안 정책 지원
Cilium eBPF 기반, 고성능, 차세대 CNI
WeaveNet 설치 쉬움, 소규모 환경에서 인기

 

 

 

반응형

'Infra > DevOps' 카테고리의 다른 글

맥북에서 VPN 사용 시 주의할 점 (feat. WireGuard)  (0) 2025.12.12
iptable-nft 환경에서 VPN 서버 구축하기 (feat. WireGuard)  (0) 2025.12.12
쿠버네티스(Kubernetes, K8s) 실험과 배운 것들에 대한 회고록  (0) 2025.12.06
쿠버네티스(Kubernetes, K8s) 구축 과정에 마주한 에러들  (0) 2025.12.03
홈서버 4대로 쿠버네티스(Kubernetes, K8s) 구축하기  (0) 2025.12.01
'Infra/DevOps' 카테고리의 다른 글
  • 맥북에서 VPN 사용 시 주의할 점 (feat. WireGuard)
  • iptable-nft 환경에서 VPN 서버 구축하기 (feat. WireGuard)
  • 쿠버네티스(Kubernetes, K8s) 실험과 배운 것들에 대한 회고록
  • 쿠버네티스(Kubernetes, K8s) 구축 과정에 마주한 에러들
Ratatou2
Ratatou2
온갖 정보들을 기록해두는 메모보드 블로그
  • Ratatou2
    nak-z
    · Ratatou2 ·
  • 전체
    오늘
    어제
  • 공지사항

    • 블로그 이전 진행 중 (24.11.25 ~)
    • 분류 전체보기 (303) N
      • OS (89) N
        • Linux (39)
        • Window (24)
        • Mac (21) N
        • Android (5)
      • Infra (83) N
        • DevOps (38) N
        • Docker (14)
        • Jenkins (9)
        • n8n (13)
        • Nextcloud (8)
        • Rasberry Pi (1)
      • Dev (17)
        • JAVA (7)
        • Python (1)
        • DB (3)
        • Vue (2)
        • AI (4)
        • Git (0)
      • Tools (10)
      • Study (69)
        • Algorithm (66)
        • CS (3)
      • Game (10)
        • Project Zomboid (9)
        • Don't Starve Together (1)
      • etc (24)
        • Temp (0)
      • 개발 외 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
Ratatou2
Flannel이란? (feat. 쿠버네티스, Kubernetes, K8s)
상단으로

티스토리툴바