Rede do Kubernetes - um guia abrangente para os conceitos de rede do Kubernetes



Este blog sobre Kubernetes Networking irá mergulhar nos conceitos envolvidos no Kubernetes, como comunicação com pods, serviços e redes de entrada.

No blog anterior em , você deve ter entendido o Kubernetes. Neste blog sobre rede do Kubernetes, focarei principalmente nos conceitos de rede envolvidos no Kubernetes.

Neste blog sobre Rede Kubernetes, você entenderá os seguintes tópicos:





O que é Kubernetes?

Você pode definir o Kubernetes como uma ferramenta de orquestração de contêiner de código aberto que fornece uma plataforma portátil para automatizar a implantação de aplicativos em contêiner.

Agora, qualquer pessoa que trabalhe com o Kubernetes deve ter um entendimento claro do cluster do Kubernetes, pois isso o ajudará a entender a rede do Kubernetes.



Cluster Kubernetes

A plataforma Kubernetes oferece gerenciamento de estado desejado, que permite que os serviços de cluster sejam executados, a configuração alimentada na infraestrutura. Deixe-me explicar com um exemplo.

Considere um arquivo YAML que contém todas as informações de configuração que precisam ser alimentadas nos serviços de cluster. Portanto, esse arquivo é alimentado para a API de serviços de cluster e, então, caberá aos serviços de cluster descobrir como agendar pods no ambiente. Então, suponha que haja duas imagens de contêiner para o pod 1 com três réplicas e uma imagem de contêiner para o pod 2 com duas réplicas, caberá aos serviços de cluster alocar esses pares pod-réplica para os trabalhadores.

diferentes tipos de estrutura em selênio

Cluster Kubernetes - Rede Kubernetes - Edureka



Consulte o diagrama acima. Agora, como você pode ver que os serviços de cluster alocaram o primeiro trabalhador com dois pares de réplicas de pod, o segundo trabalhador com um único par de réplica de pod e o terceiro trabalhador com dois pares de réplicas de pod. Agora, é o processo Kubelet o responsável por comunicar os serviços do cluster com os trabalhadores.

Então, toda essa configuração de serviços de cluster e os próprios trabalhadores compõem esse Cluster Kubernetes !!

Como você acha que esses pods alocados individualmente se comunicam entre si?

A resposta está na rede Kubernetes!

Inscreva-se em nosso canal do youtube para obter novas atualizações ..!

Existem principalmente 4 problemas para resolver com os conceitos de rede.

  • Comunicação de contêiner para contêiner
  • Comunicação pod a pod
  • Comunicação pod para serviço
  • Comunicação externa ao serviço

Agora, deixe-me dizer como os problemas acima são resolvidos com a rede Kubernetes.

Rede Kubernetes

A comunicação entre pods, serviços e serviços externos para aqueles em um cluster traz o conceito de rede Kubernetes.

Portanto, para seu melhor entendimento, deixe-me dividir os conceitos nos seguintes.

  • Comunicação de pods e contêineres
  • Serviços
  • Conexão externa a serviços via rede de entrada

Comunicação de pods e contêineres

Antes de dizer como os pods se comunicam, vou apresentar o que são pods?

Pods

Os pods são unidades básicas de aplicativos Kubernetes, que consistem em um ou mais contêineres alocados no mesmo host para compartilhar uma pilha de rede e outros recursos. Portanto, isso significa que todos os contêineres em um pod podem alcançar outro em um host local.

Agora, deixe-me informá-lo sobre como esses pods se comunicam?

Existem 2 tipos de comunicação. o comunicação entre nós e a comunicação intra-nó.

Então, vamos começar com a comunicação dentro do nó, mas antes disso, deixe-me apresentar a você os componentes da rede pod.

Intra-nó na rede

A rede de pod intra-nó é basicamente a comunicação entre dois nós diferentes no mesmo pod. Deixe-me explicar com um exemplo.

Suponha que um pacote vai de pod1 para pod2.

  • O pacote sai da rede do Pod 1 em eth0 e entra na rede raiz em veth0
  • Em seguida, o pacote passa para a ponte Linux (cbr0), que descobre o destino usando uma solicitação ARP
  • Portanto, se veth1 tiver o IP, a ponte agora sabe para onde encaminhar o pacote.

Agora, da mesma forma, deixe-me falar sobre a comunicação de pod entre nós.

Interessado em aprender Kubernetes?
Entre nós na rede

Considere dois nós com vários namespaces de rede, interfaces de rede e uma ponte Linux.

Agora, suponha que um pacote viaje do pod1 para um pod4 que está em um nó diferente.

  • O pacote deixa a rede do pod 1 e entra na rede raiz em veth0
  • Em seguida, o pacote passa para a ponte Linux (cbr0), cuja responsabilidade é fazer uma solicitação ARP para encontrar o destino.
  • Depois que a ponte percebe que este pod não tem o endereço de destino, o pacote volta para a interface de rede principal eth0.
  • O pacote agora deixa o nó 1 para encontrar seu destino no outro nó e entra na tabela de rotas que roteia o pacote para o nó cujo bloco CIDR contém o pod4.
  • Então, agora o pacote chega ao nó 2 e então a ponte pega o pacote que faz uma solicitação ARP para descobrir que o IP pertence a veth0.
  • Finalmente, o pacote cruza o par de tubos e chega ao pod4.

Então, é assim que os pods se comunicam uns com os outros. Agora, vamos seguir em frente e ver como os serviços ajudam na comunicação de pods.

Então, o que você acha que são os serviços?

Serviços

Basicamente, os serviços são um tipo de recurso que configura um proxy para encaminhar as solicitações para um conjunto de pods, que receberá o tráfego e é determinado pelo seletor. Depois que o serviço é criado, ele tem um endereço IP atribuído que aceitará solicitações na porta.

Agora, existem vários tipos de serviço que oferecem a opção de expor um serviço fora do endereço IP do cluster.

Tipos de serviços

Existem principalmente 4 tipos de serviços.

ClusterIP: Este é o tipo de serviço padrão que expõe o serviço em um IP interno do cluster, tornando o serviço acessível apenas dentro do cluster.

NodePort: Isso expõe o serviço no IP de cada nó em uma porta estática. Desde um ClusterIP serviço, para o qual o serviço NodePort irá rotear, é criado automaticamente. Podemos entrar em contato com o serviço NodePort fora do cluster.

Balanceador de carga: Este é o tipo de serviço que expõe o serviço externamente usando o balanceador de carga de um provedor de nuvem. Portanto, os serviços NodePort e ClusterIP, para os quais o balanceador de carga externo irá rotear, são criados automaticamente.

ExternalName : Este tipo de serviço mapeia o serviço para o conteúdo do externalName campo retornando um CNAME registro com seu valor.

Então, pessoal, era tudo sobre serviços. Agora, você deve estar se perguntando como os serviços externos se conectam a essas redes, certo?

Bem, isso é por ninguém menos que Rede de entrada .

Rede de entrada

Bem, a rede Ingress é a forma mais poderosa de expor serviços, pois é uma coleção de regras que permitem conexões de entrada, que podem ser configuradas para fornecer serviços externamente por meio de URLs acessíveis. Portanto, ele atua basicamente como um ponto de entrada para o cluster Kubernetes que gerencia o acesso externo aos serviços em um cluster.

Agora, deixe-me explicar a você o funcionamento da Ingress Network com um exemplo.

Temos 2 nós, tendo o pod e os namespaces da rede raiz com uma ponte Linux. Além disso, também temos um novo dispositivo ethernet virtual chamado flannel0 (plugin de rede) adicionado à rede raiz.

Agora, queremos que o pacote flua do pod1 para o pod 4.

  • Assim, o pacote sai da rede do pod1 em eth0 e entra na rede raiz em veth0.
  • Em seguida, ele é passado para cbr0, que faz a solicitação ARP para encontrar o destino e depois descobre que ninguém neste nó tem o endereço IP de destino.
  • Assim, a ponte envia o pacote para flannel0, pois a tabela de rotas do nó é configurada com flannel0.
  • Agora, o daemon de flanela se comunica com o servidor de API do Kubernetes para saber todos os IPs de pod e seus respectivos nós para criar mapeamentos de IPs de pods para IPs de nó.
  • O plug-in de rede envolve este pacote em um pacote UDP com cabeçalhos extras, alterando os IPs de origem e destino para seus respectivos nós e envia este pacote via eth0.
  • Agora, como a tabela de rotas já sabe rotear o tráfego entre os nós, ela envia o pacote para o nó 2 de destino.
  • O pacote chega em eth0 de node2 e volta para flannel0 para descapsular e emite-o de volta no namespace da rede raiz.
  • Novamente, o pacote é encaminhado para a ponte Linux para fazer uma solicitação ARP para descobrir o IP que pertence a veth1.
  • O pacote finalmente cruza a rede raiz e chega ao Pod4 de destino.

Então, é assim que os serviços externos são conectados com a ajuda de uma rede de entrada. Agora, enquanto eu estava falando sobre plug-ins de rede, deixe-me apresentar a lista de plug-ins de rede populares disponíveis.

Agora que falei muito sobre o Kubernetes Networking, deixe-me mostrar um estudo de caso da vida real.

Estudo de caso: Assistente de riqueza usando rede Kubernetes

Wealth Wizards é uma plataforma de planejamento financeiro online que combina planejamento financeiro e tecnologia de software inteligente para fornecer consultoria especializada a um custo acessível.

Desafios

Agora, era extremamente importante para a empresa descobrir e eliminar rapidamente as vulnerabilidades de código com visibilidade total de seu ambiente de nuvem, mas queria controlar o tráfego por meio de restrições de acesso.

Portanto, eles usaram a infraestrutura Kubernetes para gerenciar o provisionamento e a implementação dos clusters com a ajuda de ferramentas para gerenciar a implantação e a configuração de microsserviços nos clusters Kube.

Eles também usaram um recurso de política de rede do Kubernetes para permitir que controlassem o tráfego por meio de restrições de acesso.

Agora, o problema era que essas políticas são orientadas a aplicativos e só podem evoluir com os aplicativos, mas não havia nenhum componente para fazer cumprir essas políticas.

Portanto, a única solução que a empresa encontrou para isso foi usar um plugin de rede e, portanto, eles começaram a usar o Weave Net.

Solução

Este plug-in de rede cria uma rede virtual que tem um controlador de política de rede para gerenciar e aplicar as regras no Kubernetes. Não apenas isso, mas também conecta contêineres Docker em vários hosts e permite sua descoberta automática.

Portanto, suponha que você tenha uma carga de trabalho no cluster e queira interromper qualquer outra carga de trabalho no cluster que se comunique com ela. Você pode conseguir isso criando uma política de rede que restrinja o acesso e só permita a entrada nele por meio do controlador de entrada em uma porta específica.

Agora, com sua implantação em cada nó do Kubernetes, o plug-in gerencia o roteamento entre pods e tem acesso para manipular as regras de IPtables. Em termos simples, cada política é convertida em uma coleção de regras IPtables, coordenadas e configuradas em cada máquina para traduzir as tags Kubernetes.

Certo, agora que você aprendeu muita teoria sobre a rede do Kubernetes, deixe-me mostrar como isso é feito na prática.

Mãos em

Então, supondo que todos vocês instalaram o Kubernetes em seus sistemas, tenho um cenário para mostrar.

Suponha que você queira armazenar o nome e a identificação do produto, para isso você precisará de um aplicativo da web. Basicamente, você precisa de um contêiner para o aplicativo da web e mais um contêiner como MySQL para o back-end, e esse contêiner do MySQL deve ser vinculado ao contêiner do aplicativo da web.

Que tal eu executar o exemplo acima mencionado de forma prática.

Vamos começar!

Passo 1: Crie uma pasta no diretório desejado e altere o caminho do diretório de trabalho para essa pasta.

mkdir HandsOn cd HandsOn /

Passo 2: Agora crie arquivos YAML de implantação para o aplicativo da web e o banco de dados MySQL.

Etapa 3: Depois de criar os arquivos de implantação, implante os dois aplicativos.

kubectl apply -f webapp.yml kubectl apply -f mysql.yml

Etapa 3.1: Verifique ambas as implantações.

kubectl get deployment

Passo 4: Agora, você deve criar serviços para ambos os aplicativos.

kubectl apply -f webservice.yml kubectl apply -f sqlservice.yml

Etapa 4.1: Assim que os serviços forem criados, implante os serviços.

Etapa 4.2: Verifique se os serviços foram criados ou não.

kubectl get service

Etapa 5: Agora, verifique a configuração dos pods em execução.

kubectl get pods

Etapa 6: Vá para o contêiner dentro do pod de webapp.

kubectl exec -it container_id bash nano var / www / html / index.php

Etapa 6.1 : Agora, mude o $ servername de localhost para o nome do serviço SQL que é “ webapp-sql1 ”Neste caso, e $ senha de para ' Edureka ”. Além disso, preencha todos os detalhes do banco de dados necessários e salve seu arquivo index.php usando o atalho de teclado Ctrl + x e depois disso pressione Y para salvar e pressionar entrar .

Etapa 7: Agora, vá para o contêiner MySQL presente no pod.

kubectl exec it container_id bash

Etapa 7.1: Obtenha acesso para usar o contêiner MySQL.

mysql -u root -p edureka

Onde -u representa o usuário e -p é a senha de sua máquina.

Etapa 7.2: Crie um banco de dados em MySQL que será usado para obter dados do webapp.

CRIAR DATABASE ProductDetails

Etapa 7.3: Use o banco de dados criado.

USAR detalhes do produto

Etapa 7.4: Crie uma tabela neste banco de dados em MySQL que será usada para obter dados do webapp.

CREATE TABLE produtos (product_name VARCHAR (10), product_id VARCHAR (11))

Etapa 7.5: Agora, saia do contêiner MySQL também usando o comando Saída .

Etapa 8: Verifique o número da porta na qual seu aplicativo da web está funcionando.

kubectl get services

Etapa 8.1: Agora, abra o aplicativo da web em seu número de porta alocado.

Etapa 9: Depois de clicar em Enviar consulta , vá para o nó em que seu serviço MySQL está em execução e entre no contêiner.

Isso mostrará a saída de todos os produtos da lista, dos quais você preencheu os detalhes.

Interessado em aprender Kubernetes?

Se você achou este blog do Kubernetes Networking relevante, confira o pela Edureka, uma empresa de aprendizagem online confiável com uma rede de mais de 250.000 alunos satisfeitos espalhados por todo o mundo.