Исследование и практика сетевого плагина Calico
В этой статье глубоко рассматривается конфигурация и практика сетевого плагина Calico в кластере Kubernetes, а также анализируются распространенные методы устранения неполадок и стратегии оптимизации сети.
Categories:
Исследование и практика сетевого плагина 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
Меры предосторожности при изменении конфигурации
- После изменения IPPool необходимо перезапустить компонент calico-node, чтобы изменения конфигурации вступили в силу.
- Изменение CIDR может привести к прерыванию работы сети существующих Pod, действуйте с осторожностью.
- Выбор режима VXLAN/IPIP должен учитывать производительность сети и совместимость.
Подробные этапы настройки
Изменение конфигурации IPPool
- Получить текущую конфигурацию:
kubectl get ippools.crd.projectcalico.org -o yaml - Редактировать конфигурацию:
kubectl edit ippools.crd.projectcalico.org default-ipv4-ippool - Описание основных параметров:
cidr: диапазон сети Pod (CIDR)vxlanMode: Always включить VXLANipipMode: Never отключить IPIPnatOutgoing: 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
Рекомендации по оптимизации производительности
- В крупных кластерах используйте BGP вместо VXLAN.
- Включите дата-плейн eBPF для повышения производительности.
- Разумно настройте размер блока IP-адресов.
Справочные материалы
- Официальная документация Calico - Конфигурация режимов VXLAN/IPIP
- Глубокий разбор сетевой модели Kubernetes