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.
Categories:
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
- Após modificar o IPPool, é necessário reiniciar o componente calico-node para que a configuração entre em vigor
- A alteração do CIDR pode causar interrupções na rede de Pods existentes, operando com cautela
- 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
- Obter a configuração atual:
kubectl get ippools.crd.projectcalico.org -o yaml - Editar a configuração:
kubectl edit ippools.crd.projectcalico.org default-ipv4-ippool - Descrição dos principais parâmetros:
cidr: Intervalo CIDR da rede do PodvxlanMode: Always habilita o VXLANipipMode: Never desabilita o IPIPnatOutgoing: 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
- Usar BGP em vez de VXLAN em clusters grandes
- Habilitar o plano de dados eBPF para melhorar o desempenho
- Definir razoavelmente o tamanho do bloco de endereços IP
Documentação de Referência
- Documentação oficial do Calico - Configuração de modo VXLAN/IPIP
- Análise profunda do modelo de rede do Kubernetes