Ative o Oracle Cloud Infrastructure Service Mesh em seus aplicativos Kubernetes

Os clientes da Oracle Cloud Infrastructure (OCI) migraram cada vez mais para uma arquitetura de microsserviços que, juntamente com seus benefícios, também traz novos desafios. Em uma arquitetura de microsserviços, os aplicativos monolíticos são divididos em microsserviços menores que se comunicam pela rede usando uma API. Isso causa uma onda de tráfego de rede e aumenta a complexidade e a superfície de ataque geral na arquitetura.

A adição de uma malha de serviços aos microsserviços alivia muitos dos desafios introduzidos com uma arquitetura de microsserviços e fornece os seguintes benefícios:
  • Permite controlar o fluxo de tráfego de microsserviços.
  • Fornece visibilidade de seus aplicativos.
  • Permite que os microsserviços se conectem com segurança sem qualquer alteração no código do aplicativo.
Com o OCI Service Mesh, você pode implantar uma arquitetura de malha de serviço gerenciada em seus clusters do Oracle Cloud Infrastructure Kubernetes Engine (OCI Kubernetes Engine ou OKE). Essa arquitetura de referência fornece um exemplo detalhado de uma arquitetura da Malha de Serviços do OCI implantada em um cluster do OKE.

Recursos da Malha de Serviços do OCI

Segurança
  • Aplicação de políticas relacionadas a segurança

    A Malha de Serviços do OCI usa políticas de acesso para definir regras de acesso. As políticas de acesso impõem a comunicação entre microsserviços e permitem apenas solicitações validadas originadas dentro e fora do aplicativo. As políticas de acesso também são usadas para definir a comunicação permitida a serviços externos.

  • Confiança Zero

    O OCI Service Mesh implementa automaticamente uma arquitetura de segurança de confiança zero em todos os microsserviços. Os dados entre microsserviços são criptografados. A identificação de microsserviço para microsserviço é necessária no início da comunicação. As duas partes devem trocar credenciais com suas informações de identidade. Isso permite que os serviços se identifiquem para determinar se estão autorizados a interagir. Isso é implementado com TLS mútuo com certificado automatizado e rotação de chaves usando o serviço Oracle Cloud Infrastructure Certificates (OCI Certificates) e o Oracle Key Management Cloud Service para gerenciar certificados e chaves.

Gerenciamento de Tráfego
  • Mudança de tráfego

    O OCI Service Mesh permite que você faça implantações canárias. Quando você publica uma nova versão do seu código em produção, só permite que uma parte do tráfego o alcance. O recurso permite que você implante rapidamente e causa o menor distúrbio em seu aplicativo. Você pode definir regras de roteamento que regem toda a comunicação entre microsserviços dentro da malha. Você pode rotear uma parte do tráfego para uma determinada versão do serviço.

Observabilidade
  • Monitoramento e Log

    A Malha de Serviços da OCI está posicionada exclusivamente para fornecer informações de telemetria, pois toda comunicação entre microsserviços deve passar por ela. Isso permite que a malha de serviços capture dados de telemetria, como origem, destino, protocolo, URL, duração, código de status, latência, registro em log e outras estatísticas detalhadas. Você pode exportar informações de log para o serviço Oracle Cloud Infrastructure Logging (OCI Logging). A Malha de Serviços do OCI fornece dois tipos de logs: logs de erro e logs de tráfego. Você pode usar esses logs para depurar problemas 404 ou 505 ou gerar estatísticas baseadas em log. Métricas e dados de telemetria podem ser exportados para o Prometheus e visualizados com o Grafana. Ambos podem ser implantados diretamente em um cluster do OKE.

Arquitetura

A Malha de Serviços do Oracle Cloud Infrastructure (Malha de Serviços do OCI) usa um modelo sidecar. Essa arquitetura encapsula o código que implementa a funcionalidade de rede em um proxy de rede e, em seguida, depende do tráfego de e para os serviços a serem redirecionados para o proxy sidecar. É chamado de sidecar porque um proxy é anexado a cada aplicação, muito parecido com um sidecar anexado a uma moto. No OKE, o contêiner de aplicativos fica ao lado do contêiner sidecar proxy no mesmo pod. Como eles estão no mesmo pod, eles compartilham o mesmo namespace de rede e endereço IP, permitindo que os contêineres se comuniquem via "localhost".

A Malha de Serviços do OCI tem os dois componentes principais a seguir:
  • Plano de controle

    O plano de controle da Malha de Serviços do OCI gerencia e configura toda a coleção de proxies para rotear o tráfego. Ele lida com encaminhamento, verificação de integridade, balanceamento de carga, autenticação, autorização e agregação de telemetria. O plano de controle interage com o serviço de certificado do OCI e o serviço de gerenciamento de chaves do OCI para fornecer a cada proxy seu certificado.

  • Plano de dados

    O plano de dados é composto pela coleta de proxies sidecar implantados no ambiente e é responsável pela segurança, funções de rede e observabilidade do aplicativo. Eles também coletam e relatam telemetria em todo o tráfego de malha. O proxy Envoy é usado para o plano de dados do OCI Service Mesh.

O diagrama a seguir ilustra essa arquitetura de referência.



oci_service_mesh_oke_arch-oracle.zip

Essa arquitetura de referência mostra um aplicativo implantado em um cluster do OKE com três serviços. O namespace no qual o aplicativo é implantado foi "meshificado". Um namespace "meshificado" indica que os serviços implantados dentro do namespace farão parte de uma malha de serviços, e cada novo pod implantado será injetado com um contêiner de proxy do enviado. À medida que cada pod é implantado, as configurações e os certificados são enviados para cada um dos contêineres de proxy pelo plano de controle da Malha de Serviços do OCI. O plano de controle da Malha de Serviços do OCI se comunica com o serviço OCI Certificates e o Oracle Key Management Cloud Service para obter certificados para cada proxy.

Um gateway de entrada é implantado para fornecer acesso externo ao aplicativo. O gateway de entrada faz parte do plano de dados da Malha de Serviços do OCI e também é um proxy enviado que recebe configuração e certificados do plano de controle da Malha de Serviços do OCI.

É responsabilidade do contêiner proxy executar descoberta de serviço, criptografia de tráfego e autenticação com o serviço de destino. Os contêineres proxy também aplicam políticas de rede, como como o tráfego é distribuído entre diferentes versões de serviço e impõem políticas de acesso. O gateway de entrada executa a mesma função para tráfego fora da malha de serviços.

Prometheus e Grafana são implantados no cluster do OKE em um namespace separado que não faz parte da malha de serviços. O plano de dados da malha de serviços envia estatísticas operacionais importantes, como latência, falhas, solicitações e telemetria para a implantação do Prometheus. O Grafana extrai dados da implantação do Prometheus, que pode ser usada para criar painéis de controle para visualização.

A Malha de Serviços do OCI é integrada ao serviço OCI Logging e o registro em log pode ser ativado quando a malha de serviços é criada. A Malha de Serviços do OCI fornece dois tipos de logs: logs de erro e logs de tráfego. Esses logs podem ser usados para depurar problemas 404 ou 505 ou gerar estatísticas baseadas em log.

Essa arquitetura tem os seguintes Serviços do OCI:

  • OCI Kubernetes Engine (OKE)

    Fornece um cluster Kubernetes altamente disponível e escalável pronto para produção para implementar seus aplicativos em contêineres na nuvem.

  • Balanceador de Carga

    Fornece acesso ao gateway de entrada no cluster do OKE. A entrada direciona o tráfego para os serviços solicitados no cluster do OKE.

  • Autoridade de Certificação

    Gerencia os certificados TLS para o serviço OCI Service Mesh.

  • Key Management

    Gerencia as chaves usadas pelo serviço de Autoridade de Certificação.

A arquitetura tem os seguintes componentes:

  • Região

    Região do Oracle Cloud Infrastructure é uma área geográfica localizada que contém um ou mais data centers, denominada domínios de disponibilidade. As regiões são independentes de outras regiões, e grandes distâncias podem separá-las (entre países ou até mesmo continentes).

  • Rede virtual na nuvem (VCN) e sub-redes

    Uma VCN é uma rede personalizável definida por software que você configura em uma região do Oracle Cloud Infrastructure. Como as redes tradicionais de data center, as VCNs oferecem controle sobre seu ambiente de rede. Uma VCN pode ter vários blocos CIDR não sobrepostos que você pode alterar após a criação da VCN. Você pode segmentar uma VCN em sub-redes, com escopo definido para uma região ou para um domínio de disponibilidade. Cada sub-rede consiste em um intervalo contíguo de endereços que não se sobrepõem a outras sub-redes da VCN. Você pode alterar o tamanho de uma sub-rede após a criação. Uma sub-rede pode ser pública ou privada.

  • Lista de segurança

    Para cada sub-rede, você pode criar regras de segurança que especifiquem a origem, o destino e o tipo de tráfego que deve ser permitido dentro e fora da sub-rede.

Recursos da Malha de Serviços do OCI

Ao configurar a Malha de Serviços do OCI implantada em um cluster do OKE, vários recursos do Kubernetes são definidos que mapeiam para os principais componentes do seu aplicativo.

O diagrama a seguir descreve como os recursos configurados da Malha de Serviços do OCI: Políticas de Acesso, Gateway de Entrada, Serviço Virtual e Implantação Virtual são mapeados para os recursos do aplicativo: K8s Service, K8s Service Load Balancer, Implantações e Pods.


Veja a seguir a descrição da ilustração oci_service_mesh_oke_config.png
Descrição da ilustração oci_service_mesh_oke_config.png

Recomendações

Use as recomendações a seguir como ponto de partida. Seus requisitos podem ser diferentes da arquitetura descrita aqui.
  • VCN

    Ao criar uma VCN, determine o número de blocos CIDR necessários e o tamanho de cada bloco com base no número de recursos que você planeja anexar a sub-redes na VCN. Use blocos CIDR que estejam dentro do espaço de endereço IP privado padrão.

    Selecione blocos CIDR que não se sobreponham a nenhuma outra rede (no Oracle Cloud Infrastructure, em seu data center local ou em outro provedor de nuvem) para a qual você pretende configurar conexões privadas.

    Depois de criar uma VCN, você poderá alterar, adicionar e remover seus blocos CIDR.

    Ao projetar as sub-redes, considere seus requisitos de fluxo de tráfego e segurança. Anexe todos os recursos dentro de uma camada ou atribuição específica à mesma sub-rede, que pode servir como um limite de segurança.

  • Largura de banda do balanceador de carga

    Ao criar o balanceador de carga, você pode selecionar uma forma predefinida que forneça uma largura de banda fixa ou especificar uma forma personalizada (flexível), na qual você define uma faixa de largura de banda e permite que o serviço dimensione a largura de banda automaticamente com base nos padrões de tráfego. Com qualquer uma das abordagens, você pode alterar a forma a qualquer momento após criar o balanceador de carga.

Considerações

Considere as opções a seguir ao implantar essa arquitetura de referência.

  • Custo

    Não há cobrança pelo plano de controle da Malha de Serviços do OCI no cluster do OKE. Os clientes são cobrados pela utilização de recursos dos contêineres de proxy para o plano de dados da Malha de Serviços. Na prática, no entanto, os clientes já estão pagando pelos recursos do pool de nós em um cluster do OKE e, a menos que a utilização dos contêineres de proxy impulsione a utilização do pool de nós em mais de 100%, não há cobrança adicional para adicionar o OCI Service Mesh à sua arquitetura de microsserviços.

  • Disponibilidade

    O plano de controle da Malha de Serviços do OCI é sempre implantado com alta disponibilidade.

Reconhecimentos

  • Author: Chiping Hwang
  • Contributors: Dusko Vukmanovic, Anupama Pundpal