Kubernetes (K8s): Guia de aprendizagem rápida

O que é Kubernetes?

Kubernetes, também abreviado como K8s, é uma plataforma de código aberto para automatizar e orquestrar a implantação, o dimensionamento e o gerenciamento de aplicativos e cargas de trabalho em contêineres. Ele fornece infraestrutura de computação com flexibilidade, escalabilidade, confiabilidade, alta disponibilidade e portabilidade integradas para aplicativos executados como contêineres em qualquer ambiente – no local, na nuvem e na borda.

O Kubernetes automatiza as tarefas mais comuns associadas ao gerenciamento de cargas de trabalho em contêineres em escala, incluindo implantação, balanceamento de carga, dimensionamento horizontal, implementações e reversões e autocorreção.

Muitas organizações já estão usando o Kubernetes em produção – seja para alguns ou a maioria de seus aplicativos – e outras estão avaliando-o. Sua popularidade fez do Kubernetes o padrão de fato para orquestração e gerenciamento de contêineres.

Benefícios do Kubernetes

A adoção do Kubernetes está crescendo rapidamente porque ele pode ajudar:

  • Acelere e simplifique o ciclo de vida do lançamento do aplicativo
  • Permita a portabilidade da carga de trabalho em ambientes de nuvem pública, privada, híbrida e multi-nuvem
  • Melhorar a eficiência da utilização de recursos
  • Facilite a obtenção de escalabilidade e prontidão para produção
  • Otimize o ambiente para atender aos SLAs de negócios

Kubernetes e microsserviços

Refatorar aplicativos monolíticos tradicionais em partes menores e mais fracamente acopladas, chamadas microsserviços, ajuda a melhorar a agilidade dos negócios porque novos recursos e atualizações de aplicativos podem ser lançados mais rapidamente e dimensionados com mais facilidade. A adoção de uma arquitetura de microsserviços nativa da nuvem gera a necessidade de evoluir a infraestrutura de computação subjacente, por isso observamos a transição de sistemas físicos e máquinas virtuais para contêineres como uma das maneiras mais eficientes de executar microsserviços.

À medida que o número de microsserviços e contêineres cresce, também aumenta a necessidade de automatizar o gerenciamento de contêineres. É aqui que o Kubernetes entra em jogo.

Kubernetes versus Docker

O Kubernetes orquestra e executa aplicativos em contêineres em escala; no entanto, ele não fornece os meios para empacotar o código do aplicativo em um formato em contêiner para distribuição e execução (uma imagem de contêiner inclui o código do aplicativo e os tempos de execução, bibliotecas e outras dependências de software necessários). Para que os pods sejam executados, o Kubernetes também exige que um tempo de execução de contêiner seja instalado em cada nó. O Kubernetes originalmente usava o Docker Engine como tempo de execução do contêiner. No entanto, a partir do Kubernetes 1.24, o tempo de execução do contêiner deve estar em conformidade com a Container Runtime Interface (CRI), o que o Docker Engine não faz. Dois ambientes de execução de contêiner populares compatíveis com CRI são CRI-O e containerd (originalmente um projeto Docker).

Para empacotar aplicativos em contêineres, você precisa de uma ferramenta como o Docker , uma das ferramentas mais populares para criar, compartilhar e executar aplicativos em contêineres. Ele simplifica e automatiza o empacotamento de aplicativos em imagens de contêineres portáteis que estão prontas para execução e implantação no local, na nuvem, inclusive em ambientes Kubernetes. Os contêineres empacotados no Docker podem ser executados nativamente nos tempos de execução containerd e CRI-O.

Arquitetura Kubernetes

Uma plataforma Kubernetes é composta de nós que são unidos em um cluster onde compartilham recursos de computação agrupados. Cada cluster gerencia pods, que são as menores unidades implantáveis na arquitetura do Kubernetes. Um pod contém um ou mais contêineres de aplicativos. Os pods são agrupados para formar um serviço. Os aplicativos dentro de um cluster Kubernetes podem ser acessados de fora usando vários métodos , sendo o controlador Ingress um dos mais populares e eficientes.

Vamos dar uma olhada mais de perto nos componentes de um ambiente Kubernetes:

Pods do Kubernetes

Um pod do Kubernetes é a menor unidade executável que pode ser implantada no Kubernetes. O pod é um “host virtual” para a imagem ou imagens do contêiner do aplicativo (como um servidor físico ou máquina virtual para aplicativos tradicionais) e encapsula um ou mais contêineres que compartilham os mesmos recursos de computação, armazenamento e rede (e, portanto, podem ser considerados acoplados de forma relativamente estreita). Os pods são implantados e executados em nós do Kubernetes.

Nós do Kubernetes

Um nó do Kubernetes é a menor unidade de uma infraestrutura de computação. O nó pode ser uma máquina virtual ou um servidor físico que aloca recursos de processador, memória, armazenamento e rede para implantar, executar, dimensionar e gerenciar pods. Os nós são unidos para formar um cluster.

Clusters do Kubernetes

Um cluster Kubernetes é um grupo de nós onde recursos de computação agrupados são compartilhados entre pods. Existem dois tipos de nós em um cluster:

  • Nós de trabalho – Execute os aplicativos em contêineres nos pods
  • Nós mestres – Execute o plano de controle do Kubernetes que orquestra e gerencia nós de trabalho e pods

Normalmente, há mais de um nó de cada tipo em um cluster Kubernetes, para alta disponibilidade e tolerância a falhas.

Implantações do Kubernetes

Uma implantação do Kubernetes descreve como executar um aplicativo como um conjunto de réplicas (ou instâncias) do pod em um cluster. Uma implantação define:

  • O número de réplicas de pod a serem executadas
  • Como implementar atualizações de pod gradualmente
  • Como reverter réplicas de pod para o estado anterior
  • Como dimensionar réplicas de pod horizontalmente

Conectividade de aplicativos no Kubernetes

O Kubernetes oferece suporte a uma pilha IPv4/IPv6 dupla para fornecer conectividade de rede para aplicativos em contêineres executados em um cluster. Tanto a comunicação de e para aplicativos no cluster Kubernetes quanto a comunicação entre serviços dentro do cluster são gerenciadas na Camada 4 (endereço IP, porta) e na Camada 7 (nome do host, identificador universal de recursos [URI]) e incluem recursos de roteamento, balanceamento de carga, segurança, monitoramento e visibilidade.

Rede Kubernetes

No modelo de rede do Kubernetes , cada pod tem um endereço IP exclusivo que é atribuído dinamicamente a partir do pool de endereços privados do cluster. Todos os pods em execução em todos os nós do mesmo cluster pertencem à mesma rede IP e podem se comunicar entre si por essa rede. Vários contêineres dentro de um pod se comunicam entre si por meio da interface de loopback.

Serviços Kubernetes

Um serviço Kubernetes torna o aplicativo ou microsserviço executado como um ou mais pods no cluster acessível (“o expõe”) na rede. Um serviço do Kubernetes representa o aplicativo como um grupo lógico de pods designados que executam a mesma função, por exemplo, serviço web. O mesmo seletor (ou rótulo) é aplicado a todos os pods em um serviço para marcar sua associação ao serviço. O Kubernetes usa o rótulo para rastrear o conjunto de pods de um serviço à medida que novos pods são implantados ou pods em execução são encerrados.

Os serviços do Kubernetes podem se comunicar entre si dentro do cluster de acordo com as políticas de conectividade definidas e podem ser acessados de fora do cluster, por exemplo, usando um controlador Ingress.

Ingresso no Kubernetes

O objeto Ingress, uma parte da API Ingress do Kubernetes, pode ser usado para expor externamente aplicativos em execução no Kubernetes por meio de protocolos da Camada 7 (camada de aplicativo), como HTTP. Gateways de entrada e controladores de entrada são ferramentas projetadas para controlar o objeto de entrada e gerenciar comunicações entre usuários e aplicativos (conectividade usuário-serviço ou norte-sul).

Por design, o objeto Ingress tem suporte limitado para políticas personalizadas de tratamento de solicitações; por exemplo, você não pode definir e anexar políticas de segurança a ele. Como resultado, muitos fornecedores usam definições de recursos personalizadas (CRDs) para expandir os recursos de seus controladores Ingress, como uma forma de satisfazer os requisitos em evolução dos clientes.

Como exemplo, o NGINX Ingress Controller define recursos personalizados (VirtualServer, VirtualServerRoute, TransportServer e Policy) para melhorar o desempenho, a resiliência, o tempo de atividade, a segurança e a observabilidade do gateway de API, do balanceador de carga e da funcionalidade Ingress na borda de um cluster Kubernetes.

O NGINX fornece serviços de balanceamento de carga, autenticação, autorização, controle de acesso, criptografia, observabilidade e divisão de tráfego (disjuntor, teste A/B e implantações azul-verde e canário) para garantir que a comunicação seja rápida, confiável e segura. Para dar suporte a lançamentos frequentes de aplicativos, os recursos personalizados do NGINX também permitem governança de autoatendimento em equipes de desenvolvimento multilocatário e DevOps.

API de gateway do Kubernetes

A Gateway API é um projeto de código aberto que visa melhorar e padronizar a rede de serviços no Kubernetes. Gerenciada pela comunidade do Kubernetes, a especificação da API Gateway evoluiu da API Ingress do Kubernetes para resolver limitações do recurso Ingress em ambientes de produção, incluindo a capacidade de definir políticas refinadas para processamento de solicitações e delegar controle sobre a configuração entre várias equipes e funções.

Saiba mais sobre a implementação da API Gateway do NGINX em 5 coisas que você precisa saber sobre o NGINX Gateway Fabric em nosso blog.

MALHA DE SERVIÇOS

Uma malha de serviços é uma camada de infraestrutura que controla as comunicações entre serviços em um cluster Kubernetes (conectividade serviço a serviço ou leste-oeste). Os casos de uso mais comuns de service mesh incluem autenticação/criptografia mTLS e observabilidade para comunicações que acontecem entre serviços em um cluster K8s.

Saiba mais sobre a entrega unificada de aplicativos com o NGINX Gateway Fabric , projetado para combinar efetivamente os casos de uso do controlador Ingress e da malha de serviço em uma única ferramenta em Anunciando o NGINX Gateway Fabric versão 1.0 em nosso blog.

Segurança do Kubernetes

A segurança do Kubernetes é uma abordagem em camadas para proteger a infraestrutura (recursos de computação locais e na nuvem, comunicações de rede e plano de gerenciamento) e aplicativos executados dentro de um cluster do Kubernetes.

Para proteger a infraestrutura, siga as recomendações gerais de segurança, tutoriais e práticas recomendadas para proteger implementações na nuvem e no local.

Para aplicativos seguros, implemente controles de segurança fortes na borda e dentro de um cluster Kubernetes para fornecer autenticação, autorização, controle de acesso, criptografia, monitoramento e visibilidade, com firewall de aplicativo web opcional e proteção contra negação de serviço, para todas as comunicações de/para e dentro de um cluster.

Leia mais sobre como proteger o Kubernetes em nosso blog Seis maneiras de proteger o Kubernetes usando ferramentas de gerenciamento de tráfego .

Kubernetes em produção

Nos primeiros dias da adoção do Kubernetes, a abordagem "faça você mesmo" (DIY) era dominante. No entanto, ela é complexa e difícil de construir e operar para muitas organizações. Por isso, para implantações de produção, as organizações estão adotando plataformas Kubernetes gerenciadas na nuvem e distribuições Kubernetes pré-empacotadas que integram vários componentes de tecnologia, simplificando o ciclo de vida da manutenção, e podem ser implantadas em ambientes híbridos e de múltiplas nuvens.

Alguns exemplos de plataformas Kubernetes gerenciadas e pré-empacotadas são mostrados abaixo:

Kubernetes gerenciado pela nuvem:

Distribuições pré-empacotadas do Kubernetes:

Como o NGINX pode ajudar

A pilha de conectividade e segurança nativa do Kubernetes da NGINX ajuda a melhorar as experiências do cliente com complexidade reduzida, maior tempo de atividade e visibilidade detalhada em tempo real em escala para aplicativos Kubernetes em execução no local, na nuvem e na borda.

Pilha de conectividade para Kubernetes – Otimize, dimensione e proteja aplicativos Kubernetes em ambientes híbridos e multi-nuvem.

  • NGINX Ingress Controller – Um gateway de API unificado, balanceador de carga e controlador Ingress que permite melhores SLAs de negócios e insights sobre a integridade e o desempenho do aplicativo em escala em ambientes Kubernetes distribuídos.
  • NGINX Gateway Fabric – Uma estrutura unificada de entrega de aplicativos que simplifica a conectividade de aplicativos, serviços e APIs em ambientes Kubernetes híbridos e multicloud.
  • NGINX App Protect – Uma solução abrangente de segurança WAF e defesa contra negação de serviço (DoS) projetada para proteger aplicativos e APIs contra ataques de Camada 7.

Comece solicitando sua avaliação gratuita de 30 dias do NGINX Ingress Controller com NGINX App Protect WAF e DoS.