Объединение сетей `host` и` link` в Docker - PullRequest
1 голос
/ 22 апреля 2019

Сценарий заключается в создании контейнера watcher, способного прослушивать любой сетевой трафик для данной docker-compose комбинации услуг. Кроме того, я должен иметь возможность, что watcher напрямую отправляет пакеты выделенным сервисам.

Я обнаружил, что host работа в сети на watcher - это, в основном, то, что я искал (включая последствия наличия слишком большого количества информации обо всех сетевых устройствах, управляемых механизмом Docker). Для прямой связи между любыми службами необходимо использовать настройки link, что противоречит работе host.

Ток docker-compose.yaml

(полная конфигурация доступна на https://github.com/ohader/docker-watcher-demo)

version: "3.7"

services:
  watcher:
    build:
      context: ./custom
    network_mode: host
    entrypoint: "tcpdump -i any"

  first:
    build:
      context: ./custom
    networks:
      default:
        ipv4_address: 172.25.0.11
    entrypoint: "sleep infinity"

  second:
    build:
      context: ./custom
    networks:
      default:
        ipv4_address: 172.25.0.22
    entrypoint: "ping first"

networks:
  default:
    ipam:
      driver: default
      config:
        - subnet: "172.25.0.0/16"

В основном служба second проверяет службу first. watcher может контролировать это с помощью network_mode: host. Так как, например, ping first невозможно изнутри watcher, поскольку IP-адреса были жестко закодированы, поэтому watcher использует, например, ping 172.25.0.11 вместо.

Вопросы

  • Есть ли лучший способ для "физического" доступа ко всем пакетам, которые отправляются на динамически скомпонованные сетевые мосты br-* с использованием tcpdump (в настоящее время достигается с помощью host сети)?
  • Есть ли способ объединить функции сетей host и bridge, например также с помощью различных драйверов даже пользовательского плагина? Я посмотрел на драйверы macvlan и ipvlan (L2, экспериментальная функция на Docker), но не смог отслеживать трафик всех составленных сервисов.

Заранее спасибо за любые отзывы или подсказки. Я посмотрел на обнаружение сервисов (консул и т. Д.), Используя overlay сеть, что показалось мне слишком сложным для моего сценария (без использования большинства этих функций).

...