Networking

Canal

Combinaison Flannel (networking) + Calico (NetworkPolicies). Dépôt upstream déprécié (K8s 1.28+). Encore supporté dans Rancher et RKE2. Préférer Calico standalone pour les nouveaux déploiements.

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/canal n'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

ComposantRôle
FlannelRéseau overlay VXLAN pour les pods (connectivité L3)
Calico FelixApplication 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

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