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.
Categories:
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
- Après avoir modifié l’IPPool, le composant calico-node doit être redémarré pour que la configuration prenne effet.
- La modification du CIDR peut entraîner une interruption du réseau des Pods existants, il faut donc procéder avec prudence.
- 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
- Obtenir la configuration actuelle :
kubectl get ippools.crd.projectcalico.org -o yaml - Éditer la configuration :
kubectl edit ippools.crd.projectcalico.org default-ipv4-ippool - Explication des paramètres principaux :
cidr: Plage CIDR du réseau PodvxlanMode: Always pour activer VXLANipipMode: Never pour désactiver IPIPnatOutgoing: 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
- Utiliser BGP au lieu de VXLAN pour les grands clusters.
- Activer le plan de données eBPF pour améliorer les performances.
- Définir raisonnablement la taille des blocs d’adresses IP.
Documentation de Référence
- Documentation Officielle Calico - Configuration des modes VXLAN/IPIP
- Analyse Approfondie du Modèle Réseau Kubernetes