Saltar a contenido

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"