Conceitos de Rede para contêineres do Kubernetes
O Kubernetes é uma plataforma de código aberto portátil e extensível para automatizar a implantação, a escala e o gerenciamento de suas cargas de trabalho em contêineres. Como uma plataforma de orquestração, o Kubernetes oferece facilidades de uso e flexibilidade, como as 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 do 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 juntas como uma 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 de controladores. Os nós de trabalho executam os componentes do plano de dados, como o kubelet, o kube-proxy e o runtime de contêiner.
O componente kube-proxy é responsável pela rede de cluster local e é executado em cada nó. Ele verifica se cada nó tem um endereço IP exclusivo. Ele também implementa regras para lidar com o roteamento e o balanceamento de carga do tráfego usando tabelas IP e um servidor virtual de IP. Esse proxy não fornece serviços de DNS por si só. Um complemento de cluster de DNS baseado no CoreDNS é recomendado e instalado por padrão.
Pods
Um pod do Kubernetes agrupa contêineres e aplicativos em uma estrutura lógica. Esses pods não têm inteligência e são compostos por um ou mais contêineres de aplicativos. Cada um tem um endereço IP, regras de rede e portas expostas.
Uma implantação do Kubernetes é uma evolução dos pods. Uma implantação encapsula os pods em um objeto inteligente que permite a expansão deles. Você pode duplicar e escalar o seu aplicativo com facilidade para dar suporte a 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 aplicativos, 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:
- Serviços agrupa logicamente os pods para permitir o acesso direto a uma porta específica por meio 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 tráfego de aplicativos na camada 7 também pode ser alcançado com controladores de entrada.
- Você pode controlar o tráfego de saída para nós de cluster.
- A segurança e a filtragem do tráfego de rede para pods é possível com as políticas de rede.
Redes no Kubernetes
O Kubernetes tem requisitos específicos sobre como você implementa a rede em um cluster. Suas opções de configuração afetam suas opções de como expor seus aplicativos na rede do cluster e como armazenar dados. Para simplificar a comunicação, o Kubernetes espera que você configure a rede de tal forma que:
- Os pods possam se comunicar entre si de diferentes nós, sem a NAT (Conversão de Endereços de Rede).
- Os nós e os pods podem se comunicar entre si sem NAT.
- Os agentes de um nó possam se comunicar com todos os nós e os pods.
A configuração de um contêiner e os dados contidos nele não são persistentes entre as execuções. Depois que você exclui um contêiner, todas as informações são perdidas, a menos que sejam configuradas para usar um volume. O mesmo se aplica à configuração de rede do contêiner e a todos os endereços IP atribuídos a ele.
Uma implantação é um agrupamento lógico de pods. Ele não é considerado uma carga de trabalho física e não é atribuído a um endereço IP. Cada pod recebe automaticamente um endereço IP, que é perdido quando o pod é destruído. Esse comportamento dificulta uma 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 dos plug-ins da Interface de Rede de Contêiner (CNI).
Para simplificar a configuração de rede das cargas de trabalho de aplicativos, o Kubernetes usa 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 de round-robin para os pods. À medida que os endereços IP dos pods são alterados com o tempo, o serviço acompanha as alterações para garantir o fluxo correto do tráfego de rede para os pods.
Os aplicativos conteinerizados executados no Kubernetes precisam enviar e receber dados pela Internet. O Kubernetes dá suporte a essa comunicação por meio de componentes de entrada e saída. O controlador de entrada especifica o tráfego e as origens que 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 da CNI permitem que o Kubernetes use diferentes interfaces de rede para a rede de contêineres. Os plug-ins conectam seus pods à rede e alocam os endereços IP dos pods. Eles interagem com o Serviço de Rede de Host (HNS) do Windows 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 o Calico, o Flannel e a CNI do Azure.
ServiceTypes do Kubernetes
Para configurar o serviço desejado, você pode especificar um dos seguintes Kubernetes ServiceTypes:
- ClusterIP cria um endereço IP interno para uso dentro do cluster. Esse serviço é bom para aplicativos somente internos que dão suporte a outras cargas de trabalho no cluster. Esse é o padrão usado se você não especificar explicitamente um tipo para um serviço.
- 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ó.
- 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 de clientes alcance o aplicativo, as regras de balanceamento de carga são criadas nas portas desejadas.
Para o balanceamento de carga HTTP/S do tráfego de entrada, outra opção é usar um controlador de entrada.
- ExternalName cria uma entrada de DNS específica para facilitar o acesso ao aplicativo.
Entrada do 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. As rotas de ingress são definidas por meio de regras de ingress. Um cluster do Kubernetes rejeita todo o tráfego de entrada que não tenha essas rotas definidas.
Controlador de entrada
Um controlador de entrada é um software que fornece roteamento de tráfego configurável para os serviços do Kubernetes. Os recursos de entrada de Kubernetes são usados para configurar as regras de entrada e as rotas para os serviços de Kubernetes individuais. Ao usar 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 do Kubernetes. Depois de implementar o controlador em seu ambiente, você pode criar e implementar o manifesto de entrada. O Kubernetes usa controladores de entrada para gerenciar a configuração de entrada em um cluster e oferece vários recursos.
Regras de entrada
As regras de entrada definem a origem do tráfego e para que local ele deverá ser direcionado em um cluster. As regras de entrada são definidas em um arquivo de manifesto de implantação de entrada. Essas regras são definidas na chave de regras do arquivo de manifesto. Cada regra é um conjunto de valores que a descreve.
Anotações de entrada
Uma anotação permite que você anexe metadados que não são de identificação, como configurações de entrada para cargas de trabalho. Considere a anotação como um rótulo interno que define configurações específicas para recursos. Por exemplo, talvez você queira usar um controlador de entrada específico que dê suporte à reescrita de nome ou à limitação de conteúdo.
Políticas de rede
O Kubernetes fornece o recurso Política de Rede para controlar o fluxo de tráfego entre os pods. Você pode permitir ou negar o 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 entre os pods do Kubernetes.