Назад | Перейти на главную страницу

Оверлейная сеть Docker не работает на виртуальных машинах Azure

Я настраиваю кластер контейнеров Docker в Azure в режиме Azure Swarm, используя overlay сетевой драйвер. В настоящее время используются 2 виртуальные машины в Azure, обе находятся в североевропейском регионе, но являются частью разных подписок Azure с операционной системой: Linux (ubuntu 18.04), работает на уровне: Standard B1ms (1 vcpus, 2 GiB memory).

Ниже приведен файл Docker Compose, который использовался при создании стека Docker:

version: '3.3'
services:
  vlab-web-service:
    image: 'my-image-here'
    ports:
      - target: 8080
        published: 8080
        protocol: tcp
        mode: ingress
    command: tail -f /dev/null
    deploy:
      mode: replicated
      replicas: 2
      restart_policy:
        condition: on-failure
        delay: 5s
        max_attempts: 3
        window: 30s
      endpoint_mode: vip
    networks:
      - vlab-swarm-network
networks:
  vlab-swarm-network:
    driver: overlay
    driver_opts:
      encrypted: "false"

Я пытаюсь измерить overlay производительность сети между двумя контейнерами, особенно при работе в зашифрованной сети. К сожалению, кажется, что overlay соединение между контейнерами не работает должным образом. На одном из контейнеров я запускаю netcat в режиме сервера, в котором все подключенные клиенты получат случайный файл размером 5 ГБ:

nc -lk -p 8080 -q 0 < transfer.file &

При проверке IP-адресов контейнеров Docker я получаю следующее:

root@vlab-docker-01:~# docker container inspect 6cc4296046a8 | grep IPAddress
            "SecondaryIPAddresses": null,
            "IPAddress": "",
                    "IPAddress": "10.255.0.5",
                    "IPAddress": "10.0.0.3",

и

root@vlab-docker-02:~# docker container inspect 382b3489fc01 | grep IPAddress
            "SecondaryIPAddresses": null,
            "IPAddress": "",
                    "IPAddress": "10.255.0.6",
                    "IPAddress": "10.0.0.4",

В netcat клиент подключается к netcat сервер с помощью следующей команды:

nc 10.0.0.3 8080 > in.file

что дает следующее сообщение:

(UNKNOWN) [10.0.0.3] 8080 (?) : Connection timed out

Если я попытаюсь подключить netcat клиент из одного из контейнеров в netcat сервер, используя общедоступный IP-адрес виртуальной машины, на которой netcat серверный контейнер размещен, все работает, как ожидалось, и данные могут передаваться между контейнерами. Хотя это не то, что я ищу, так как я не могу использовать overlay Водитель.

Как видно, все необходимые порты Docker Swarm были включены на обеих виртуальных машинах. Вот. Согласно Документация Docker Swarm, это также требование, чтобы разрешить трафик IP-протокола 50 (ESP). Хотя я не могу найти способ включить этот трафик на сетевых интерфейсах на моих виртуальных машинах Azure? Также стоит упомянуть, что вышеуказанная установка доказала свою ожидаемую работу на локальных серверах. Бег Docker version 19.03.2, build 6a30dfc.

Любые советы по этому поводу приветствуются. Спасибо!