Estou trabalhando em uma configuração de produção com o Docker no modo enxame (usando o Docker 17.03.1-ce). Haverá 2 data centers envolvidos. Nos dois datacenters, todas as máquinas têm um IP público e um IP privado (local para o datacenter) em uma rede privada; portanto, haverá 2 redes privadas.
O tráfego de rede nas interfaces de rede privadas é gratuito, enquanto o tráfego na interface pública não está além de algum limite (e é mais lento); portanto, sempre que possível, eu preferiria que o tráfego de rede passasse pelas interfaces privadas.
Agora, pelo que entendi (acho), todo o tráfego entre os nós do Docker no modo enxame passará pela mesma interface de rede usada para se comunicar com os mestres do enxame, que no meu caso terão que ser públicos para criar redes multi-DC possível. O tráfego mais esperado, no entanto, será entre nós nos mesmos controladores de domínio, e seria muito bom se o Docker pudesse, de alguma forma, rotear o tráfego através de minhas redes privadas se os nós de origem e de destino estivessem na mesma rede privada.
Receio que isso não seja possível imediatamente, porque os mestres do enxame não conhecem essas redes privadas e os IPs que os nós têm neles.
Uma solução em que pude pensar é configurar uma VPN e implantar o enxame além disso, mas isso adiciona complexidade extra e eu preferiria uma solução pura de enxame do Docker.
Atualização : conforme sugerido em um comentário, a base para uma solução pode estar usando o iptables para rotear o tráfego de saída para IPs privados em vez de públicos. No entanto, se eu quiser fazer isso, meu próximo problema será como gerenciar todas essas regras. Com 10 servidores em um controlador de domínio, eu precisaria de 10 * 9 = 90 deles para rotear todo o tráfego local possível pela rede privada. Posso imaginar que talvez exista alguma ferramenta que possa ajudar com essa tarefa ou que eu possa criar uma, mas talvez haja uma maneira muito mais simples de fazer isso.
Respostas:
(Provavelmente deve ser um comentário, mas ainda não pode comentar)
Como você não pode usar nomes de host e / ou DNS para inicializar o cluster, não vejo como forçar os dados de jangada de troca de cluster na rede não medida correta, mas vejo que você pode usar um nome de interface. Curiosamente, isso não é declarado nos documentos do enxame, mas um problema mostra que a mensagem de erro espera um IP ou uma interface.
Gostaria de saber se você pode configurar os membros do cluster para anunciar usando o nome da interface privada, para obter o máximo de tráfego da maneira que desejar.
Não posso me testar agora, mas será na próxima semana, pois posso encontrar um problema semelhante para um próximo projeto.
fonte