Canal combine Flannel pour le networking des pods (overlay VXLAN) et Calico pour l'application des NetworkPolicies. L'idée est d'obtenir la simplicité de Flannel avec les NetworkPolicies robustes de Calico, en un seul déploiement.
Statut : déprécié upstream. Le dépôt
projectcalico/canaln'est plus maintenu et ne supporte pas Kubernetes 1.28+. Canal reste utilisé dans Rancher et RKE2 où Tigera et Rancher en maintiennent une version, mais pour les nouveaux déploiements hors Rancher, préférer Calico en mode VXLAN ou IP-in-IP qui offre le même résultat sans la complexité de Canal.
Idéal pour : clusters Rancher/RKE2 où Canal est le CNI par défaut, migration vers Calico standalone à planifier.
Informations essentielles
Origine : Tigera + CoreOS (projet combiné) · Licence : Apache 2.0 · Statut upstream : Déprécié
Liens : GitHub (archivé) · Installation Calico+Flannel (Tigera)
Versions Kubernetes supportées : jusqu'à K8s 1.27 pour le manifeste upstream. Rancher/RKE2 maintiennent leur propre version.
Comment ça fonctionne
| Composant | Rôle |
|---|---|
| Flannel | Réseau overlay VXLAN pour les pods (connectivité L3) |
| Calico Felix | Application des NetworkPolicies Kubernetes |
Canal n'utilise pas le BGP de Calico. Seul Felix (le composant de policy) est utilisé, pas BIRD (BGP daemon).
Installation (Rancher/RKE2)
Dans Rancher et RKE2, Canal est sélectionnable comme CNI à la création du cluster via l'interface web ou la configuration.
# RKE2 - /etc/rancher/rke2/config.yaml
cni: canal
# k3s (Canal n'est pas supporté nativement - utiliser Flannel + politique externe)
# Pour Canal sur k3s, installer manuellement via manifeste
Installation manuelle (K8s < 1.28)
# Manifeste Tigera pour Flannel + Calico NetworkPolicies
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.29.0/manifests/canal.yaml
# Vérifier
kubectl get pods -n kube-system -l k8s-app=canal
Utilisation des NetworkPolicies
Les NetworkPolicies Kubernetes standard sont applicables avec Canal.
# Interdire tout le trafic entrant par défaut
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-ingress
namespace: production
spec:
podSelector: {}
policyTypes:
- Ingress
---
# Autoriser uniquement le trafic depuis le frontend
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-frontend
namespace: production
spec:
podSelector:
matchLabels:
app: api
ingress:
- from:
- podSelector:
matchLabels:
app: frontend
ports:
- protocol: TCP
port: 8080
Migration vers Calico standalone (recommandé)
Pour les clusters hors Rancher/RKE2, la migration de Canal vers Calico complet est la voie recommandée.
# Calico avec VXLAN remplace Canal de manière fonctionnellement équivalente
# (même networking, même NetworkPolicies, plus de fonctionnalités)
# 1. Sauvegarder les NetworkPolicies existantes
kubectl get networkpolicy -A -o yaml > networkpolicies-backup.yaml
# 2. Remplacer Canal par Calico (via Tigera Operator)
# Attention : nécessite une fenêtre de maintenance (interruption réseau)
kubectl delete -f canal.yaml
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.29.0/manifests/tigera-operator.yaml
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.29.0/manifests/custom-resources.yaml
# 3. Vérifier
kubectl get pods -n calico-system
kubectl apply -f networkpolicies-backup.yaml
Troubleshooting
Pods en erreur réseau
# Vérifier les pods Canal (kube-system)
kubectl get pods -n kube-system | grep -E "canal|calico|flannel"
# Logs Felix (NetworkPolicies)
kubectl logs -n kube-system ds/canal -c calico-node | tail -50
# Logs Flannel (networking)
kubectl logs -n kube-system ds/canal -c kube-flannel | tail -50
NetworkPolicy non appliquée
# Vérifier que Felix est Running
kubectl get pods -n kube-system | grep canal
# Sur le nœud, vérifier les règles iptables générées par Felix
sudo iptables-save | grep cali
Commandes utiles
# État des pods Canal
kubectl get pods -n kube-system | grep canal
# Logs des composants
kubectl logs -n kube-system ds/canal -c calico-node # Felix
kubectl logs -n kube-system ds/canal -c kube-flannel # Flannel
# NetworkPolicies actives
kubectl get networkpolicy -A
Ressources
- Installation Calico+Flannel (Tigera docs) : https://docs.tigera.io/calico/latest/getting-started/kubernetes/flannel/install-for-flannel
- Calico standalone (alternative recommandée) : https://docs.tigera.io/calico/latest/
- RKE2 networking : https://docs.rke2.io/networking/basic_network_options