Исследование и практика сетевого плагина Calico

В этой статье глубоко рассматривается конфигурация и практика сетевого плагина Calico в кластере Kubernetes, а также анализируются распространенные методы устранения неполадок и стратегии оптимизации сети.

Исследование и практика сетевого плагина Calico

Обзор

Calico — это широко используемый плагин интерфейса контейнерной сети (CNI) в экосистеме Kubernetes, обеспечивающий высокопроизводительное сетевое подключение и гибкое управление сетевыми политиками. В этой статье, основанной на практике производственной среды, глубоко анализируются основные функции и ключевые моменты конфигурации Calico.

Архитектура основных функций

Calico использует модель маршрутизации третьего уровня для обеспечения взаимодействия между контейнерами. Основные компоненты включают:

  • Felix: демон, работающий на каждом узле, отвечающий за настройку маршрутизации и правила ACL
  • BIRD: компонент распространения маршрутизации, реализующий обмен информацией о маршрутизации между узлами
  • confd: инструмент для генерации динамической конфигурации
  • CNI плагин: взаимодействие с сетевой моделью Kubernetes

Управление конфигурацией и практика

Настройка пула IP-адресов

Принципы сетевой архитектуры

graph TD
    subgraph Кластер Kubernetes
        node1[Node1] -->|BGP маршрутизация| node2[Node2]
        node1 -->|VXLAN туннель| node3[Node3]
        node2 -->|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

Меры предосторожности при изменении конфигурации

  1. После изменения IPPool необходимо перезапустить компонент calico-node, чтобы изменения конфигурации вступили в силу.
  2. Изменение CIDR может привести к прерыванию работы сети существующих Pod, действуйте с осторожностью.
  3. Выбор режима VXLAN/IPIP должен учитывать производительность сети и совместимость.

Подробные этапы настройки

Изменение конфигурации IPPool

  1. Получить текущую конфигурацию:
    kubectl get ippools.crd.projectcalico.org -o yaml
    
  2. Редактировать конфигурацию:
    kubectl edit ippools.crd.projectcalico.org default-ipv4-ippool
    
  3. Описание основных параметров:
    • cidr: диапазон сети Pod (CIDR)
    • vxlanMode: Always включить VXLAN
    • ipipMode: Never отключить IPIP
    • natOutgoing: true включить исходящий NAT

Устранение распространенных неполадок

Сбой обмена данными между узлами

flowchart TD
    A[Нет сети между узлами] --> B{Проверить режим}
    B -->|VXLAN| C[Проверить порт UDP 4789]
    B -->|IPIP| D[Проверить протокол 4]
    C --> E[Конфигурация брандмауэра]
    D --> E
    E --> F[Проблема решена]

Команды проверки конфигурации

# Проверить статус узла Calico
calicoctl node status

# Просмотреть таблицу маршрутизации
ip route show

Рекомендации по оптимизации производительности

  1. В крупных кластерах используйте BGP вместо VXLAN.
  2. Включите дата-плейн eBPF для повышения производительности.
  3. Разумно настройте размер блока IP-адресов.

Справочные материалы