한눈에 요약
- 파드끼리 서로 통신할 수 있게 클러스터 위에 3계층 네트워크를 깔아 주는 가벼운 CNI 플러그인이다. CNI는 쿠버네티스가 네트워크 구현을 갈아 끼우도록 비워 둔 규격을 말한다.
- K3s의 기본 CNI로 탑재돼 있어 이 위키에 등장한다.
- 백엔드를 무엇으로 고르느냐에 따라 열어야 할 포트와 암호화 여부가 달라진다.
백엔드 네 가지
Flannel 옵션은 서버 노드에서만 설정할 수 있고 클러스터의 모든 서버에서 값이 같아야 한다 32.
| 백엔드 | 방식 | 알아 둘 점 |
|---|---|---|
vxlan (기본) |
패킷을 캡슐화해 전달 | UDP 8472 필요. 라즈베리 파이에서는 커널 모듈 준비가 더 필요할 수 있다 |
host-gw |
노드 IP를 경유하는 IP 라우팅 | 모든 노드가 같은 2계층에 있어야 한다 |
wireguard-native |
캡슐화 + 암호화 | UDP 51820(IPv6는 51821). 노드마다 WireGuard 커널 모듈 필요 |
none |
Flannel을 끈다 | 다른 CNI를 직접 설치할 때 |
직접 고른 CNI를 쓸 때는 --flannel-backend=none과 함께 --disable-network-policy도 주는 편이 낫다. 대부분의 CNI가 자체 네트워크 정책 엔진을 갖춰 충돌하기 때문이다 32.
VXLAN 포트를 외부에 열어 두면 안 된다. 클러스터 네트워크가 누구에게나 열리는 것과 같아서 방화벽 뒤에 두고 8472를 막으라고 문서가 경고한다 32.
보안상의 주의
Flannel은 브리지 CNI 플러그인에 기대어 트래픽을 스위칭하는 2계층 네트워크를 만든다. 이 구조에서는 NET_RAW 권한을 가진 악성 파드가 ARP 스푸핑 같은 공격을 시도할 수 있다. 신뢰할 수 없는 파드에는 NET_RAW를 막는 제한 프로필을 걸라고 문서는 권고한다 32.