Hoja de Referencia de Calico¶
Instalación¶
| Platform/Método | 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 |
| ## Comandos Básicos |
| Comando | Descripción |
|---|---|
calicoctl version |
Mostrar información de versión de Calico |
calicoctl node status |
Mostrar estado de emparejamiento BGP y rutas |
calicoctl get nodes |
Enumerar todos los nodos que ejecutan Calico |
calicoctl get nodes -o wide |
Listar nodos con detalles adicionales |
calicoctl get ippools |
Mostrar todos los grupos de direcciones IP |
calicoctl get ippool default-ipv4-ippool -o yaml |
Mostrar configuración detallada del pool de IP |
calicoctl get workloadendpoints |
Listar todos los puntos finales de carga de trabajo (pods) |
calicoctl get wep --all-namespaces |
Listar puntos finales de carga de trabajo en todos los namespaces |
calicoctl get networkpolicy |
Mostrar todas las network policies |
calicoctl get networkpolicy -n NAMESPACE |
Listar políticas en un namespace específico |
calicoctl get globalnetworkpolicy |
Mostrar políticas de red globales |
calicoctl get profiles |
Enumerar todos los perfiles de Calico |
calicoctl get hostendpoints |
Mostrar configuraciones de punto final de host |
kubectl get pods -n calico-system |
Verificar estado de pods del sistema Calico |
kubectl get installation default -o yaml |
Ver configuración de instalación de Calico |
| ## Uso Avanzado |
| Comando | Descripción |
|---|---|
calicoctl apply -f network-policy.yaml |
Aplicar política de red desde archivo |
calicoctl delete networkpolicy POLICY_NAME -n NAMESPACE |
Eliminar política de red específica |
calicoctl get bgpconfig default -o yaml |
Ver configuración BGP |
calicoctl get bgppeers |
Enumerar todas las configuraciones de pares BGP |
calicoctl apply -f bgppeer.yaml |
Configurar emparejamiento BGP |
calicoctl get felixconfiguration default -o yaml |
Ver configuración de Felix (agent) |
calicoctl patch felixconfiguration default --patch='{"spec":{"bpfEnabled":true}}' |
Habilitar dataplane eBPF |
calicoctl ipam show |
Mostrar información de asignación de direcciones IP |
calicoctl ipam show --show-blocks |
Mostrar bloques de asignación de IP detallados |
calicoctl ipam release --ip=IP_ADDRESS |
Liberar dirección IP específica |
calicoctl datastore migrate export > calico-data.yaml |
Exportar almacén de datos de Calico |
calicoctl datastore migrate import < calico-data.yaml |
Importar almacén de datos Calico |
calicoctl get node NODE_NAME -o yaml |
Obtener configuración detallada de nodo |
calicoctl patch ippool default-ipv4-ippool -p '{"spec":{"natOutgoing":true}}' |
Habilitar NAT para grupo de IP |
calicoctl convert -f old-policy.yaml -o new-policy.yaml |
Convertir política a nueva versión de API |
| ## Configuración |
Archivo de Configuración de calicoctl¶
# ~/.calico/calicoctl.cfg
apiVersion: projectcalico.org/v3
kind: CalicoAPIConfig
metadata:
spec:
datastoreType: "kubernetes"
kubeconfig: "/home/user/.kube/config"
Variables de Entorno¶
export CALICO_DATASTORE_TYPE=kubernetes
export CALICO_KUBECONFIG=~/.kube/config
export CALICO_APICONFIG=/path/to/calicoctl.cfg
Configuración de 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
Configuración BGP¶
apiVersion: projectcalico.org/v3
kind: BGPConfiguration
metadata:
name: default
spec:
logSeverityScreen: Info
nodeToNodeMeshEnabled: true
asNumber: 64512
serviceClusterIPs:
- cidr: 10.96.0.0/12
Configuración de Felix¶
apiVersion: projectcalico.org/v3
kind: FelixConfiguration
metadata:
name: default
spec:
logSeverityScreen: Info
reportingInterval: 60s
ipipEnabled: true
ipipMTU: 1440
bpfEnabled: false
wireguardEnabled: false
Casos de Uso Comunes¶
Caso de Uso 1: Denegar Todo el Tráfico 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 de Uso 2: Permitir Tráfico Entre Pods Específicos¶
# 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 de Uso 3: Configurar Emparejamiento 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 de Uso 4: Habilitar Cifrado 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 de Uso 5: Crear Política de Red Global para Protección de 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
Mejores Prácticas¶
-
Usar Políticas de Red Temprano: Implementar políticas de denegación predeterminada a nivel de namespace antes de implementar aplicaciones para hacer cumplir la seguridad de confianza cero desde el principio
-
Aprovechar Selectores de Etiquetas: Usar etiquetas consistentes y significativas en pods y aplicar políticas de red basadas en estas etiquetas en lugar de direcciones IP para facilitar el mantenimiento
-
Habilitar Dataplane eBPF: Para cargas de trabajo de alto rendimiento, habilitar modo eBPF (
bpfEnabled: true) para reducir el uso de CPU y mejorar el rendimiento hasta 2 veces -
Monitorear Sesiones BGP: Verificar regularmente el estado de emparejamiento BGP con
calicoctl node statuspara asegurar la publicación de rutas y conectividad de red -
Usar Bloques de IP Pool con Prudencia: Configurar
blockSizeapropiados en IP pools (predeterminado /26) según la densidad de pods para evitar agotamiento de IP mientras se minimiza el desperdicio -
Implementar Orden de Políticas: Usar el campo
orderen políticas (números más bajos = mayor prioridad) para crear seguridad por capas con valores predeterminados globales y excepciones específicas -
Habilitar WireGuard para Cumplimiento: Para entornos regulados que requieren cifrado en tránsito, habilitar cifrado WireGuard con sobrecarga de rendimiento mínima
-
Copias de Seguridad Regulares: Exportar configuración de Calico regularmente usando
calicoctl datastore migrate exportpara recuperación de desastres
Resolución de Problemas¶
Note: Placeholders 3-15 and 16-20 are left blank as no specific text was provided for translation.
| Problema | Solución |
|-------|----------|
| 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 |
Referencia Rápida: Ejemplos de Políticas¶
Permitir Tráfico 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]
Permitir Ingreso desde Namespace Específico¶
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'
Limitación de Tasa (Política Global)¶
Would you like me to complete the translations with the full text for each section? If so, please provide the complete text for each section, and I'll translate them according to the specified rules.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"