Rede Kubernetes: um guia completo para entender o modelo de rede

Publicados: 2020-02-18

O gerenciamento de contêineres é um aspecto vital da rede. Com as mudanças nos requisitos de tráfego de hoje, a importância do Kubernetes aumentou dez vezes. E se você estiver interessado em aprender sobre redes, primeiro terá que se familiarizar com o Kubernetes. Aprender sobre o Kubernetes ajudará você a lidar com o gerenciamento de contêineres de maneira eficaz. O Kubernetes também é uma das principais ferramentas de DevOps do mercado para 2020.

Mas não se preocupe porque, neste guia detalhado, discutiremos o mesmo. O Kubernetes é uma ferramenta de gerenciamento de contêineres e, neste artigo, você aprenderá por que ele é usado, quais são os componentes de sua rede e como eles roteiam o tráfego.

Aprenda engenharia de software online das melhores universidades do mundo. Ganhe Programas PG Executivos, Programas de Certificado Avançado ou Programas de Mestrado para acelerar sua carreira.

Vamos mergulhar.

Índice

O que é Kubernetes?

Antes de começarmos a discutir redes no Kubernetes, devemos considerar os conceitos básicos desta ferramenta. Dessa forma, você não enfrentará confusão mais adiante no artigo e terá um entendimento básico de tudo o que foi mencionado aqui.

Kubernetes é uma ferramenta de orquestração de contêineres de código aberto. Ele ajuda você a gerenciar contêineres, que se tornaram o aspecto mais crítico da rede nos dias de hoje. O Kubernetes tem muitas funções, incluindo dimensionamento de contêineres, implantação de contêineres, descalcificação de contêineres etc.

Enquanto o Docker auxilia os profissionais na criação de containers, o Kubernetes os auxilia na gestão dos mesmos. É por isso que ambos são tão importantes. O Kubernetes executa um sistema distribuído em um cluster. Compreender sua estrutura e sua rede permitirá que você evite erros e gerencie contêineres sem erros.

Por que o Kubernetes é usado?

Os requisitos de contêineres das empresas aumentaram muito nos últimos anos. A menos que sejam muito pequenos, eles não podem contar com um ou dois contêineres. Eles precisariam ter um grande conjunto de contêineres para balanceamento de carga. O requisito pode ser em centenas para manter uma alta disponibilidade e equilibrar o tráfego.

Quando o tráfego aumentasse, eles precisariam de mais contêineres para lidar com solicitações. Da mesma forma, quando o tráfego for menor, eles precisarão reduzir os contêineres. Gerenciar os containers de acordo com a demanda pode ser desafiador, principalmente se for feito manualmente.

Orquestrar manualmente os contêineres pode levar muito tempo e recursos, que seriam facilmente gastos em outro lugar. Automatizar esta tarefa torna as coisas muito mais simples. Assim, você não precisaria se preocupar em dimensionar e descalcificar os contêineres. É isso que o Kubernetes faz. Leia como criar projetos de DevOps para iniciantes com a ajuda do Kubernetes em nosso artigo principais projetos de DevOps para iniciantes.

Ele automatiza a orquestração e o gerenciamento de contêineres. É amplamente popular devido à sua funcionalidade. É um produto do Google e seu desempenho ajuda consideravelmente as organizações a automatizar o dimensionamento de contêineres.

Componentes do Kubernetes

Agora que você sabe o que é o Kubernetes e quais são suas funções, podemos começar a discutir seus múltiplos componentes. Você pode entender a rede nesta ferramenta somente depois de se familiarizar com suas diferentes partes. Não há muito com o que se preocupar, no entanto. Isso porque estamos aqui para ajudar. A seguir, uma breve descrição de seus vários componentes. Embora a descrição seja concisa, deve ser suficiente para lhe dar uma ideia geral.

Pods

Você se lembra dos átomos da química, os menores objetos independentes da matéria? Bem, Pods são os átomos do Kubernetes. Um pod é uma carga de trabalho em um cluster. Pode conter um ou vários contêineres com armazenamento. Cada Pod tem um endereço IP exclusivo que atua como sua identidade quando interage com outros componentes do Kubernetes. Todos os contêineres de um pod são agendados e localizados na mesma máquina.

Controladores

Os controladores constroem o Kubernetes. Os controladores observam o estado do servidor de API para garantir que seu estado atual corresponda ao estado que você especificou. Se o estado do servidor da API mudar por algum motivo, ele reage de acordo. Os controladores usam um loop para verificar os estados dos clusters e compará-los com os estados necessários. Ele também pode executar tarefas para alterar o estado atual para o estado necessário.

Nós

Se os Pods são os átomos, os Nodes são as engrenagens do Kubernetes. Eles executam o cluster. As máquinas virtuais são nós acessíveis em clusters do Kubernetes. Muitas pessoas tendem a usar a palavra 'host' em vez de 'nó'. Tentamos usar o termo nós de forma consistente neste artigo.

Servidor de API

O servidor de API é o gateway para o armazenamento de dados no Kubernetes. Ele permite que você especifique o estado desejado para clusters. Você terá que fazer chamadas de API se quiser alterar o estado do seu cluster Kubernetes e descrever o estado necessário.

Como você está familiarizado com os componentes da rede Kubernetes, podemos começar com seu modelo de rede e como ele funciona.

Explicação da rede do Kubernetes

A rede Kubernetes segue um modelo específico que possui as seguintes restrições:

  • Os pods se comunicam com todos os outros pods sem tradução de endereço de rede
  • Nods podem se comunicar com Pods sem tradução de endereço de rede
  • O IP de um Pod que outros Pods veem para ele é o mesmo IP que ele vê por si mesmo

Devido a essas restrições, o Kubernetes tem apenas algumas seções de rede. Eles estão:

  • Transferências de contêiner para contêiner
  • Transferências de pod para pod
  • Transferências de pod para serviço
  • Transferências de Internet para serviço

Contêiner para Contêiner

Você pode pensar que, em rede, uma máquina virtual interage diretamente com um dispositivo ethernet, mas há mais do que isso.

Se você estiver usando Linux, o namespace de rede fornecerá uma pilha de rede com seus dispositivos de rede, rotas e regras para o firewall. Todo processo em execução no Linux se comunicaria com esse namespace de rede.

Um Pod possui um grupo de contêineres em um namespace de rede. Esses contêineres têm o mesmo espaço de porta e endereço IP, que é atribuído a eles por meio do namespace da rede. Esses contêineres se encontram por meio do host local porque estão localizados no mesmo namespace. Se seus aplicativos estiverem em um pod, eles também poderão acessar os volumes compartilhados.

Pod a Pod

Os pods se comunicam por meio de seus endereços IP. Cada Pod tem um endereço IP real e distinto no Kubernetes. Você já sabe o que são Pods, então não precisamos tocar nesse assunto. Sabemos que o Kubernetes usa IPs para facilitar a comunicação entre os pods; vamos discutir como ele faz isso.

Os pods se comunicam por meio de seus nós. É por isso que para entender a comunicação de pod para pod, você precisará entender a interação entre os nós.

  • Comunicação entre nós
  • Comunicação intra-nó

Vamos discutir cada um deles em detalhes:

Comunicação entre nós

Quando os nós estiverem situados em pods diferentes, eles se comunicarão por meio desse método. Podemos entender esse método de comunicação através de um exemplo fácil. Suponha que existam quatro redes de pods diferentes, ou seja, pod 1, pod 2, pod 3 e assim por diante. Os pods 1 e 2 estão localizados na rede raiz do nó 1 e os pods 3 e 4 estão localizados na 2ª rede.

Você precisa transferir um pacote do pod 1 para o pod 4.

O pacote primeiro precisa sair da rede pod 1 e entrar na rede raiz por meio de veth0. Ele passa pela ponte Linux, o que o ajuda a encontrar seu destino. Como o nó não tem um objetivo dentro de seu Pod, ele é enviado de volta para a interface eth0. Agora ele deixa o primeiro nó para a tabela de rotas. A tabela de rotas roteia o pacote para o nó necessário, que está situado no pod4. O pacote primeiro atinge o nó 2, depois atinge a ponte, que o direciona ao seu destino.

Comunicação intra-nó

A comunicação Intra Node ocorre quando os nós estão situados no mesmo Pod. Podemos explicar a comunicação entre nós da mesma forma que explicamos a comunicação entre nós. Nesses casos, o pacote viaja do primeiro Pod em eth0. Ele entra na rede raiz por meio de veth0. Então ele tem que passar para a ponte e depois vai para o IP designado.

É assim que os pods se comunicam no Kubernetes. Vamos para a próxima seção.

Pod para serviço

Você já viu na seção anterior como o tráfego é roteado entre os endereços IP dos pods. No entanto, há um problema com os endereços IP. Os IPs dos pods podem desaparecer e reaparecer de acordo com o dimensionamento dos contêineres. Portanto, se os contêineres forem dimensionados, o número de IPs do pod aumentará e vice-versa também é verdade.

Os serviços ajudam na gestão desta situação. Aqui está uma breve explicação de quais serviços são no Kubernetes, para que você não tenha nenhuma confusão.

O que são serviços no Kubernetes?

Os serviços no Kubernetes configuram proxies que precisam transferir solicitações para um grupo de pods. Esses pods recebem tráfego e o seletor lida com essa tarefa. Após a criação de um serviço, ele recebe um endereço IP que trata de suas solicitações. Existem vários tipos de serviços, e devemos discuti-los antes de passarmos para o Pod para comunicação de serviço.

Há um total de 4 tipos de serviços no Kubernetes. Eles estão:

  • ClusterIP
  • NodePort
  • Balanceador de carga
  • Nome Externo

ClusterIP é o tipo de serviço padrão. Nesse tipo, o serviço é acessível apenas no cluster. No NodePort, o serviço é exposto ao IP de cada nó. O NodePort roteia para um serviço ClusterIP à medida que o sistema o cria antecipadamente. Ao contrário do ClusterIP, você pode contatar esse serviço fora de um cluster.

LoadBalancer usa o balanceador de carga de uma nuvem para expor o serviço a redes externas. O NodePort e o ClusterIP são criados automaticamente por causa disso, e o serviço ExternalName o transfere conforme reflete um registro CNAME.

Agora que você sabe o que são serviços e quantos tipos de serviço existem, vamos discutir como ocorre a comunicação de Pod para serviço.

Como funciona?

Nesse cenário, o pacote sai do Pod por meio de eth0. Ele vai para a ponte através do dispositivo Ethernet de onde é transferido para a rota padrão de eth0. No entanto, ele precisa passar pelo iptables antes de ser aceito em eth0. O iptables determina o destino do pacote usando as regras especificadas que ele possui e envia o pacote para o Pod necessário. Feito isso, o pacote vai para o IP real de um pod em vez do IP virtual do serviço.

Externo ao serviço

Os três métodos anteriores de roteamento de tráfego estavam preocupados apenas com o Kubernetes. Mas, em casos reais, é provável que você precise conectar sua rede Kubernetes a uma rede de terceiros para rotear o tráfego. E esta seção é sobre o mesmo.

Quando conectado a uma rede externa, o Kubernetes pode executar duas funções:

  • Rotear o tráfego da internet para sua rede
  • Rotear o tráfego de sua rede para a internet

O primeiro requer uma rede Ingress e o último requer uma rede Egress. Vamos dar uma olhada neles.

Entrada

Rotear seu tráfego de uma rede pública para seu sistema Kubernetes é muito complicado. Requer o LoadBalancer e o Controller para manipular os pacotes. Aqui está um exemplo de como funciona.

Primeiro, você implantará um serviço e seu provedor de nuvem criará um novo balanceador de carga. O balanceador de carga distribuirá o tráfego entre as máquinas virtuais em seu cluster usando a porta designada de seu serviço. Aqui, os iptables transferem o tráfego que recebem do balanceador de carga para o Pod necessário. O Pod responderá ao cliente com seu IP, e o conntrack ajuda a reescrever os IPs da maneira correta.

Os balanceadores de carga da camada 7 presentes na rede são capazes de segmentar o tráfego de entrada de acordo com URLs e caminhos. Isso é muito útil quando você está trabalhando com uma rede Ingress.

Saída

Quando você roteia o tráfego de um nó da sua rede Kubernetes para a internet, depende muito das configurações de sua rede de como tudo funcionaria. Discutiremos um exemplo geral aqui para tocar no assunto.

O pacote começa no namespace do Pod e vai para o namespace raiz por meio do veth. Em seguida, ele vai para a ponte de onde viaja para o serviço padrão porque o IP para o qual precisa ir não está conectado à ponte. Ele passa pelo iptables enquanto vai para o namespace root.

Leia: Pré-requisito para DevOps: não é o que você pensa que é

Agora, os gateways da Internet aceitam apenas endereços IP que estão conectados a máquinas virtuais. E o pod de origem do nosso bolso não está conectado a uma VM. Então o iptables faz um NAT de origem e altera a origem do pacote. Agora ele chega ao gateway de internet onde passa por outro NAT e então entra na internet pública (seu destino).

E é isso. Agora você sabe tudo sobre a rede Kubernetes e seus vários componentes.

Conclusão

O Kubernetes é, sem dúvida, uma das ferramentas essenciais que você deve aprender se estiver interessado em rede. Aqueles que não estão familiarizados com este campo não sabem o quão vital é. Gerenciar contêineres e rotear o tráfego de acordo com esses requisitos de tráfego pode ajudá-lo consideravelmente. Tentamos manter este guia o mais claro possível para ajudá-lo a entender tudo.

Se você quiser aprender e dominar Kubernetes, DevOps e muito mais, confira o Programa PG Executivo do IIIT-B & upGrad em Desenvolvimento de Software - Especialização em Desenvolvimento Full Stack.

Prepare-se para uma carreira do futuro

Candidate-se ao Mestrado em Ciência da Computação