Conceitos de rede para contêineres Kubernetes
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-proxye o tempo de execução do contêiner.
O componente kube-proxy é responsável pela conectividade local do cluster e é executado em cada nó. Ele garante que cada nó tenha 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 por si só. Um complemento de cluster DNS baseado em CoreDNS é recomendado e instalado por padrão.
Cápsulas
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 aplicação. 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 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.
Em Kubernetes:
- Serviços agrupam os pods logicamente 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 para nós de cluster.
- Segurança e filtragem do tráfego de rede para pods é possível com políticas de rede.
Redes em 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 você configure a rede de tal forma que:
- Os pods podem comunicar-se entre nós da rede sem tradução de endereços de rede (NAT).
- Nodos e pods podem comunicar-se entre si sem NAT.
- Agentes num nó podem comunicar-se com todos os nós e pods.
A configuração de um contêiner e os dados nele contidos não são persistentes entre as execuções. Depois de excluir um contêiner, todas as informações desaparecerão, a menos que estejam configuradas para usar um volume. O mesmo se aplica à configuração de rede do contêiner e a quaisquer endereços IP atribuídos a ele.
Uma implantação é um agrupamento lógico de pods. Não é considerado uma carga de trabalho física e não é atribuído um endereço IP. A cada pod é atribuído automaticamente um endereço IP, que é perdido quando o pod é destruído. Esse comportamento torna complexa 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: Services e controladores Ingress. Para usar essas opções, o Windows depende de plug-ins CNI (Container Network Interface).
Para simplificar a configuração de rede para 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 num esquema 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.
Tipos de Serviço 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 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.
- NodePort cria um mapeamento de porta no nó subjacente que permite que a aplicação seja diretamente acessada utilizando 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 dos clientes chegue ao aplicativo, regras de balanceamento de carga são criadas nas portas desejadas.
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. Você define rotas de entrada usando regras de entrada. Um cluster Kubernetes rejeita todo o tráfego de entrada sem essas rotas definidas.
Controlador de ingresso
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 usados para configurar as regras e rotas de entrada para serviços Kubernetes individuais. 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 no seu ambiente, pode então 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 de onde vem o tráfego e para onde direcioná-lo dentro de um cluster. Você define regras de entrada em um arquivo de manifesto de implantação de ingresso. 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. Você pode pensar na 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 ofereça suporte à regravação de nomes ou à limitação de carga útil.
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.