узлы кластера akka за NAT (с использованием докера)

Можно ли запускать узлы akka за NAT (каждый узел находится за отдельным nat, публичный порт привязан к частному)? В настоящее время я пытаюсь развернуть узлы akka в контейнере докеров. Docker использует открытый порт Nating для частного порта экземпляра, проблема в том, что адрес узла akka создается из akka.remote.netty.tcp.hostname, но в среде natted он отличается от общедоступного имени хоста. сообщения, поступающие с общедоступного интерфейса, отклоняются, потому что akka привязана к частному IP-адресу. Можно ли изменить адрес узла akka без учета akka.remote.netty.tcp.hostname, скажем, адрес текущего узла akka.tcp://[email protected]:2551, где 172.16.10.5 — akka.remote.netty .tcp.hostname, но я хочу изменить его на akka.tcp://[email protected]:2551, где 10.2.0.222 — общедоступный адрес, но akka по-прежнему должен прослушивать 172.16.10.5:2551.


person frx    schedule 20.01.2014    source источник


Ответы (2)


Возможно, вы можете указать Akka или Netty привязываться к определенному адресу и порту, но объявлять себя по другому. Я недостаточно хорошо понимаю Akka или Netty, чтобы знать, возможно ли это.

В противном случае есть три вещи, которые вы можете попробовать:

  • проверьте, могут ли они объявить данный IP-адрес (один из хостов), но по-прежнему привязываться к 0.0.0.0, а затем выполнить «привязку идентификационного порта», то есть docker run -p 1234:1234 …, который выставит порт 1234 вне контейнера на порт 1234 внутри контейнера ( таким образом немного смягчая NAT);
  • разверните кластер на одном хосте Docker и используйте внутренние IP-адреса — вы не сможете масштабироваться на несколько машин, но проверять распределенный код между его развертыванием в более крупной системе уже может помочь;
  • используйте Pipework, который позволяет добавлять дополнительные интерфейсы к контейнерам и объединять несколько контейнеров (на нескольких хостах) вместе на единая сеть. Pipework официально не поддерживается Docker, но многие сочли его очень полезным для подобных сценариев.
person jpetazzo    schedule 22.01.2014
comment
похоже, что конвейер может помочь, я могу создать мост между физическим интерфейсом и интерфейсом контейнеров докеров и подключить узел докера к основной сети без использования NAT - person frx; 23.01.2014
comment
Вариант 1 (привязка к 0.0.0.0) невозможен с akka 2.3, но будет возможен с akka 2.4 с параметром «bind-hostname», представленным в github.com/akka/akka/issues/15007 - person Arnout Engelen; 03.04.2015

Да, возможно - вам нужно настроить bind-host и bind-port для удаленного взаимодействия в дополнение к обычным host и port.

Как настроить Akka за NAT из документации Akka.

Встроенная поддержка этого отсутствует, начиная с Akka 2.4.x; и 2.3.11 для подписчиков Typesafe.

person Konrad 'ktoso' Malawski    schedule 10.08.2015