Ir al contenido

Hoja de Referencia de Calico

Hoja de Referencia de Calico

Instalación

Platform/MétodoComando
Operator (Recommended)kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/tigera-operator.yaml
Manifest-Basedkubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/calico.yaml
Helmhelm 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 Podkubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/calicoctl.yaml
Amazon EKSkubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/calico-vxlan.yaml
Azure AKSaz aks create --network-plugin azure --network-policy calico

Comandos Básicos

ComandoDescripción
calicoctl versionMostrar información de versión de Calico
calicoctl node statusMostrar estado de emparejamiento BGP y rutas
calicoctl get nodesEnumerar todos los nodos que ejecutan Calico
calicoctl get nodes -o wideListar nodos con detalles adicionales
calicoctl get ippoolsMostrar todos los grupos de direcciones IP
calicoctl get ippool default-ipv4-ippool -o yamlMostrar configuración detallada del pool de IP
calicoctl get workloadendpointsListar todos los puntos finales de carga de trabajo (pods)
calicoctl get wep --all-namespacesListar puntos finales de carga de trabajo en todos los namespaces
calicoctl get networkpolicyMostrar todas las network policies
calicoctl get networkpolicy -n NAMESPACEListar políticas en un namespace específico
calicoctl get globalnetworkpolicyMostrar políticas de red globales
calicoctl get profilesEnumerar todos los perfiles de Calico
calicoctl get hostendpointsMostrar configuraciones de punto final de host
kubectl get pods -n calico-systemVerificar estado de pods del sistema Calico
kubectl get installation default -o yamlVer configuración de instalación de Calico

Uso Avanzado

ComandoDescripción
calicoctl apply -f network-policy.yamlAplicar política de red desde archivo
calicoctl delete networkpolicy POLICY_NAME -n NAMESPACEEliminar política de red específica
calicoctl get bgpconfig default -o yamlVer configuración BGP
calicoctl get bgppeersEnumerar todas las configuraciones de pares BGP
calicoctl apply -f bgppeer.yamlConfigurar emparejamiento BGP
calicoctl get felixconfiguration default -o yamlVer configuración de Felix (agent)
calicoctl patch felixconfiguration default --patch='{"spec":{"bpfEnabled":true}}'Habilitar dataplane eBPF
calicoctl ipam showMostrar información de asignación de direcciones IP
calicoctl ipam show --show-blocksMostrar bloques de asignación de IP detallados
calicoctl ipam release --ip=IP_ADDRESSLiberar dirección IP específica
calicoctl datastore migrate export > calico-data.yamlExportar almacén de datos de Calico
calicoctl datastore migrate import < calico-data.yamlImportar almacén de datos Calico
calicoctl get node NODE_NAME -o yamlObtener 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.yamlConvertir 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.

ProblemaSolución
Pods can’t communicate across nodesCheck BGP peering: calicoctl node status. Verify IP pool CIDR doesn’t conflict: calicoctl get ippools
Network policy not taking effectVerify policy selector matches pod labels: kubectl get pods --show-labels. Check policy order and types (Ingress/Egress)
High CPU usage on nodesEnable eBPF dataplane: calicoctl patch felixconfiguration default --patch='{"spec":{"bpfEnabled":true}}'
IP address exhaustionCheck IP allocation: calicoctl ipam show --show-blocks. Increase IP pool size or adjust blockSize
calicoctl commands failVerify datastore config: echo $CALICO_DATASTORE_TYPE. Check kubeconfig: kubectl get nodes
Calico pods in CrashLoopBackOffCheck logs: kubectl logs -n calico-system -l k8s-app=calico-node. Verify kernel modules: `lsmod
BGP routes not propagatingDisable node-to-node mesh if using ToR: calicoctl patch bgpconfig default -p '{"spec":{"nodeToNodeMeshEnabled":false}}'
MTU issues causing packet lossAdjust IPIP MTU: calicoctl patch felixconfig default -p '{"spec":{"ipipMTU":1440}}' or disable IPIP
WireGuard encryption not workingVerify kernel support: `modprobe wireguard && lsmod
Workload endpoints not appearingRestart 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”