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 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.

Link para diagrama simplificado que visualiza a configuração

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.


1
Você pode usar o iptables para reescrever o IP de destino dos irmãos no mesmo datacenter para os ips da rede privada. Além disso, esta deve ser a serverfault não SO;)
n00b32

Sim, mais algumas escavações me levaram à mesma conclusão. Isso vai ser um aborrecimento, no entanto, eu realmente precisaria de uma ferramenta para fazer isso automaticamente (reescreva todos os IPs entre todos os nós em um cluster / controlador de domínio). Afinal, para N nós eu precisaria (N-1) ^ 2 de regras do iptables.

Respostas:


1

(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.


Obrigado, por favor, deixe-me saber se você descobrir alguma coisa na próxima semana. O problema ao qual você se vinculou é sobre a funcionalidade 'antiga' do enxame do Docker, enquanto eu estou usando (e aconselho você a usar) o novo modo do enxame do Docker , que é interno e não requer um armazenamento de chave / valor externo.
Ede
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.