Exploração e Prática do Plugin de Rede Calico

Este artigo explora profundamente a configuração e a prática do plugin de rede Calico em clusters Kubernetes, analisando métodos comuns de solução de problemas e estratégias de otimização de rede.

Exploração e Prática do Plugin de Rede Calico

Visão Geral

Calico é um plugin de interface de rede de contêiner (CNI) amplamente utilizado no ecossistema Kubernetes, fornecendo conectividade de rede de alto desempenho e gerenciamento flexível de políticas de rede. Com base na prática em ambientes de produção, este artigo analisa profundamente as principais funcionalidades e pontos de configuração do Calico.

Arquitetura de Funcionalidades Principais

O Calico adota um modelo de roteamento de camada 3 para implementar a comunicação entre contêineres. Os principais componentes incluem:

  • Felix: Daemon executado em cada nó, responsável pela configuração de roteamento e regras de ACL
  • BIRD: Componente de distribuição de roteamento, implementa a troca de informações de roteamento entre nós
  • confd: Ferramenta de geração de configuração dinâmica
  • Plugin CNI: Interface com o modelo de rede do Kubernetes

Gerenciamento de Configuração e Prática

Configuração de Pool de Endereços IP

Princípios da Arquitetura de Rede

graph TD
    subgraph Cluster Kubernetes
        node1[Nó1] -->|Roteamento BGP| node2[Nó2]
        node1 -->|Túnel VXLAN| node3[Nó3]
        node2 -->|Túnel IPIP| node3
    end
    node1 --> pod1[Pod]
    node2 --> pod2[Pod]
    node3 --> pod3[Pod]
[root@k8s-03:~/.kube 20:41 $]k get ippools.crd.projectcalico.org -o yaml
apiVersion: v1
items:
- apiVersion: crd.projectcalico.org/v1
  kind: IPPool
  metadata:
    annotations:
      kubectl.kubernetes.io/last-applied-configuration: |
        {"apiVersion":"crd.projectcalico.org/v1","kind":"IPPool","metadata":{"annotations":{},"generation":1,"name":"default-ipv4-ippool"},"spec":{"allowedUses":["Workload","Tunnel"],"blockSize":26,"cidr":"192.168.0.0/16","ipipMode":"Never","natOutgoing":true,"nodeSelector":"all()","vxlanMode":"Always"}}
      projectcalico.org/metadata: '{"uid":"0891de51-013e-4a44-9cb6-0c142f480567","creationTimestamp":"2023-05-26T07:36:30Z"}'
    creationTimestamp: "2023-05-26T07:36:30Z"
    generation: 3
    name: default-ipv4-ippool
    resourceVersion: "37479"
    uid: de7868c1-ad93-4441-aa22-9198d07822f5
  spec:
    allowedUses:
    - Workload
    - Tunnel
    blockSize: 26
    cidr: 192.168.0.0/16
    ipipMode: Never
    natOutgoing: true
    nodeSelector: all()
    vxlanMode: Always
kind: List
metadata:
  resourceVersion: ""

[root@k8s-03:~/.kube 20:41 $]k edit ippools.crd.projectcalico.org default-ipv4-ippool

Precauções ao Modificar Configurações

  1. Após modificar o IPPool, é necessário reiniciar o componente calico-node para que a configuração entre em vigor
  2. A alteração do CIDR pode causar interrupções na rede de Pods existentes, operando com cautela
  3. A escolha do modo VXLAN/IPIP deve considerar o desempenho e a compatibilidade da rede

Etapas de Configuração Detalhadas

Modificar Configuração do IPPool

  1. Obter a configuração atual:
    kubectl get ippools.crd.projectcalico.org -o yaml
    
  2. Editar a configuração:
    kubectl edit ippools.crd.projectcalico.org default-ipv4-ippool
    
  3. Descrição dos principais parâmetros:
    • cidr: Intervalo CIDR da rede do Pod
    • vxlanMode: Always habilita o VXLAN
    • ipipMode: Never desabilita o IPIP
    • natOutgoing: true habilita NAT de saída

Solução de Problemas Comuns

Falha na Comunicação entre Nós

flowchart TD
    A[Rede inacessível entre nós] --> B{Verificar modo}
    B -->|VXLAN| C[Verificar porta UDP 4789]
    B -->|IPIP| D[Verificar número de protocolo 4]
    C --> E[Configuração de firewall]
    D --> E
    E --> F[Problema resolvido]

Comandos de Verificação de Configuração

# Verificar status do nó Calico
calicoctl node status

# Visualizar tabela de roteamento
ip route show

Sugestões de Otimização de Desempenho

  1. Usar BGP em vez de VXLAN em clusters grandes
  2. Habilitar o plano de dados eBPF para melhorar o desempenho
  3. Definir razoavelmente o tamanho do bloco de endereços IP

Documentação de Referência