Como fazer o Docker resolver o host DMZ?

1

Imagine que eu tenha essa configuração:

  • Um servidor de aplicativos
    • IP privado: 1.0.0.1 ; Hostname privado: machine1.internal.domain
    • IP público: 2.0.0.1 ; Nome do host público: machine1.example.com
  • Um servidor de banco de dados
    • IP privado: 1.0.0.2 ; Hostname privado: machine2.internal.domain
    • IP público: 2.0.0.2 ; Nome do host público: machine2.example.com

Essas duas máquinas estão em uma DMZ.

A Machine1 precisa se conectar à máquina2 usando o nome do host interno. Uma coisa é importante: não queremos que nenhum tráfego entre esses dois saia da DMZ. E hostname machine2.internal.domain é codificado no aplicativo em execução na máquina 1.

Sem configuração do Dockerized:

  • Caso nº 1: se a resolução de nomes funcionar para machine2.internal.domain , já está tudo bom.
  • Caso 2: caso contrário, adicionaria uma entrada em /etc/hosts em machine1: machine2.internal.domain 1.0.0.2

Com a configuração do Dockerized eu sei que quando a resolução de nomes não funciona, o contêiner do Docker não pode acessar a máquina2, já que ela não herda as entradas em /etc/hosts da máquina host.

Como posso fazer isso funcionar da melhor maneira? ... para ambos os casos: resolução de DNS funcionando e não funcionando.

Eu revi as seguintes opções para o caso 2:

  • Transmitindo o IP de machine2 para o contêiner do Docker na máquina1: docker run --add-host machine2.internal.domain:1.0.0.2 ...
    • Preciso definir o IP de machine2.internal.domain duas vezes: uma vez em /etc/hosts e uma vez no comando de execução do Docker
  • Não contendo a rede para o contêiner na máquina1: docker blabla --net=host
    • Isso não parece certo, embora eu não possa dizer quais seriam as conseqüências.
por Ali Ok 01.02.2016 / 00:16

1 resposta

0

Se você tiver um servidor DNS interno, poderá executar o aplicativo docker com a opção --dns = [].

Defina o seu servidor DNS interno para ser um encaminhador para o DNS real quando a pesquisa de nomes falhar, para que os nomes internos usem o endereço interno.

Outra opção é escrever um arquivo de hosts personalizados na imagem do docker, o que é OK se eles forem corrigidos, mas nem sempre ideais.

Uma terceira maneira é considerar o uso de algo como skydns. Se seus hosts do docker estiverem executando o CoreOS ou se você tiver um cluster do etcd2 que funcionaria também.

De longe, a melhor opção é fazer com que seus hosts trabalhem através de algum mecanismo de descoberta onde as coisas estão e não dependem do DNS. No entanto, eles geralmente exigem algo como etcd2 ou cônsul.

    
por 01.02.2016 / 01:09