Conceitos de rede para contêineres Kubernetes

Concluído

O Kubernetes é uma plataforma de código aberto portátil e extensível para automatizar a implantação, o dimensionamento e o gerenciamento de suas cargas de trabalho em contêineres. Como uma plataforma de orquestração, o Kubernetes oferece facilidade de uso e flexibilidade, como ofertas de plataforma como serviço (PaaS) e infraestrutura como serviço (IaaS).

Importante

Você precisa entender conceitos como redes virtuais, balanceadores de carga e proxies reversos para configurar a rede Kubernetes.

Clusters e nós

O Kubernetes é baseado em clusters. Em vez de ter uma única máquina virtual, ele usa várias máquinas virtuais chamadas nós que trabalham juntos como um só. O Kubernetes usa uma arquitetura de cluster que consiste em um nó primário e um ou mais nós de trabalho. O nó primário executa os componentes do plano de controle, como o servidor de API, o agendador e o gerenciador do controlador. Os nós de trabalho executam os componentes do plano de dados, como o kubelet, o kube-proxy e o tempo de execução do contêiner.

Diagram showing how Kubernetes uses a cluster architecture that consists of a primary node and one or more worker nodes.

O componente kube-proxy é responsável pelas redes do cluster local e é executado em cada nó. Garante que cada nó tem um endereço IP exclusivo. Ele também implementa regras para lidar com roteamento e balanceamento de carga de tráfego usando tabelas IP e um servidor virtual IP. Este proxy não fornece serviços DNS sozinho. O suplemento DNS de um cluster baseado em CoreDNS é recomendado e instalado por predefinição.

Pods

Um pod do Kubernetes agrupa contêineres e aplicativos em uma estrutura lógica. Estes pods não possuem informações e são compostos por um ou mais contentores de aplicação. Cada um tem um endereço IP, regras de rede e portas expostas.

Diagram showing how a Kubernetes pod groups containers and applications into a logical structure.

Uma implementação do Kubernetes é uma evolução dos pods. Uma implantação envolve os pods em um objeto inteligente que permite que eles se expandam. Você pode facilmente duplicar e dimensionar seu aplicativo para suportar mais carga sem a necessidade de configurar regras de rede complexas.

Recursos da camada de abstração

Para permitir o acesso aos seus aplicativos ou entre os componentes do aplicativo, o Kubernetes fornece uma camada de abstração para a rede virtual. Os nós do Kubernetes se conectam a uma rede virtual, que fornece conectividade de entrada e saída para pods. O componente kube-proxy é executado em cada nó para fornecer esses recursos de rede.

No Kubernetes:

  • Os serviços agrupam logicamente pods para permitir o acesso direto a uma porta específica através de um endereço IP ou nome DNS.
  • ServiceTypes permitem que você especifique que tipo de Serviço você deseja.
  • Você pode distribuir o tráfego usando um balanceador de carga.
  • O roteamento de camada 7 do tráfego de aplicativos também pode ser alcançado com controladores de entrada.
  • Você pode controlar o tráfego de saída (saída) para nós de cluster.
  • Segurança e filtragem do tráfego de rede para pods é possível com políticas de rede.

Redes no Kubernetes

O Kubernetes tem requisitos específicos para como implementar a rede para um cluster. Suas opções de configuração afetam suas opções de como expor seus aplicativos na rede de cluster e como armazenar dados. Para simplificar a comunicação, o Kubernetes espera que configure as redes para que:

  • Os pods possam comunicar entre si nos diferentes nós sem a Tradução de Endereços de Rede (NAT).
  • Nós e pods podem se comunicar entre si sem NAT.
  • Os agentes num nó possam comunicar com todos os nós e pods.

A configuração de um contentor e os dados que contém não são persistentes entre execuções. Quando elimina um contentor, todas as informações desaparecem, a não ser que esteja configurado para utilizar um volume. O mesmo se aplica à configuração de rede do contentor e a quaisquer endereços IP que lhe forem atribuídos.

Uma implementação é um agrupamento lógico de pods. Não é considerado uma carga de trabalho física e não lhe é atribuído um endereço IP. A cada pod é atribuído automaticamente um endereço IP, que é perdido quando o pod é destruído. Este comportamento torna complexa a estratégia de configuração de rede manual.

Opções de rede do Kubernetes para contêineres do Windows

Ao implantar o Kubernetes com contêineres do Windows, você tem duas opções de rede: Serviços e controladores de entrada. Para usar essas opções, o Windows depende de plug-ins CNI (Container Network Interface).

Para simplificar a configuração da rede para as cargas de trabalho da aplicação, o Kubernetes utiliza serviços para agrupar logicamente um conjunto de pods e fornecer conectividade de rede. O serviço funciona como um ponto de entrada para o grupo de pods e fornece um endereço IP estático. O tráfego chega ao serviço para o grupo e é distribuído em um padrão round-robin para os pods. Como os endereços IP dos pods mudam ao longo do tempo, o serviço rastreia as alterações para garantir o fluxo correto do tráfego de rede para os pods.

Os aplicativos em contêineres executados no Kubernetes precisam enviar e receber dados pela internet. O Kubernetes suporta essa comunicação por meio de componentes de entrada e saída. O controlador de entrada especifica qual tráfego e fontes podem se conectar aos seus serviços. O controlador de saída permite que você conecte seus aplicativos a entidades externas por meio de um gateway de internet.

Os plug-ins CNI permitem que o Kubernetes use diferentes interfaces de rede para redes de contêineres. Os plugins conectam seus pods à rede e alocam os endereços IP do pod. Eles interagem com o Serviço de Rede de Host do Windows (HNS) e o Serviço de Computação de Host (HCS) para criar e gerenciar recursos de rede para contêineres do Windows. Alguns exemplos de plug-ins incluem Calico, Flannel e Azure CNI.

Kubernetes ServiceTypes

Para configurar o serviço desejado, você pode especificar um dos seguintes ServiceTypes do Kubernetes:

  • ClusterIP cria um endereço IP interno para uso dentro do cluster. Esse serviço é bom para aplicativos somente internos que oferecem suporte a outras cargas de trabalho dentro do cluster. Esse é o padrão usado se você não especificar explicitamente um tipo para um serviço.

Diagram showing how ClusterIP creates an internal IP address for use within the cluster.

  • NodePort cria um mapeamento de porta no nó subjacente que permite que o aplicativo seja acessado diretamente com o endereço IP e a porta do nó.

Diagram showing how NodePort creates a port mapping on the underlying node that allows the application to be accessed directly with the node IP address and port.

  • O LoadBalancer cria um recurso de balanceador de carga, configura um endereço IP externo e conecta os pods solicitados ao pool de back-end do balanceador de carga. Para permitir que o tráfego dos clientes chegue ao aplicativo, regras de balanceamento de carga são criadas nas portas desejadas.

Diagram showing how LoadBalancer creates a load balancer resource, configures an external IP address, and connects the requested pods to the load balancer backend pool.

Para balanceamento de carga HTTP/S do tráfego de entrada, outra opção é usar um controlador de entrada.

  • ExternalName cria uma entrada DNS específica para facilitar o acesso ao aplicativo.

Ingresso no Kubernetes

O componente de entrada do Kubernetes expõe rotas para tráfego HTTP e HTTPS de fora de um cluster para serviços dentro do cluster. Define as rotas de entrada ao utilizar regras de entrada. Um cluster do Kubernetes rejeita todo o tráfego de entrada sem estas rotas definidas.

Diagram showing how the Kubernetes ingress component exposes routes for HTTP and HTTPS traffic from outside a cluster to services inside the cluster.

Controlador de entradas

Um controlador de entrada é um software que fornece roteamento de tráfego configurável para serviços Kubernetes. Os recursos de entrada do Kubernetes são utilizados para configurar regras e rotas de entrada para serviços individuais do Kubernetes. Usando um controlador de entrada e regras de entrada, você pode usar um único endereço IP para rotear o tráfego para vários serviços em um cluster Kubernetes. Depois de implantar o controlador em seu ambiente, você pode criar e implantar o manifesto de entrada. O Kubernetes usa controladores de entrada para gerenciar a configuração de entrada em um cluster e fornece vários recursos.

Regras de ingresso

As regras de entrada definem a origem do tráfego e para onde direcioná-lo num cluster. Define as regras de entrada num ficheiro de manifesto de implementação de entrada. Essas regras são definidas na chave de regras do arquivo de manifesto. Cada regra é um conjunto de valores que descreve a regra.

Anotações de ingresso

Uma anotação permite anexar metadados não identificáveis, como configurações de entrada, para cargas de trabalho. Pode pensar na anotação como uma etiqueta interna que define as configurações específicas dos recursos. Por exemplo, pode querer utilizar um controlador de entradas específico que suporte a reescrita de nomes ou a limitação de payload.

Políticas de rede

O Kubernetes fornece o recurso de política de rede para controlar o fluxo de tráfego entre pods. Você pode permitir ou negar tráfego com base em suas configurações para rótulos atribuídos, o namespace e a porta de tráfego. As políticas de rede oferecem uma abordagem nativa da nuvem que é ideal para controlar o tráfego em pods do Kubernetes.