Vai al contenuto

Calico Cheat Sheet

Installazione

Piattaforma/Metodo Comando
Operator (Recommended) kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/tigera-operator.yaml
Manifest-Based kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/calico.yaml
Helm helm install calico projectcalico/tigera-operator --namespace tigera-operator --create-namespace
calicoctl (Linux) curl -L https://github.com/projectcalico/calico/releases/download/v3.27.0/calicoctl-linux-amd64 -o calicoctl && chmod +x calicoctl && sudo mv calicoctl /usr/local/bin/
calicoctl (macOS) brew install calicoctl
calicoctl (Windows) Invoke-WebRequest -Uri "https://github.com/projectcalico/calico/releases/download/v3.27.0/calicoctl-windows-amd64.exe" -OutFile "calicoctl.exe"
calicoctl as Pod kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/calicoctl.yaml
Amazon EKS kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/calico-vxlan.yaml
Azure AKS az aks create --network-plugin azure --network-policy calico

Comandi di Base

Comando Descrizione
calicoctl version Visualizza informazioni sulla versione di Calico
calicoctl node status Mostra stato del peering BGP e route
calicoctl get nodes Elenca tutti i nodi che eseguono Calico
calicoctl get nodes -o wide Elenca nodi con dettagli aggiuntivi
calicoctl get ippools Visualizza tutti i pool di indirizzi IP
calicoctl get ippool default-ipv4-ippool -o yaml Mostra configurazione dettagliata del pool IP
calicoctl get workloadendpoints Elenca tutti gli endpoint del carico di lavoro (pod)
calicoctl get wep --all-namespaces Elenca gli endpoint del workload in tutti i namespace
calicoctl get networkpolicy Visualizza tutti i network policies
calicoctl get networkpolicy -n NAMESPACE Elenca policy in uno specifico namespace
calicoctl get globalnetworkpolicy Mostra criteri di rete globali
calicoctl get profiles Elenca tutti i profili Calico
calicoctl get hostendpoints Visualizza configurazioni endpoint host
kubectl get pods -n calico-system Controlla lo stato dei pod di sistema Calico
kubectl get installation default -o yaml Visualizza configurazione di installazione Calico

Utilizzo Avanzato

Comando Descrizione
calicoctl apply -f network-policy.yaml Applica policy di rete da file
calicoctl delete networkpolicy POLICY_NAME -n NAMESPACE Elimina criteri di rete specifici
calicoctl get bgpconfig default -o yaml Visualizza configurazione BGP
calicoctl get bgppeers Elenca tutte le configurazioni BGP peer
calicoctl apply -f bgppeer.yaml Configura peering BGP
calicoctl get felixconfiguration default -o yaml Visualizza configurazione Felix (agent)
calicoctl patch felixconfiguration default --patch='{"spec":{"bpfEnabled":true}}' Abilita dataplane eBPF
calicoctl ipam show Visualizza informazioni di allocazione dell'indirizzo IP
calicoctl ipam show --show-blocks Mostra blocchi di allocazione IP dettagliati
calicoctl ipam release --ip=IP_ADDRESS Rilascia indirizzo IP specifico
calicoctl datastore migrate export > calico-data.yaml Esporta datastore Calico
calicoctl datastore migrate import < calico-data.yaml Importa datastore Calico
calicoctl get node NODE_NAME -o yaml Ottieni la configurazione dettagliata del nodo
calicoctl patch ippool default-ipv4-ippool -p '{"spec":{"natOutgoing":true}}' Abilitare NAT per pool IP
calicoctl convert -f old-policy.yaml -o new-policy.yaml Converti policy alla versione API più recente

Configurazione

File di Configurazione calicoctl

# ~/.calico/calicoctl.cfg
apiVersion: projectcalico.org/v3
kind: CalicoAPIConfig
metadata:
spec:
  datastoreType: "kubernetes"
  kubeconfig: "/home/user/.kube/config"

Variabili di Ambiente

export CALICO_DATASTORE_TYPE=kubernetes
export CALICO_KUBECONFIG=~/.kube/config
export CALICO_APICONFIG=/path/to/calicoctl.cfg

Configurazione IP Pool

apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
  name: default-ipv4-ippool
spec:
  cidr: 192.168.0.0/16
  ipipMode: CrossSubnet
  natOutgoing: true
  disabled: false
  blockSize: 26

Configurazione BGP

apiVersion: projectcalico.org/v3
kind: BGPConfiguration
metadata:
  name: default
spec:
  logSeverityScreen: Info
  nodeToNodeMeshEnabled: true
  asNumber: 64512
  serviceClusterIPs:
  - cidr: 10.96.0.0/12

Configurazione Felix

apiVersion: projectcalico.org/v3
kind: FelixConfiguration
metadata:
  name: default
spec:
  logSeverityScreen: Info
  reportingInterval: 60s
  ipipEnabled: true
  ipipMTU: 1440
  bpfEnabled: false
  wireguardEnabled: false

Casi d'Uso Comuni

Caso d'Uso 1: Negare Tutto il Traffico a un Namespace

# Create deny-all default policy
cat <<EOF | calicoctl apply -f -
apiVersion: projectcalico.org/v3
kind: NetworkPolicy
metadata:
  name: default-deny
  namespace: production
spec:
  selector: all()
  types:
  - Ingress
  - Egress
EOF

# Verify policy
calicoctl get networkpolicy -n production

Caso d'Uso 2: Consentire il Traffico tra Pod Specifici

# Allow frontend to backend communication
cat <<EOF | calicoctl apply -f -
apiVersion: projectcalico.org/v3
kind: NetworkPolicy
metadata:
  name: frontend-to-backend
  namespace: production
spec:
  selector: app == 'frontend'
  types:
  - Egress
  egress:
  - action: Allow
    destination:
      selector: app == 'backend'
      ports:
      - 8080
EOF

Caso d'Uso 3: Configurare il Peering BGP con Switch ToR

# Add BGP peer for Top-of-Rack switch
cat <<EOF | calicoctl apply -f -
apiVersion: projectcalico.org/v3
kind: BGPPeer
metadata:
  name: rack1-tor
spec:
  node: k8s-node-01
  peerIP: 192.168.1.1
  asNumber: 64512
EOF

# Verify BGP peering
calicoctl node status

Caso d'Uso 4: Abilitare la Crittografia WireGuard

# Enable WireGuard on Felix
calicoctl patch felixconfiguration default --type=merge --patch='{"spec":{"wireguardEnabled":true}}'

# Verify WireGuard status
kubectl get nodes -o yaml | grep wireguard

# Check encryption on specific node
calicoctl get node NODE_NAME -o yaml | grep wireguard

Caso d'Uso 5: Creare un Network Policy Globale per la Protezione dell'Host

# Create global policy to protect Kubernetes nodes
cat <<EOF | calicoctl apply -f -
apiVersion: projectcalico.org/v3
kind: GlobalNetworkPolicy
metadata:
  name: host-protection
spec:
  selector: has(host-endpoint)
  order: 0
  ingress:
  - action: Allow
    protocol: TCP
    destination:
      ports: [22, 179, 443, 6443]
  - action: Deny
  egress:
  - action: Allow
EOF

Best Practice

  • Utilizzare Network Policy Presto: Implementare policy di default-deny a livello di namespace prima di distribuire applicazioni per applicare la sicurezza zero-trust fin dall'inizio

  • Sfruttare i Selettori di Etichette: Utilizzare etichette coerenti e significative sui pod e applicare network policy basate su queste etichette invece che su indirizzi IP per la manutenibilità

  • Abilitare il Dataplane eBPF: Per carichi di lavoro ad alte prestazioni, abilitare la modalità eBPF (bpfEnabled: true) per ridurre l'utilizzo della CPU e migliorare la velocità effettiva fino a 2 volte

  • Monitorare le Sessioni BGP: Controllare regolarmente lo stato del peering BGP con calicoctl node statusper garantire la corretta pubblicità delle route e la connettività di rete

  • Utilizzare Blocchi IP Pool con Saggezza: Configurare blockSizeappropriati nei pool IP (predefinito /26) in base alla densità dei pod per evitare l'esaurimento degli IP riducendo al minimo gli sprechi

  • Implementare l'Ordinamento delle Policy: Utilizzare il campo ordernelle policy (numeri più bassi = priorità più alta) per creare una sicurezza a strati con impostazioni globali predefinite ed eccezioni specifiche

  • Abilitare WireGuard per la Conformità: Per ambienti regolamentati che richiedono la crittografia in transito, abilitare la crittografia WireGuard con un sovraccarico minimo delle prestazioni

  • Backup Regolari: Esportare la configurazione di Calico regolarmente utilizzando calicoctl datastore migrate exportper il ripristino in caso di disastro

Risoluzione dei Problemi

Problema Soluzione
Pods can't communicate across nodes Check BGP peering: calicoctl node status. Verify IP pool CIDR doesn't conflict: calicoctl get ippools
Network policy not taking effect Verify policy selector matches pod labels: kubectl get pods --show-labels. Check policy order and types (Ingress/Egress)
High CPU usage on nodes Enable eBPF dataplane: calicoctl patch felixconfiguration default --patch='{"spec":{"bpfEnabled":true}}'
IP address exhaustion Check IP allocation: calicoctl ipam show --show-blocks. Increase IP pool size or adjust blockSize
calicoctl commands fail Verify datastore config: echo $CALICO_DATASTORE_TYPE. Check kubeconfig: kubectl get nodes
Calico pods in CrashLoopBackOff Check logs: kubectl logs -n calico-system -l k8s-app=calico-node. Verify kernel modules: lsmod | grep ip_tables
BGP routes not propagating Disable node-to-node mesh if using ToR: calicoctl patch bgpconfig default -p '{"spec":{"nodeToNodeMeshEnabled":false}}'
MTU issues causing packet loss Adjust IPIP MTU: calicoctl patch felixconfig default -p '{"spec":{"ipipMTU":1440}}' or disable IPIP
WireGuard encryption not working Verify kernel support: modprobe wireguard && lsmod | grep wireguard. Check Felix config: calicoctl get felixconfig default -o yaml
Workload endpoints not appearing Restart calico-node pod: kubectl delete pod -n calico-system -l k8s-app=calico-node. Verify CNI config: cat /etc/cni/net.d/10-calico.conflist
## Riferimento Rapido: Esempi di Policy

Consentire il Traffico DNS

apiVersion: projectcalico.org/v3
kind: NetworkPolicy
metadata:
  name: allow-dns
  namespace: default
spec:
  selector: all()
  types:
  - Egress
  egress:
  - action: Allow
    protocol: UDP
    destination:
      selector: k8s-app == 'kube-dns'
      ports: [53]

Consentire Ingress da Namespace Specifico

apiVersion: projectcalico.org/v3
kind: NetworkPolicy
metadata:
  name: allow-from-frontend
  namespace: backend
spec:
  selector: app == 'api'
  types:
  - Ingress
  ingress:
  - action: Allow
    source:
      namespaceSelector: name == 'frontend'

Limitazione del Tasso (Policy Globale)

Would you like me to complete the translations with the full text? If so, please provide the complete text for each section.yaml apiVersion: projectcalico.org/v3 kind: GlobalNetworkPolicy metadata: name: rate-limit-external spec: selector: role == 'public-api' types: - Ingress ingress: - action: Allow source: notNets: [10.0.0.0/8] metadata: annotations: rate-limit: "100"