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 aplicações e cargas de trabalho em contêineres. Ele fornece uma infraestrutura de computação com flexibilidade, escalabilidade, confiabilidade, alta disponibilidade e portabilidade integradas para aplicações executadas como contêineres em qualquer ambiente — localmente, na nuvem e na borda.

O que é Kubernetes?

O Kubernetes automatiza as tarefas mais comuns associadas ao gerenciamento de cargas de trabalho em contêineres em grande escala, incluindo implantação, balanceamento de carga, escalonamento horizontal, lançamentos e reversões, além de autorrecuperação.

Muitas organizações já estão usando o Kubernetes em produção — seja em alguns de seus aplicativos ou na maioria deles —, enquanto outras estão avaliando sua adoção. Sua popularidade tornou o Kubernetes o padrão de fato para a orquestração e o gerenciamento de contêineres.

Benefícios do Kubernetes

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

  • Acelerar e simplificar o ciclo de vida de lançamento de aplicações
  • Permita a portabilidade de cargas de trabalho entre ambientes de nuvem pública, privada e híbrida, bem como ambientes multinuvem
  • Melhore a eficiência da utilização de recursos
  • Facilitar 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

A refatoração de aplicações monolíticas tradicionais em partes menores e fracamente acopladas, chamadas de microsserviços ajuda a aumentar a agilidade dos negócios, pois novos recursos e atualizações das aplicações podem ser lançados mais rapidamente e escalados com mais facilidade. A adoção de uma arquitetura de microsserviços nativa da nuvem exige a evolução da infraestrutura computacional subjacente. Por isso, observamos a transição de sistemas físicos e máquinas virtuais para contêineres como uma das formas mais eficientes de executar microsserviços.

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

O que é Kubernetes?

O 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 aplicações e cargas de trabalho em contêineres. Ele fornece uma infraestrutura computacional com flexibilidade, escalabilidade, confiabilidade, alta disponibilidade e portabilidade integradas para aplicações executadas como contêineres em qualquer ambiente — localmente, na nuvem e na borda.

O Kubernetes automatiza as tarefas mais comuns associadas ao gerenciamento de cargas de trabalho conteinerizadas em escala, incluindo implantação, balanceamento de carga, escalabilidade horizontal, lançamentos e reversões, além de autorrecuperação.

Muitas organizações já usam o Kubernetes em produção — seja em alguns ou na maioria de seus aplicativos —, enquanto outras estão avaliando sua adoção. Sua popularidade tornou o Kubernetes o padrão de fato para a orquestração e o gerenciamento de contêineres.

Benefícios do Kubernetes

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

  • Acelerar e simplificar o ciclo de vida de lançamento de aplicações
  • Permita a portabilidade de cargas de trabalho entre ambientes de nuvem pública, privada e híbrida, bem como ambientes multinuvem
  • Melhorar a eficiência da utilização de recursos
  • Facilitar 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

A refatoração de aplicações monolíticas tradicionais em partes menores e com baixo acoplamento, chamadas de microsserviços (https://www.f5.com/glossary/microservices-architecture), ajuda a aumentar a agilidade dos negócios, pois permite lançar novos recursos e atualizações das aplicações com mais rapidez e escalá-los com mais facilidade. A adoção de uma arquitetura de microsserviços nativa da nuvem exige a evolução da infraestrutura computacional subjacente. Por isso, observamos a transição de sistemas físicos e máquinas virtuais para contêineres como uma das formas mais eficientes de executar microsserviços.

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

Kubernetes versus Docker

O Kubernetes orquestra e executa aplicações em contêineres em grande escala; no entanto, ele não oferece os recursos necessários para empacotar o código da aplicação em um formato conteinerizado para distribuição e execução (uma imagem de contêiner inclui o código da aplicação e os runtimes, as bibliotecas e outras dependências de software necessárias). Para que os pods sejam executados, o Kubernetes também exige que um runtime de contêiner seja instalado em cada nó. Originalmente, o Kubernetes usava o Docker Engine como runtime de contêiner. No entanto, desde o Kubernetes 1.24, o runtime de contêiner deve ser compatível com a Container Runtime Interface (CRI), o que não é o caso do Docker Engine. Dois runtimes de contêiner populares compatíveis com a CRI são o CRI-O e o containerd (originalmente um projeto do 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. Ela simplifica e automatiza o empacotamento de aplicativos em imagens de contêiner portáteis, prontas para execução e implantação em ambientes locais ou na nuvem, inclusive em ambientes Kubernetes. Os contêineres empacotados com o Docker podem ser executados nativamente nos runtimes containerd e CRI-O.

Arquitetura do Kubernetes

Uma plataforma Kubernetes é composta por nós interligados em um cluster, no qual compartilham um conjunto de recursos computacionais. 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 aplicações. Os pods são agrupados para formar um serviço. As aplicações dentro de um cluster Kubernetes podem ser acessadas externamente por meio de vários métodos, sendo o controlador Ingress um dos mais populares e eficientes.

cluster Kubernetes

Vamos analisar mais detalhadamente os 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 uma ou mais imagens de contêiner do aplicativo (como um servidor físico ou uma 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 relativamente integrados). 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 computacional. O nó pode ser uma máquina virtual ou um servidor físico que aloca recursos de processamento, memória, armazenamento e rede para implantar, executar, dimensionar e gerenciar pods. Os nós são interligados para formar um cluster.

Clusters do Kubernetes

Um cluster Kubernetes é um grupo de nós no qual recursos computacionais agrupados são compartilhados entre pods. Há dois tipos de nós em um cluster:

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

Normalmente, há mais de um nó de cada tipo em um cluster Kubernetes, para garantir 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 do pod a serem executadas
  • Como implantar atualizações de pods gradualmente
  • Como reverter as réplicas de pods ao estado anterior
  • Como escalar horizontalmente as réplicas de pods

Conectividade de aplicações no Kubernetes

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

controlador de Ingress do Kubernetes

Rede de Kubernetes

No modelo de rede do Kubernetes, cada pod tem um endereço IP exclusivo, 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 do Kubernetes

Um serviço do Kubernetes torna o aplicativo ou microsserviço executado como um ou mais pods no cluster acessível na rede (“expõe o aplicativo”). Um serviço do Kubernetes representa o aplicativo como um grupo lógico de pods designados que desempenham a mesma função, como servir conteúdo web. O mesmo seletor (ou rótulo) é aplicado a todos os pods de um serviço para indicar que pertencem a ele. O Kubernetes usa o rótulo para acompanhar 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 disponibilizados para acesso externo ao cluster, por exemplo, por meio de um controlador Ingress.

Ingress do Kubernetes

O objeto Ingress, que faz parte da API Kubernetes Ingress, pode ser usado para expor externamente aplicações executadas no Kubernetes por meio de protocolos da Camada 7 (camada de aplicação), como HTTP. Os gateways de Ingress e os controladores de Ingress são ferramentas projetadas para controlar o objeto Ingress e gerenciar a comunicação entre usuários e aplicações (conectividade entre usuário e serviço ou norte-sul).

Por definição, o objeto Ingress oferece suporte limitado a políticas personalizadas de tratamento de solicitações. Por exemplo, não é possível definir e associar políticas de segurança a ele. Por isso, muitos fornecedores usam definições de recursos personalizados (CRDs) para ampliar os recursos de seus controladores de Ingress e, assim, atender às necessidades em constante evolução dos clientes.

Por exemplo, o NGINX Ingress Controller define recursos personalizados (VirtualServer, VirtualServerRoute, TransportServer e Policy) para aprimorar o desempenho, a resiliência, a disponibilidade, a segurança e a observabilidade das funcionalidades de gateway de API, balanceador de carga e Ingress na borda de um cluster do 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 (circuit breaker, testes A/B e implantações blue-green e canário) para garantir uma comunicação rápida, confiável e segura. Para dar suporte a lançamentos frequentes de aplicações, os recursos personalizados do NGINX também permitem a governança por autoatendimento entre equipes de desenvolvimento e DevOps em ambientes multilocatários.

API Gateway do Kubernetes

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

Saiba mais sobre a implementação da Gateway API pela 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 a comunicação entre serviços em um cluster Kubernetes (conectividade serviço a serviço ou leste-oeste). Os casos de uso mais comuns de uma malha de serviços incluem autenticação/criptografia mTLS e observabilidade das comunicações entre serviços em um cluster K8s.

Saiba mais sobre a entrega unificada de aplicações com o NGINX Gateway Fabric, desenvolvido para combinar de forma eficaz os casos de uso de controlador de Ingress e service mesh em uma única ferramenta, no artigo Anúncio do NGINX Gateway Fabric versão 1.0 em nosso blog.

Segurança do Kubernetes

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 os aplicativos executados em um cluster do Kubernetes.

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

Para garantir a segurança das aplicações, implemente controles de segurança robustos na borda e dentro de um cluster Kubernetes para fornecer autenticação, autorização, controle de acesso, criptografia, monitoramento e visibilidade, com firewall de aplicações web e proteção contra negação de serviço opcionais, para todas as comunicações de entrada, de saída e internas do cluster.

segurança do Kubernetes

Saiba 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 anos de adoção do Kubernetes, predominava uma abordagem do tipo “faça você mesmo” (DIY). No entanto, para muitas organizações, essa abordagem é complexa e difícil de implementar e operar. Por isso, em implantações de produção, as organizações estão adotando plataformas Kubernetes gerenciadas na nuvem e distribuições Kubernetes pré-configuradas que integram diversos componentes tecnológicos, simplificam o ciclo de vida da manutenção e podem ser implantadas em ambientes híbridos e multinuvem.

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

Kubernetes gerenciado na nuvem:

Distribuições Kubernetes pré-empacotadas:

Como o NGINX pode ajudar

A pilha de conectividade e segurança nativa do Kubernetes da NGINX ajuda a aprimorar a experiência dos clientes, reduzindo a complexidade, aumentando a disponibilidade e oferecendo visibilidade detalhada em tempo real e em escala para aplicações Kubernetes executadas em ambientes locais, na nuvem e na borda.

Stack de conectividade para Kubernetes – Otimize, escale e proteja aplicações Kubernetes em ambientes híbridos e multicloud.

  • NGINX Ingress Controller – Um gateway de API, balanceador de carga e controlador de Ingress unificados que possibilitam melhores SLAs de negócios e insights sobre a integridade e o desempenho das aplicações em escala em ambientes Kubernetes distribuídos.
  • NGINX Gateway Fabric – Uma malha unificada de entrega de aplicações que simplifica a conectividade de aplicações, serviços e APIs em ambientes Kubernetes híbridos e multinuvem.
  • NGINX App Protect – Uma solução abrangente de segurança WAF e defesa contra ataques de negação de serviço (DoS), desenvolvida para proteger aplicativos e APIs contra ataques à camada 7.

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