Networking

Flannel

CNI Kubernetes minimaliste (flannel-io, Apache 2.0). Overlay VXLAN par défaut, host-gw pour routage direct sans encapsulation. Aucune NetworkPolicy native. CNI par défaut de k3s.

Flannel est un plugin CNI Kubernetes minimaliste qui se concentre sur une seule responsabilité : fournir un réseau overlay pour les pods. Il ne gère pas les NetworkPolicies, le load balancing des Services, ni le BGP. C'est sa force : simple à déployer, peu de ressources, zéro configuration complexe.

Flannel a été créé par CoreOS. Il est maintenant maintenu par la communauté sous l'organisation flannel-io. C'est le CNI par défaut de k3s.

Important : Flannel ne supporte pas les NetworkPolicies. Pour les NetworkPolicies avec Flannel, il faut utiliser Canal (Flannel + Calico) ou remplacer Flannel par un CNI qui les supporte.

Idéal pour : clusters simples et petits environnements, labs, CNI par défaut de k3s, situations où les NetworkPolicies ne sont pas requises.


Informations essentielles

Origine : CoreOS → communauté (flannel-io)  ·  Licence : Apache 2.0  ·  Architectures : x86_64, ARM64, ARM, s390x

Liens : GitHub  ·  Releases

Support : Maintenu par la communauté flannel-io. Releases régulières.

Backends réseau

BackendMécanismePerformancePrérequis
vxlan (défaut)Overlay UDP encapsulé (VXLAN)BonneAucun
host-gwRoutage direct L3, pas d'encapsulationMeilleureNœuds sur même sous-réseau L2
wireguardOverlay chiffré (WireGuard)BonneKernel 5.6+
udpOverlay UDP userspace (legacy)MauvaiseAucun (déprécié)

Le backend host-gw est le plus performant car il n'encapsule pas les paquets. Il exige que tous les nœuds soient sur le même réseau L2 (pas de routeurs entre eux).


Installation

Via manifeste officiel

# Installation standard (VXLAN par défaut)
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

# Vérifier
kubectl -n kube-flannel get pods

Le CIDR par défaut dans le manifeste est 10.244.0.0/16. Il doit correspondre au --pod-network-cidr passé à kubeadm init.

Avec kubeadm

# Initialiser le cluster avec le bon CIDR
sudo kubeadm init --pod-network-cidr=10.244.0.0/16

# Puis installer Flannel
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

Configuration

Le ConfigMap kube-flannel-cfg dans le namespace kube-flannel contient la configuration réseau.

# Voir la configuration active
kubectl -n kube-flannel get configmap kube-flannel-cfg -o yaml

Changer le backend (host-gw)

{
  "Network": "10.244.0.0/16",
  "Backend": {
    "Type": "host-gw"
  }
}
# Modifier le ConfigMap
kubectl -n kube-flannel edit configmap kube-flannel-cfg

# Redémarrer les pods flannel pour appliquer
kubectl -n kube-flannel rollout restart ds/kube-flannel-ds

Backend WireGuard (trafic chiffré)

{
  "Network": "10.244.0.0/16",
  "Backend": {
    "Type": "wireguard"
  }
}

Flannel dans k3s

k3s utilise Flannel comme CNI par défaut avec le backend VXLAN.

# k3s avec Flannel VXLAN (défaut)
curl -sfL https://get.k3s.io | sh -

# k3s avec backend WireGuard
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--flannel-backend=wireguard-native" sh -

# k3s sans CNI (pour installer autre chose)
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--flannel-backend=none --disable-network-policy" sh -

Mise à jour

# Mettre à jour le manifeste
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

# Vérifier la version déployée
kubectl -n kube-flannel get ds kube-flannel-ds -o jsonpath='{.spec.template.spec.containers[0].image}'

Troubleshooting

Pods en état Pending (réseau non disponible)

# Vérifier que Flannel est Running sur tous les nœuds
kubectl -n kube-flannel get pods -o wide

# Logs Flannel
kubectl -n kube-flannel logs ds/kube-flannel-ds

# Vérifier que le CIDR kubeadm correspond à la config Flannel
kubectl cluster-info dump | grep -m 1 cluster-cidr
kubectl -n kube-flannel get configmap kube-flannel-cfg -o jsonpath='{.data.net-conf\.json}'

Connectivité inter-nœuds KO

# Vérifier les interfaces flannel sur le nœud
ip link show flannel.1
ip route | grep flannel

# Backend host-gw : vérifier les routes
ip route | grep 10.244

Commandes utiles

# État des pods Flannel
kubectl -n kube-flannel get pods -o wide

# Logs
kubectl -n kube-flannel logs ds/kube-flannel-ds

# Configuration réseau active
kubectl -n kube-flannel get configmap kube-flannel-cfg -o jsonpath='{.data.net-conf\.json}'

# Interfaces réseau sur un nœud
ip link show flannel.1
ip route | grep flannel

Ressources

Newsletter · 2 000+ abonnés

Reste au courant de ce qui bouge en prod

RudeOps veille devops hebdo, droit au but.

Gratuit · Sans spam · Désinscription en un clic