Pular para o conteúdo

Calico Cheatsheet

Calico Cheatsheet

Instalação

Plataforma/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

ComandoDescrição
calicoctl versionExibir informações da versão do Calico
calicoctl node statusMostrar status de emparelhamento BGP e rotas
calicoctl get nodesListe todos os nós executando Calico
calicoctl get nodes -o wideListar nós com detalhes adicionais
calicoctl get ippoolsExibir todos os pools de endereços IP
calicoctl get ippool default-ipv4-ippool -o yamlMostrar configuração detalhada do pool de IP
calicoctl get workloadendpointsListar todos os endpoints de workload (pods)
calicoctl get wep --all-namespacesListar endpoints de workload em todos os namespaces
calicoctl get networkpolicyExibir todas as network policies
calicoctl get networkpolicy -n NAMESPACEListar políticas em namespace específico
calicoctl get globalnetworkpolicyMostrar políticas de rede globais
calicoctl get profilesListar todos os perfis Calico
calicoctl get hostendpointsExibir configurações de endpoint do host
kubectl get pods -n calico-systemVerifique o status dos pods do sistema Calico
kubectl get installation default -o yamlVisualizar configuração de instalação do Calico

Uso Avançado

ComandoDescrição
calicoctl apply -f network-policy.yamlAplicar política de rede a partir de arquivo
calicoctl delete networkpolicy POLICY_NAME -n NAMESPACEExcluir política de rede específica
calicoctl get bgpconfig default -o yamlVisualizar configuração BGP
calicoctl get bgppeersListe todas as configurações de peers BGP
calicoctl apply -f bgppeer.yamlConfigurar peering BGP
calicoctl get felixconfiguration default -o yamlVisualizar configuração do agente Felix
calicoctl patch felixconfiguration default --patch='{"spec":{"bpfEnabled":true}}'Habilitar dataplane eBPF
calicoctl ipam showExibir informações de alocação de endereço IP
calicoctl ipam show --show-blocksMostrar blocos de alocação de IP detalhados
calicoctl ipam release --ip=IP_ADDRESSLiberar endereço IP específico
calicoctl datastore migrate export > calico-data.yamlExportar datastore do Calico
calicoctl datastore migrate import < calico-data.yamlImportar datastore Calico
calicoctl get node NODE_NAME -o yamlObtenha configuração detalhada de node
calicoctl patch ippool default-ipv4-ippool -p '{"spec":{"natOutgoing":true}}'Habilitar NAT para pool de IP
calicoctl convert -f old-policy.yaml -o new-policy.yamlConverter política para nova versão de API

Configuração

Arquivo de Configuração do calicoctl

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

Variáveis de Ambiente

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

Configuração de Pool de IP

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

Configuração BGP

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

Configuração do 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 Comuns

Caso de Uso 1: Negar Todo o Tráfego para 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áfego 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 Emparelhamento BGP com 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 Criptografia 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: Criar Política de Rede Global para Proteção 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

Melhores Práticas

  • Use Políticas de Rede Cedo: Implemente políticas de negação padrão no nível do namespace antes de implantar aplicações para impor segurança de confiança zero desde o início

  • Aproveite Seletores de Rótulos: Use rótulos consistentes e significativos em pods e aplique políticas de rede com base nesses rótulos, em vez de endereços IP, para facilitar a manutenção

  • Habilitar Dataplane eBPF: Para cargas de trabalho de alto desempenho, habilite o modo eBPF (bpfEnabled: true) para reduzir o uso de CPU e melhorar a taxa de transferência em até 2x

  • Monitorar Sessões BGP: Verifique regularmente o status de emparelhamento BGP com calicoctl node statuspara garantir a publicação adequada de rotas e conectividade de rede

  • Use Blocos de Pool de IP com Sabedoria: Configure blockSizeapropriados em pools de IP (padrão /26) com base na densidade de pods para evitar esgotamento de IP e minimizar desperdício

  • Implementar Ordenação de Políticas: Use o campo orderem políticas (números menores = prioridade mais alta) para criar segurança em camadas com padrões globais e exceções específicas

  • Habilitar WireGuard para Conformidade: Para ambientes regulados que exigem criptografia em trânsito, habilite a criptografia WireGuard com sobrecarga de desempenho mínima

  • Backups Regulares: Exporte a configuração do Calico regularmente usando calicoctl datastore migrate exportpara recuperação de desastres

Solução de Problemas

ProblemaSolução
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

Referência Rápida: Exemplos de Políticas

Permitir Tráfego 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 Ingress de 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'

Limitação de Taxa (Política Global)

Would you like me to complete the translations with the full text content? 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”