07. Modo de comunicação de rede Docker

Índice

1. Introdução

2. Princípios básicos

3. Configuração de rede do Docker

3.1. Ver configuração de rede

3.2, 4 modos de rede

3.3, modo ponte

3.3.1, usando a rede de ponte

3.3.2, rede de ponte personalizada

3.4, modo host

3.5, modo contêiner

3.6, nenhum modo

4. Resumo


1. Introdução

Anteriormente, apresentamos o conteúdo relevante do contêiner Docker, e o contêiner Docker é executado na máquina virtual da máquina host. Essas máquinas virtuais são independentes entre si sem nenhuma interface entre si, ou seja, os containers são logicamente isolados uns dos outros. Então, como conseguir uma comunicação mútua entre contêineres? É sobre isso que vamos falar hoje.

2. Princípios básicos

As interfaces de rede em contêineres do Docker são interfaces virtuais por padrão. A maior vantagem da interface virtual é que a eficiência de encaminhamento é extremamente alta. Isso porque o Linux implementa o encaminhamento de dados entre interfaces virtuais duplicando os dados no kernel, ou seja, os pacotes de dados no cache da interface de envio serão copiados diretamente para o cache da interface de recebimento sem passar por um dispositivo de rede física externo. .

A rede do Docker faz bom uso da tecnologia de rede virtual do Linux. Crie uma interface virtual (veth) na placa de rede física e no contêiner do host e deixe-os se conectarem por meio da ponte docker0 do host. Colocamos um par de veths chamado de par veth .

3. Configuração de rede do Docker

3.1. Ver configuração de rede

Podemos visualizar as informações de configuração de rede do Docker com o seguinte comando.

docker network

Vários modos de comunicação de rede do Docker podem ser visualizados através dos seguintes comandos.

docker network ls

0

Você pode ver que existem 3 modos: bridge, host, nenhum. E o padrão é bridge.

Vamos iniciar um contêiner docker aleatoriamente, o nome do contêiner é myapp e nenhum modo de rede é especificado:

docker run -d -p 18080:8899  myapp

0

Depois que a inicialização for bem-sucedida, verificamos os detalhes da ponte de rede:

docker network inspect bridge

Você pode ver que o contêiner contém nosso contêiner myapp, o que significa que o contêiner myapp que acabamos de iniciar usa o modo de rede de ponte por padrão.

0

E o endereço de sub-rede padrão é "172.17.0.0/16". O IP do contêiner é 172.17.0.2, que é uma sub-rede pertencente à rede de ponte.

3.2, 4 modos de rede

O Docker fornece um total de 4 modos de comunicação de rede: ponte, contêiner, host e nenhum. Além da ponte, do host e de nenhum visto através dos ls da rede docker acima, há também um modo de contêiner.

modelo

Se deve oferecer suporte a vários hosts

mecanismo de comunicação vertical

mecanismo de comunicação horizontal

ponte

não

Vincular porta do host

Comunique-se via ponte Linux

recipiente

não

Vincular porta do host

Comunique-se por meio de uma conexão Linux

hospedar

sim

Comunique-se pela rede do host

Comunique-se pela rede do host

nenhum

não

incapaz de se comunicar

Só pode se comunicar através de uma conexão Linux

Como os contêineres do Docker são logicamente isolados uns dos outros, um ambiente de rede isolado é criado no contêiner quando o Docker é instalado. Em um ambiente de modo de rede isolado, cada contêiner em execução no host possui uma pilha de rede completamente independente e o ambiente de rede do contêiner Docker é isolado do host. Ao usar diferentes modos de rede do Docker, os contêineres do Docker podem compartilhar o namespace de rede da máquina host e o acesso mútuo entre os contêineres do Docker também pode ser realizado.

3.3, modo ponte

Conforme mencionado anteriormente, o modo bridge é o modo de comunicação de rede padrão do Docker e também é o modo mais usado pelos desenvolvedores. No modo bridge, o mecanismo do Docker cria um namespace de rede independente. Isso garante que os contêineres em execução em cada namespace tenham recursos de rede independentes, como placas de rede.

Usando o modo bridge, é muito conveniente realizar o isolamento de rede entre contêineres e entre contêineres e hosts. Ao usar a ponte docker0 no host, a comunicação de rede entre o contêiner do Docker e o host (ou mesmo a rede externa) pode ser realizada.

Simplesmente experimente:

3.3.1, usando a rede de ponte

Crie um contêiner para a imagem do busybox.

BusyBox é um software que integra mais de 300 comandos e ferramentas Linux mais usados. BusyBox inclui ferramentas simples como ls, cat, echo, etc., e ferramentas maiores e mais complexas como grep, find, mount e telnet.

docker run -it busybox /bin/sh

Use ifconfig para visualizar informações de rede:

Você pode ver que o IP da rede interna do contêiner é 172.17.0.3.

3.3.2, rede de ponte personalizada

Por padrão, o mecanismo do docker criará automaticamente uma rede de ponte. Mas geralmente no ambiente de produção, customizamos uma rede bridge. Claro, o docker também suporta nossa customização.

1) Crie uma rede de ponte personalizada.

Crie um modo de rede chamado mybridge, o ip do gateway é 172.19.0.1 e o intervalo de IP da sub-rede é 172.19.0.0/24.

docker network create -d bridge  --ip-range=172.19.0.0/24 --gateway=172.19.0.1 --subnet=172.19.0.0/24 mybridge
  • -d: Especifica o modo de comunicação da rede, o padrão é bridge.
  • --ip-range: intervalo de endereços IP da sub-rede.
  • --gateway: O endereço IP do gateway.
  • --subnet: O endereço IP da sub-rede.
  • mybridge: nome da rede de ponte personalizada

2) Visualize a rede do Docker.

docker network ls

Você pode ver que há um modo de comunicação de rede adicional do mybridge.

3) Crie um contêiner usando mybridge.

docker run -it --network=mybridge --ip=172.19.0.33 busybox

  • --ip: Especifica o endereço IP do contêiner.
  • --network: O modo de comunicação de rede usado, onde o mybridge recém-criado é especificado.

4) Verifique o IP do contêiner.

5) Exclua a rede personalizada.

docker network rm mybridge

3.4, modo host

No modo de host, o contêiner e o host compartilham o mesmo namespace de rede e o endereço IP do contêiner é o mesmo do host. Se a máquina host tiver um endereço IP público, o contêiner também terá esse endereço IP público. Ou seja, neste momento, o contêiner pode usar diretamente o endereço IP da máquina host para se comunicar com o mundo externo, e a porta do serviço no contêiner também pode usar diretamente a porta da máquina host sem nenhuma conversão.

Como o encaminhamento da máquina host não é mais necessário no modo host, seu desempenho foi bastante aprimorado.

1) Crie um contêiner usando o modo de host.

docker run -it --net=host busybox /bin/sh

2) Use ifconfig para ver as informações da rede.

Dentro do recipiente:

Hospedar:

Podemos ver que a configuração de rede do contêiner e do host é exatamente a mesma, o que significa que o contêiner e o host compartilham o mesmo namespace de rede.

Se você usar o modo host, não precisamos -p para mapear a porta ao criar o contêiner. Se houver uma porta mapeada, haverá um prompt de aviso ao criá-la. Porque o IP e a porta neste momento são compartilhados com o host.

Há dois problemas ao usar o modo host:

  1. Como o contêiner usa o ambiente de rede da máquina host, a função de isolamento do ambiente de rede é enfraquecida, fazendo com que a máquina host e o contêiner concorram pelos recursos da rede. O contêiner em si não possui mais todos os recursos de rede, mas compartilha recursos de rede com o host.
  2. O host e o contêiner usam o mesmo endereço IP, o que não é propício para configuração e gerenciamento de rede.

3.5, modo contêiner

No modo contêiner, o ambiente de rede é compartilhado entre os contêineres. Ou seja, um contêiner usará o namespace de rede de outro contêiner. Portanto, neste modo, os contêineres podem acessar uns aos outros por meio de localhost ou 127.0.0.1, o que melhora a eficiência da transmissão.

O modo contêiner economiza recursos de rede, mas não há isolamento de rede para contêineres executados nesse modo. O isolamento da rede Container é entre a rede bridge e a rede host.

O modo container é muito útil em alguns cenários especiais. Por exemplo: ao criar um Pod no Kubernetes, o container base do Pod será criado primeiro; enquanto outros containers no Pod usam o modo container para se comunicar com o container base. Cada contêiner no Pod usa localhost ou 127.0.0. para se comunicar, de modo que todos os contêineres no Pod formem um todo lógico.

1) Crie um contêiner A, usando o modo de rede padrão.

docker run -it busybox /bin/sh

Exibir informações de rede:

2) Crie um contêiner B, use o modo de contêiner e aponte para o contêiner A recém-criado.

Exiba o containerId do contêiner A: 0783212a7f4c.

Abra o recipiente B.

docker run -it --net=container:0783212a7f4c busybox /bin/sh

Ver ifconfig:

Pode-se ver que as informações de IP dos contêineres A e B são as mesmas, indicando que o contêiner A e o contêiner B usam o mesmo namespace de rede.

Porque quando o contêiner B é criado, o modo contêiner é usado, para que o contêiner B não precise criar seu próprio namespace de rede, mas use diretamente o contêiner A.

3.6, nenhum modo

No modo nenhum, o contêiner tem um namespace de rede independente, mas não contém nenhuma configuração de rede, e o contêiner só pode ser acessado por meio de localhost ou 127.0.0.1.

docker run -it --net=none busybox /bin/sh

De um modo geral, o modo nenhum é usado em algumas situações que exigem alta segurança, mas não exigem rede. Mantenha sua própria rede em um espaço fechado para excluir a interferência de outras redes externas.

4. Resumo

De um modo geral, o modo bridge é o mais utilizado na produção.Os modos container e host também possuem seus próprios cenários de uso correspondentes, que podem ser selecionados de acordo com a situação real. Compreender vários modos diferentes de comunicação de rede pode nos ajudar a aprender mais sobre a comunicação entre diferentes contêineres ou entre contêineres e hosts. Vamos estudar juntos~

Acho que você gosta

Origin blog.csdn.net/p793049488/article/details/132051774
Recomendado
Clasificación