Usando redes físicas privadas com o modo de enxame do Docker

11

Estou trabalhando em uma configuração de produção com o Docker no modo swarm (usando o Docker 17.03.1-ce). Haverá dois centros de dados envolvidos. Em ambos os data centers, todas as máquinas têm um IP público e um IP privado (local para data center) em uma rede privada, portanto, haverá duas redes privadas.

O tráfego de rede nas interfaces de rede privada é gratuito, enquanto o tráfego na interface pública não está após algum limite (e é mais lento), portanto, sempre que possível, prefiro que o tráfego de rede ultrapasse as interfaces privadas.

Agora, pelo que entendi (acho), todo o tráfego entre os nós do Docker no modo swarm passará pela mesma interface de rede que é usada para comunicação com os mestres de enxame, que no meu caso terão que ser públicos para fazer rede DC multi 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 direcionar o tráfego através de minhas redes privadas se os nós de origem e destino estivessem na mesma rede privada.

Eu tenho medo que isso não seja possível porque os mestres do swarm não sabem sobre essas redes privadas e os IPs que os nós têm sobre eles.

Uma solução na qual eu pude pensar é configurar uma VPN e implantar o swarm em cima disso, mas isso adiciona complexidade extra e eu prefiro uma solução pura de enxame Docker.

Atualização : como 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 dos públicos. No entanto, se eu quiser fazer isso, meu próximo problema seria como gerenciar todas essas regras. Com 10 servidores em um DC, eu precisaria de 10 * 9 = 90 deles para rotear todo o tráfego local possível pela rede privada. Eu posso imaginar que talvez exista alguma ferramenta que possa ajudar em tal tarefa ou que eu possa criar uma, mas talvez haja uma maneira muito mais simples de fazer isso.

    
por Ede 29.03.2017 / 11:39

1 resposta

1

(Provavelmente deve ser um comentário, mas não pode comentar ainda)

Como você não pode usar nomes de host e / ou DNS para fazer o bootstrap do cluster, não vejo como forçar os dados da balsa de troca do cluster na rede correta sem multímetro, mas vejo que você pode usar um nome de interface. Curiosamente, isso não é mencionado nos enxames de documentos , mas um < um problema "https://github.com/docker/swarm/issues/1934"> mostra a mensagem de erro espera um IP ou interface.

Gostaria de saber se você pode definir os membros do cluster para anunciar usando o nome da interface privada, para que você obtenha o máximo de tráfego da maneira que desejar.

Não é possível testar a mim mesmo agora, mas na próxima semana, como posso encontrar um problema semelhante em um projeto futuro.

    
por 12.06.2017 / 17:00