Comunicação entre contêineres (a rede Linux anterior não aguenta, basta ler este artigo)

Comunicação entre contêineres (a rede Linux anterior não aguenta, basta ler este artigo)

Depois de lançar as bases para o conhecimento básico de redes virtualizadas, podemos agora tentar usar esse conhecimento para desconstruir os princípios de comunicação entre contêineres, afinal, usar o conhecimento para resolver problemas é o objetivo fundamental do aprendizado da virtualização de redes.

Vamos primeiro focar no Docker e falar sobre a solução de comunicação de contêiner fornecida pelo Docker. Depois de apresentar a ecologia de plug-ins de rede do Kubernetes no CNI na próxima lição, você pode achar que a comunicação de rede do Docker é relativamente simples e até muito rudimentar para as necessidades de alguns sistemas distribuídos. Porém, embora existam várias soluções de rede entre containers, os assuntos de comunicação são todos fixos, nada mais que assuntos virtuais sem dispositivos físicos (containers, Pods, Serviços, Endpoints, etc.), hosts locais que não precisam atravessar a rede, e Existem três níveis de hosts externos conectados pela rede.

Todos os problemas de comunicação de rede de contêineres podem ser atribuídos aos problemas de comunicação entre vários contêineres dentro do host local, entre o host local e os contêineres internos e entre vários contêineres em diferentes hosts. Muitos dos princípios são semelhantes (comunicação entre colegas em esta turma, comunicação entre professores desta turma e colegas desta turma, e comunicação entre colegas desta turma e alunos de outras turmas) , então acho que a simplicidade da rede Docker é uma boa maneira de testar se o conhecimento anterior da rede é bem compreendido Vantagem.

No nível operacional, a solução de rede do Docker refere-se à rede que pode ser especificada diretamente por meio do parâmetro docker run --network ou à rede que é criada primeiro pelo docker network create e depois usada pelo contêiner. Durante a instalação do Docker, uma ponte chamada docker0 será criada automaticamente no host, e três redes Docker diferentes são bridge, host e nenhum. Você pode visualizar essas três redes por meio do comando docker network ls, conforme a seguir:

$ docker network ls
NETWORK ID          NAME                                    DRIVER              SCOPE
2a25170d4064        bridge                                  bridge              local
a6867d58bd14        host                                    host                local
aeb4f8df39b1        none                                    null                local

Na verdade, essas três redes correspondem às três soluções de rede prontas para uso fornecidas pelo Docker, que são:

Os leitores que usaram máquinas virtuais devem saber que esses são os mesmos modos ao configurar máquinas virtuais.

  • Modo Bridge, especificado usando --network=bridge, que também é a rede padrão quando nenhum parâmetro de rede é especificado. No modo bridge, o Docker alocará um namespace de rede independente para o novo contêiner, criará um par veth, conectará uma extremidade ao contêiner e a outra extremidade à ponte docker0. O Docker atribuirá automaticamente um endereço IP a cada contêiner. O intervalo de endereços na configuração padrão é 172.17.0.0/24, o endereço padrão do docker0 é 172.17.0.1 e o gateway de todos os contêineres será definido como docker0, para que todos access Containers em uma ponte de rede podem contar diretamente com a rede de segunda camada para se comunicar. aqui. prolixo).
  • Modo de host, especificado com --network=host. No modo host, o Docker não criará um namespace de rede independente para o novo contêiner, de modo que todas as instalações de rede do contêiner, como placas de rede, pilhas de rede etc., usem diretamente a máquina host e o contêiner não tem seu próprio endereço IP independente. Nesse modo, não há necessidade de conversão NAT para se comunicar com o mundo externo e não há perda de desempenho, mas suas deficiências também são muito óbvias, porque sem isolamento, conflitos de recursos de rede não podem ser evitados, como números de porta são não é permitido repetir.
  • Modo vazio, especificado com --network=none. No modo vazio, o Docker criará um namespace de rede independente para novos contêineres, mas não criará nenhum dispositivo de rede virtual. Neste momento, tudo o que os contêineres podem ver é um dispositivo de loopback (dispositivo de loopback). Este método é fornecido para conveniência dos usuários para fazer configurações de rede personalizadas, como adicionar dispositivos de rede por conta própria, gerenciar endereços IP por conta própria e assim por diante.

Além das três soluções de rede prontas para uso anteriores, o Docker também oferece suporte a redes criadas por usuários, por exemplo:

  • No modo contêiner, use --network=container: nome do contêiner para especificar depois de criar o contêiner. No modo de contêiner, o contêiner recém-criado ingressará no namespace de rede do contêiner especificado e compartilhará todos os recursos de rede, mas outros recursos, como arquivos e PIDs, ainda são isolados por padrão. O endereço de loopback (localhost) pode ser usado diretamente para comunicação entre dois contêineres e os recursos de rede, como números de porta, não devem entrar em conflito.
  • No modo MACVLAN, use docker network create -d macvlan para criar. Este modo de rede permite especificar um NIC de cópia para o contêiner, e o contêiner usa o endereço MAC do NIC de cópia para usar o dispositivo físico no host, portanto, essa rede é a melhor escolha quando se busca desempenho de comunicação. Deve-se notar aqui que o MACVLAN do Docker suporta apenas o modo de comunicação Bridge, portanto, é semelhante ao modo bridge em termos de função.
  • Modo de sobreposição, use docker network create -d overlay para criar. A rede Overlay mencionada pelo Docker na verdade se refere a VXLAN. Este modo de rede é usado principalmente para comunicação entre os serviços do Docker Swarm. No entanto, como o Docker Swarm perdeu para o Kubernetes e não se tornou popular, esse modelo de rede raramente é usado.

resumo

A rede virtualizada é uma função essencial da orquestração de contêineres. A função e o desempenho da rede estão intimamente relacionados à comunicação entre os vários serviços do aplicativo. Você deve prestar atenção a este ponto. Na produção real, um sistema de orquestração de contêineres é um grupo de contêineres que fornecem serviços externos em conjunto por meio da interação da rede. O desenvolvimento, a depuração, a otimização da eficiência e outros trabalhos nele são inseparáveis ​​desses conhecimentos básicos de rede.

Uma lição, um pensamento

Ao usar o Docker, você prestou atenção ou ajustou sua rede de comunicação de contêiner? Em quais cenários de demanda você fez ajustes?

Supongo que te gusta

Origin blog.csdn.net/wdays83892469/article/details/130188816
Recomendado
Clasificación