← К программе курса

Модуль 9 / 24

Overlay networking

DOCKER SWARM

Содержание
01

1. Цели и результат модуля

После модуля вы сможете создать изолированную overlay-сеть, объяснить VXLAN transport и encrypted mode, проверить межузловой путь и диагностировать MTU, IPAM и firewall.

  • различать underlay и overlay
  • читать subnet, peers и VNI
  • проверять task-to-task connectivity
  • обосновывать MTU и шифрование
02

2. Теория: underlay и overlay

Underlay лаборатории — cluster0 с адресами 10.77.0.11–13. Overlay создаёт виртуальную L2-сеть для tasks поверх IP-связности nodes. Docker инкапсулирует кадры через VXLAN/UDP 4789; TCP/UDP 7946 обслуживает discovery и gossip.

Overlay subnet должен не пересекаться с LAN, VPN, Docker bridge и другими сетями. В проверке Docker выделил 10.88.1.0/24 и 10.88.2.0/24 из заранее заданного address pool.

03

3. Теория: control plane и network data plane

Manager хранит network spec и IPAM allocation. На nodes создаются локальные sandboxes и endpoints только когда там есть подключённые tasks. Peers используют data-path addresses 10.77.0.x.

Running task ещё не доказывает межузловой путь: UDP 4789 может блокироваться отдельно. Проверяйте передачу между task IP на разных nodes.

04

4. Теория: encrypted overlay и MTU

Опция encrypted включает защиту VXLAN data plane между Linux nodes. Она добавляет накладные расходы и снижает доступный MTU. В лаборатории eth0 task имел MTU 1424 на всех nodes.

Шифрование требует CPU и измерений производительности. Оно не шифрует опубликованный клиентский HTTP и не заменяет TLS приложения.

05

5. Методические указания

  • Сначала подтвердите underlay ping и разрешённые 7946/4789
  • Создавайте сети с уникальным префиксом
  • Сравните Options plain и encrypted
  • Размещайте минимум по одному task на разных nodes
  • Измеряйте MTU внутри task namespace
  • Удаляйте service до network и учитывайте асинхронный cleanup
06

6. Лабораторная работа: две overlay-сети

Создайте attachable plain и encrypted networks, затем три tasks в encrypted сети. Attachable разрешает диагностические containers, но не делает сеть публичной.

terminal
ssh swarm-manager-2 docker network create --driver overlay --attachable swarm-m09-plain
ssh swarm-manager-2 docker network create --driver overlay --attachable --opt encrypted swarm-m09-encrypted
ssh swarm-manager-2 docker service create --detach=true --name swarm-m09-agents --replicas 3 --network swarm-m09-encrypted alpine:3.22 sleep 3600
ssh swarm-manager-2 docker service ps swarm-m09-agents
07

7. Лабораторная работа: IPAM, peers и VNI

Сравните Options: encrypted сеть содержит encrypted и vxlanid_list. Зафиксируйте subnet, gateway и peers с data-path addresses.

terminal
ssh swarm-manager-2 docker network inspect swarm-m09-plain
ssh swarm-manager-2 docker network inspect swarm-m09-encrypted
ssh swarm-manager-1 docker network inspect swarm-m09-encrypted --format '{{.Name}} {{.Driver}} {{.Scope}} {{json .Options}} {{json .IPAM.Config}}'
08

8. Лабораторная работа: межузловой путь и MTU

Получите task IP на manager-3 и отправьте ICMP из task manager-1. Затем сравните task MTU на всех nodes. Проверенный результат: 3/3 ответов и MTU 1424.

terminal
target_ip=$(ssh swarm-manager-3 'docker inspect --format "{{(index .NetworkSettings.Networks \"swarm-m09-encrypted\").IPAddress}}" $(docker ps -q --filter label=com.docker.swarm.service.name=swarm-m09-agents)')
source_id=$(ssh swarm-manager-1 docker ps -q --filter label=com.docker.swarm.service.name=swarm-m09-agents)
ssh swarm-manager-1 docker exec "$source_id" ping -c 3 "$target_ip"
terminal
for node in swarm-manager-1 swarm-manager-2 swarm-manager-3; do
  ssh "$node" 'id=$(docker ps -q --filter label=com.docker.swarm.service.name=swarm-m09-agents); docker exec "$id" ip link show eth0'
done
09

9. Диагностика

Разделяйте отсутствие endpoint, конфликт subnet, underlay firewall и MTU black hole. Малый ping может проходить при отказе крупных пакетов.

terminal
ssh swarm-manager-2 docker network inspect swarm-m09-encrypted
ssh swarm-manager-2 docker service ps swarm-m09-agents --no-trunc
ssh swarm-manager-1 ip route
ssh swarm-manager-1 ss -lunp
ssh swarm-manager-1 journalctl -u docker --since today
  • Peers отсутствуют — на node может не быть endpoint
  • timeout между nodes — проверяйте UDP 4789 и data-path address
  • частичная передача — измеряйте path MTU
  • network in use — дождитесь удаления tasks
10

10. Контроль, критерии освоения и cleanup

  • Чем overlay отличается от underlay?
  • Зачем нужен VXLAN VNI?
  • Почему endpoint создаётся не везде?
  • Что шифрует encrypted option?
  • Почему task MTU меньше underlay MTU?
  • Почему service удаляют раньше network?

Модуль освоен, если вы связываете peers с cluster0, подтверждаете межузловой обмен и объясняете MTU 1424.

terminal
ssh swarm-manager-2 docker service rm swarm-m09-agents
ssh swarm-manager-2 docker network rm swarm-m09-plain swarm-m09-encrypted
ssh swarm-manager-2 docker service ls
ssh swarm-manager-2 docker network ls --filter name=swarm-m09