Esplorazione e pratica del plug-in di rete Calico

Questo articolo esplora in profondità la configurazione e la pratica del plug-in di rete Calico nei cluster Kubernetes, analizzando i metodi comuni di risoluzione dei problemi e le strategie di ottimizzazione della rete.

Esplorazione e pratica del plug-in di rete Calico

Panoramica

Calico è un plug-in per l’interfaccia di rete dei container (CNI) ampiamente utilizzato nell’ecosistema Kubernetes, che fornisce connessioni di rete ad alte prestazioni e una gestione flessibile delle politiche di rete. Basato sull’esperienza in ambienti di produzione, questo articolo analizza in profondità le funzionalità principali e i punti chiave di configurazione di Calico.

Architettura delle funzionalità principali

Calico utilizza un modello di routing Layer 3 per implementare la comunicazione tra i container. I componenti principali includono:

  • Felix: Demone eseguito su ogni nodo, responsabile della configurazione del routing e delle regole ACL
  • BIRD: Componente di distribuzione del routing, implementa lo scambio delle informazioni di routing tra i nodi
  • confd: Strumento di generazione di configurazione dinamica
  • Plug-in CNI: Interfaccia con il modello di rete Kubernetes

Configurazione del pool di indirizzi IP

Principi dell’architettura di rete

graph TD
    subgraph Cluster Kubernetes
        node1[Nodo1] -->|Routing BGP| node2[Nodo2]
        node1 -->|Tunnel VXLAN| node3[Nodo3]
        node2 -->|Tunnel 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

Precauzioni per la modifica della configurazione

  1. Dopo aver modificato l’IPPool, è necessario riavviare il componente calico-node affinché la configurazione diventi effettiva
  2. Le modifiche al CIDR potrebbero causare interruzioni di rete per i Pod esistenti; operare con cautela
  3. La scelta della modalità VXLAN/IPIP deve considerare le prestazioni e la compatibilità della rete

Passaggi dettagliati per la configurazione

Modificare la configurazione IPPool

  1. Ottenere la configurazione corrente:
    kubectl get ippools.crd.projectcalico.org -o yaml
    
  2. Modificare la configurazione:
    kubectl edit ippools.crd.projectcalico.org default-ipv4-ippool
    
  3. Descrizione dei parametri principali:
    • cidr: Intervallo CIDR della rete Pod
    • vxlanMode: Always per abilitare VXLAN
    • ipipMode: Never per disabilitare IPIP
    • natOutgoing: true per abilitare NAT in uscita

Risoluzione comune dei problemi

Errore di comunicazione tra nodi

flowchart TD
    A[Comunicazione di rete tra nodi fallita] --> B{Controllare modalità}
    B -->|VXLAN| C[Verificare porta UDP 4789]
    B -->|IPIP| D[Verificare protocollo 4]
    C --> E[Configurazione firewall]
    D --> E
    E --> F[Problema risolto]

Comandi di verifica della configurazione

# Controllare lo stato del nodo Calico
calicoctl node status

# Visualizzare la tabella di routing
ip route show

Suggerimenti per l’ottimizzazione delle prestazioni

  1. Utilizzare BGP invece di VXLAN per i cluster di grandi dimensioni
  2. Abilitare il piano dati eBPF per migliorare le prestazioni
  3. Impostare correttamente la dimensione del blocco di indirizzi IP

Documentazione di riferimento