Exploration et Pratique du Plugin Réseau Calico

Cet article explore en profondeur la configuration et la pratique du plugin réseau Calico dans un cluster Kubernetes, analysant les méthodes courantes de dépannage et les stratégies d’optimisation réseau.

Exploration et Pratique du Plugin Réseau Calico

Vue d’ensemble

Calico est un plugin d’interface réseau de conteneur (CNI) largement utilisé dans l’écosystème Kubernetes, offrant une connectivité réseau haute performance et une gestion flexible des stratégies réseau. Cet article, basé sur une pratique en environnement de production, analyse en profondeur les fonctionnalités clés et les points de configuration de Calico.

Architecture des Fonctionnalités Principales

Calico adopte un modèle de routage de couche 3 pour mettre en œuvre la communication entre conteneurs. Les composants principaux incluent :

  • Felix : Démon s’exécutant sur chaque nœud, responsable de la configuration des routes et des règles ACL
  • BIRD : Composant de distribution de routage, implémentant l’échange d’informations de routage entre les nœuds
  • confd : Outil de génération de configuration dynamique
  • Plugin CNI : Interface avec le modèle réseau de Kubernetes

Gestion de la Configuration et Pratique

Configuration des Pools d’Adresses IP

Principes de l’Architecture Réseau

graph TD
    subgraph Kubernetes集群
        node1[Node1] -->|BGP路由| node2[Node2]
        node1 -->|VXLAN隧道| node3[Node3]
        node2 -->|IPIP隧道| node3
    end
    node1 --> pod1[Pod]
    node2 --> pod2[Pod]
    node3 --> pod3[Pod]
[root@k8s-03:~/.kube 20:41 $]k get ippools.crd.projectcalico.org -o yaml
apiVersion: v1
items:
- apiVersion: crd.projectcalico.org/v1
  kind: IPPool
  metadata:
    annotations:
      kubectl.kubernetes.io/last-applied-configuration: |
        {"apiVersion":"crd.projectcalico.org/v1","kind":"IPPool","metadata":{"annotations":{},"generation":1,"name":"default-ipv4-ippool"},"spec":{"allowedUses":["Workload","Tunnel"],"blockSize":26,"cidr":"192.168.0.0/16","ipipMode":"Never","natOutgoing":true,"nodeSelector":"all()","vxlanMode":"Always"}}
      projectcalico.org/metadata: '{"uid":"0891de51-013e-4a44-9cb6-0c142f480567","creationTimestamp":"2023-05-26T07:36:30Z"}'
    creationTimestamp: "2023-05-26T07:36:30Z"
    generation: 3
    name: default-ipv4-ippool
    resourceVersion: "37479"
    uid: de7868c1-ad93-4441-aa22-9198d07822f5
  spec:
    allowedUses:
    - Workload
    - Tunnel
    blockSize: 26
    cidr: 192.168.0.0/16
    ipipMode: Never
    natOutgoing: true
    nodeSelector: all()
    vxlanMode: Always
kind: List
metadata:
  resourceVersion: ""

[root@k8s-03:~/.kube 20:41 $]k edit ippools.crd.projectcalico.org default-ipv4-ippool

Précautions lors de la Modification de Configuration

  1. Après avoir modifié l’IPPool, le composant calico-node doit être redémarré pour que la configuration prenne effet.
  2. La modification du CIDR peut entraîner une interruption du réseau des Pods existants, il faut donc procéder avec prudence.
  3. Le choix du mode VXLAN/IPIP doit prendre en compte les performances réseau et la compatibilité.

Étapes de Configuration Détaillées

Modifier la Configuration IPPool

  1. Obtenir la configuration actuelle :
    kubectl get ippools.crd.projectcalico.org -o yaml
    
  2. Éditer la configuration :
    kubectl edit ippools.crd.projectcalico.org default-ipv4-ippool
    
  3. Explication des paramètres principaux :
    • cidr : Plage CIDR du réseau Pod
    • vxlanMode : Always pour activer VXLAN
    • ipipMode : Never pour désactiver IPIP
    • natOutgoing : true pour activer le NAT sortant

Dépannage Courant

Échec de la Communication entre Nœuds

flowchart TD
    A[节点间网络不通] --> B{检查模式}
    B -->|VXLAN| C[验证 UDP 4789 端口]
    B -->|IPIP| D[验证协议号 4]
    C --> E[防火墙配置]
    D --> E
    E --> F[问题解决]

Commandes de Vérification de Configuration

# 检查 Calico 节点状态
calicoctl node status

# 查看路由表
ip route show

Suggestions d’Optimisation des Performances

  1. Utiliser BGP au lieu de VXLAN pour les grands clusters.
  2. Activer le plan de données eBPF pour améliorer les performances.
  3. Définir raisonnablement la taille des blocs d’adresses IP.

Documentation de Référence