nodos de clúster de akka detrás de NAT (usando acoplador)

¿Es posible ejecutar nodos akka detrás de NAT (cada nodo está detrás de nat independiente, el puerto público está DNAT en privado)? Actualmente estoy tratando de implementar nodos akka en contenedor acoplable. Docker es el puerto público de Natting al puerto privado de instancia, el problema es que la dirección del nodo de akka se crea desde akka.remote.netty.tcp.hostname, pero en el entorno natted difiere del nombre de host público. el post procedente de la interfaz pública se rechaza porque akka está vinculado a una IP privada. ¿Es posible cambiar la dirección de los nodos akka que no respetan akka.remote.netty.tcp.hostname, digamos que la dirección actual de los nodos es akka.tcp: //ClusterSystem@172.16.10.5: 2551, donde 172.16.10.5 es akka.remote.netty .tcp.hostname, pero quiero cambiarlo a akka.tcp: //ClusterSystem@10.2.0.222: 2551, donde 10.2.0.222 es una dirección pública accesible, pero akka todavía debería estar escuchando en 172.16.10.5:2551.

Tal vez puedas instruir a Akka o Netty para que se vinculen a una dirección y puerto específicos, pero anunciarse en uno diferente. No entiendo lo suficiente a Akka o Netty como para saber si es posible.

De lo contrario, hay tres cosas que puedes probar:

  • comprobar si pueden anunciar una dirección IP determinada (la del host), pero aún enlazar a 0.0.0.0 , y luego hacer "identity port-binding", es decir, docker run -p 1234:1234 … que expondrá el puerto 1234 fuera el contenedor al puerto 1234 dentro del contenedor (mitigando así un poco la NAT);
  • deployment el clúster en un solo host Docker y use direcciones IP internas; no podrá escalar hacia múltiples máquinas, sino validar el código distribuido entre su implementación en un sistema más grande, que ya puede ayudar;
  • use Pipework , que le permite agregar interfaces adicionales a los contenedores y unir varios contenedores (en varios hosts) en una sola networking. Pipework no es oficialmente compatible con Docker, pero muchas personas lo encontraron muy útil para escenarios similares.

Sí, es posible: necesita configurar el bind-host y el bind-port para la comunicación remota además del host y el port habitual.

Cómo configurar Akka detrás de NAT de los documentos de Akka.

El soporte nativo para esto está fuera desde Akka 2.4.x; y 2.3.11 para clientes de suscripción Typesafe .