Предупреждение: разница между адресом прослушивания кластера и адресом объявления

У меня есть alertmanager, работающий на двух разных хост-машинах в качестве контейнеров докеров, и оба должны работать как кластер. Обе машины находятся внутри одного и того же vpc и взаимодействуют с частными IP-адресами.

Мне нужно знать, в чем разница между --cluster.listen-address и --cluster.advertise-address.
Поправьте меня, если я ошибаюсь. Указание cluster.listen-address=:9094 означает, что alertmanager будет прослушивать соединения кластера на всех интерфейсы на порту 9094. Следовательно, все другие узлы alertmanager на другом хост-компьютере могут подключаться к этому IP-адресу alertmanager через порт 9094, установив cluster.peer=<ip>:9094.
Но тогда я не понимаю, в чем польза cluster.advertise-address .

документация не дает большого представления о случае использования рекламы и адресов прослушивания.

Порт, выбранный во флаге cluster.listen-address, — это порт, который необходимо указать во флаге cluster.peer других одноранговых узлов.
Флаг cluster.advertise-address требуется, если экземпляр не имеет IP-адрес, который является частью RFC 6980 с маршрутом по умолчанию.

Может ли кто-нибудь помочь мне узнать разницу между ними?


person thecodeboxed    schedule 11.10.2020    source источник


Ответы (1)


В кластерной системе каждый узел должен иметь доступ к любому другому узлу. Однако узел может иметь несколько идентификаторов, особенно если используется некоторая форма преобразования сетевых адресов (NAT). Например, в конкретном контексте Docker у контейнера есть частный IP-адрес контейнера, но за пределами Docker он обычно доступен через IP-адрес своего хоста или DNS-имя и опубликованный порт.

адрес прослушивания или адрес привязки указывает, через какие сетевые интерфейсы процесс принимает входящие подключения. В Docker это почти всегда должен быть специальный IPv4-адрес всех интерфейсов 0.0.0.0 или его эквивалент IPv6 ::, и используется стандартный TCP-порт службы. Значение по умолчанию Alertmanager 0.0.0.0:9094 будет здесь правильным. (Если это 127.0.0.1, то процесс не может быть доступен из-за пределов его контейнера. Некоторое программное обеспечение будет перечислять доступные интерфейсы и отдельно связываться с каждым, что также будет работать.)

рекламный адрес сообщает кластеру, как обратно подключиться к узлу. Если вся система работает внутри Docker, это может быть внутреннее DNS-имя Docker; в Kubernetes — имя службы; или в настройке с несколькими хостами имя хоста и опубликованный порт. Опять же, особенно в случае с Docker, сервер может прослушивать порт 9094, но опция docker run -p может выбрать другой видимый извне порт; конфигурация рекламного адреса — единственный способ, которым остальная часть кластера может узнать об этом адресе.

Уровни — это начальный набор других узлов в кластере, но они могут появляться и исчезать, и как только вы подключитесь к кластеру, новый узел обычно может обнаружить все остальные нынешние участники.

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

person David Maze    schedule 11.10.2020
comment
Понял. Еще два вопроса. Что произойдет, если cluster.advertise-address=:9094 т.е. без какого-либо ip. Сформируется ли кластер сейчас или рекламный адрес требует IP-адреса? Кроме того, поскольку оба менеджера предупреждений находятся внутри vpc с частной сетью, указание частного IP-адреса хостов, на которых работают диспетчеры предупреждений, в рекламном адресе, будет работать правильно? - person thecodeboxed; 11.10.2020
comment
Каждый узел в кластере должен иметь доступ к указанному рекламному адресу. Я подозреваю, что там требуется имя хоста или IP-адрес. - person David Maze; 12.10.2020