Подтвердить что ты не робот

Какова цель привязки vip addr в каждом контейнере службы в докере 1.12?

Docker использует NAT-режим ipvs для балансировки нагрузки и в режиме NAT реальный сервер ничего не знает о VIP.

По моему мнению, VIP используется только для связи между контейнерами из разных сервисов, поэтому он должен появляться только в таблице mangle iptables.

4b9b3361

Ответ 1

Я считаю, что это обсуждается прямо сейчас (на прошлой неделе в 2016 году) в PR 25414, где контейнерные сети в создании службы изначально сообщаются как

Контейнеры, предоставляемые в режиме роуминга в докере, могут быть доступны при обнаружении службы либо через виртуальный IP (VIP), либо через сеть оверлейного входа докеров. Или через DNS round robbin (DNSRR)

Но Чарльз Смит (sfsmithcha) добавляет:

VIP не входит в входящую сеть. Чтобы использовать VIP или DNSRR, вам необходимо создать пользовательскую оверлейную сеть. (См. PR 25420)

Мы не должны конфликтовать вход, который является (-публичным портом) с сетью с внутренним оверлеем.

Иллюстрация Чарльза о присутствии VIP (docs/swarm/networking.md)

Режим рока Docker Engine изначально поддерживает оверлейные сети, поэтому вы можете активировать сети "контейнер-контейнер".
Когда вы используете режим swarm, вам не нужно хранить внешний ключ.

Особенности сетей оверлейного режима роя включают следующее:

  • Вы можете подключить несколько сервисов к одной и той же сети.
  • По умолчанию служба обнаружения назначает виртуальный IP-адрес (VIP) и запись DNS для каждой службы в рое, предоставляя ее доступным по имени своей службы контейнерам в той же сети.
  • Вы можете настроить службу на использование циклического DNS-сервера вместо VIP.

Использовать обнаружение службы режима роя

По умолчанию при создании службы, подключенной к сети, рой назначает услугу VIP. VIP отображает псевдоним DNS на основе имени службы. Контейнеры в сети обмениваются сопоставлениями DNS для службы с помощью сплетен, поэтому любой контейнер в сети может обращаться к сервису через его имя службы.

Вам не нужно выставлять порты, зависящие от конкретной службы, чтобы сделать услугу доступной для других служб в одной и той же сети оверлея.
Внутренний балансировщик роя автоматически распределяет запросы к VIP-сервису среди активных задач.

OP настаивает:

По-прежнему не удается получить причину, по которой VIP прикреплен к контейнеру eth0...

Ну:

  • Интерфейс eth0 представляет собой интерфейс контейнера, который подключен к оверлейной сети. Поэтому, если вы создаете оверлейную сеть, у вас будут связанные с ней VIP.
  • Интерфейс eth1 представляет интерфейс контейнера, который подключен к сети docker_gwbridge, для внешней связи вне кластера контейнеров.

Теперь issue 25325 рассказывает о балансировке нагрузки Docker 1.12, не постоянно работающей, где таблица IPVS неправильно заполняется.

Это иллюстрирует роль этих ipv, и ошибка должна быть исправлена ​​в 1.12.1-rc1.