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"