Série de publicações sobre Istio Service Mesh

Iniciamos uma série de postagens em que demonstraremos algumas das muitas possibilidades da malha de serviços Istio Service Mesh em conjunto com o Red Hat OpenShift e o Kubernetes.

Série de publicações sobre Istio Service Mesh

Parte um, de hoje:

  • Explicaremos o conceito de containers sidecar do Kubernetes e formularemos o tema central desta série de postagens: «você não precisa mudar nada no seu código».
  • Apresentaremos o conceito fundamental do Istio – regras de roteamento. Elas sustentam todas as outras funcionalidades do Istio, pois é por meio dessas regras que o tráfego é direcionado aos microserviços, utilizando para isso arquivos YAML externos ao código dos serviços. Também discutiremos o esquema de implantação Canary Deployment. Bônus de Ano Novo – 10 aulas interativas sobre Istio.


Parte dois, que será lançada em breve, contará para você:

  • Como o Istio implementa Pool Ejection em conjunto com o Circuit Breaker e demonstrará como o Istio permite remover da configuração de balanceamento um pod que está inoperante ou com problemas.
  • Além disso, abordaremos o tema Circuit Breaker do primeiro post quanto à forma como o Istio pode ser utilizado aqui. Vamos mostrar como direcionar o tráfego e lidar com erros de rede sem qualquer alteração no código dos serviços, usando arquivos de configuração YAML e comandos de terminal.

Parte três:

  • Uma narrativa sobre rastreamento e monitoramento, que já estão integrados ou podem ser facilmente adicionados ao Istio. Vamos mostrar como usar ferramentas como Prometheus, Jaeger e Grafana em conjunto com a escalabilidade do OpenShift, para gerenciar a arquitetura de microserviços sem esforço adicional.
  • Passamos do monitoramento e do tratamento de erros para inseri-los na sistema de forma intencional. Em outras palavras, aprendemos a fazer fault injection sem alterar o código-fonte, o que é muito importante em termos de testes — pois se alterarmos o código para isso, há o risco de introduzir novos erros.

Finalmente, na postagem final sobre Istio Service Mesh:

  • Vamos para o Lado Sombrio. Mais especificamente, aprenderemos a usar o esquema Dark Launch, onde o código é implantado e testado diretamente em dados de produção, mas não afeta o funcionamento do sistema. Aqui, a habilidade do Istio em dividir o tráfego se torna muito útil. E a capacidade de testar em dados de produção reais sem impactar o funcionamento do sistema em produção é a maneira mais convincente de verificação.
  • Partindo do Dark Launch, mostraremos como usar o modelo Canary Deployment para reduzir riscos e simplificar a implementação de novo código. O próprio Canary Deployment não é novidade, mas o Istio permite implementar esse esquema com apenas alguns arquivos YAML simples.
  • Por fim, mostraremos como, com o Istio Egress, dar acesso a serviços para aqueles que estão fora de seus clusters, para aproveitar as capacidades do Istio ao interagir com a Internet.

Então, vamos lá…

O conjunto de ferramentas de monitoramento e gerenciamento do Istio é tudo o que você precisa para coordenar microsserviços em uma malha de serviços. service mesh.

O que é a malha de serviços Istio

A malha de serviços oferece para um grupo de serviços funções como monitoramento de tráfego, controle de acesso, descoberta, segurança, resiliência e outras utilidades. O Istio permite fazer tudo isso sem a necessidade de alterar o código dos próprios serviços. Qual é o segredo da mágica? O Istio conecta um proxy a cada serviço na forma de um contêiner sidecar, após o qual todo o tráfego para esse serviço passa pelo proxy, que, de acordo com as políticas definidas, decide como, quando e se esse tráfego deve realmente chegar ao serviço. O Istio também possibilita a implementação de técnicas avançadas de DevOps, como implantações canário, disjuntores, injeção de falhas e muitas outras.

Como o Istio funciona com contêineres e Kubernetes

A malha de serviços Istio é uma implementação sidecar de tudo o que é necessário para criar e gerenciar microsserviços: monitoramento, rastreamento, disjuntores, roteamento, balanceamento de carga, injeção de falhas, repetições, timeouts, espelhamento, controle de acesso, limitação de taxa e muito mais. E embora existam muitas bibliotecas hoje para implementar essas funções diretamente no código, com o Istio você pode obter tudo isso sem mudar nada no seu código.

De acordo com o modelo sidecar, o Istio é executado em um contêiner Linux, que está localizado em um Kubernetes-pod com o serviço controlado e injeta (inject) e extrai (extract) funcionalidade e informações de acordo com a configuração especificada. Vale a pena ressaltar, essa é a sua própria configuração, e ela vive fora do seu código. Portanto, o código se torna muito mais simples e curto.

Importante ressaltar que a parte operacional dos microserviços não está relacionada ao próprio código, o que significa que a sua execução pode ser facilmente delegada a especialistas em TI. De fato, por que um desenvolvedor deveria ser responsável por circuit breakers e fault injection? Reagir, sim, mas tratá-los e criá-los? Se tudo isso for removido do código, os programadores poderão se concentrar totalmente na funcionalidade do aplicativo. E o próprio código ficará mais curto e simples.

Malha de serviços

Istio, que implementa funções de gerenciamento de microserviços fora de seu código, é exatamente o que chamamos de conceito de malha de serviços (Service Mesh). Em outras palavras, é um grupo coordenado de um ou vários binários que formam uma rede de funções de rede.

Como o Istio funciona com microserviços

Aqui está como funciona a operação de contêineres sidecar em conjunto com Kubernetes e Minishift em uma visão geral: você inicia uma instância do Minishift, cria um projeto para o Istio (vamos chamá-lo de "istio-system"), instala e inicia todos os componentes relacionados ao Istio. Em seguida, conforme cria projetos e pods, você adiciona informações de configuração aos seus deployments, e seus pods começam a utilizar o Istio. De forma simplificada, o diagrama se parece com isso:

Série de publicações sobre Istio Service Mesh

Agora você pode alterar as configurações do Istio para, por exemplo, implementar fault injection, suporte Canary Deployment ou outras funcionalidades do Istio – e tudo isso sem tocar no código dos próprios aplicativos. Suponha que você queira redirecionar todo o tráfego da web dos usuários do seu maior cliente (Foo Corporation) para a nova versão do site. Para isso, basta criar uma regra de roteamento Istio que procure @foocorporation.com no identificador do usuário e faça o redirecionamento apropriado. Para todos os outros usuários, nada mudará. Enquanto isso, você poderá testar tranquilamente a nova versão do site. E repare, para isso não é necessário envolver os desenvolvedores.

E terá um custo elevado por isso?

De forma alguma. O Istio funciona de maneira bastante eficiente, ele é escrito em Go e cria uma sobrecarga muito pequena. Além disso, a possível perda de desempenho online é compensada pelo aumento da produtividade dos desenvolvedores. Pelo menos em teoria: não se esqueça de que o tempo dos desenvolvedores custa caro. Quanto aos custos de software, o Istio é um software de código aberto, portanto pode ser obtido e utilizado gratuitamente.

Aprenda você mesmo

A equipe Red Hat Developer Experience Team desenvolveu um curso prático aprofundado manual sobre Istio (em inglês). Funciona em Linux, MacOS e Windows, e o código está disponível nas opções Java e Node.js.

10 aulas interativas sobre Istio

Módulo 1 — Para iniciantes

Introdução ao Istio
30 minutos
Conhecendo o Service Mesh, aprendendo a instalar o Istio no cluster Kubernetes OpenShift.
Começar

Implantação de microsserviços no Istio
30 minutos
Usamos o Istio para implantar três microsserviços com Spring Boot e Vert.x.
Começar

Módulo 2 – Nível intermediário

Monitoramento e rastreamento no Istio
60 minutos
Exploramos as ferramentas de monitoramento integradas do Istio, métricas configuráveis e OpenTracing através do Prometheus e Grafana.
Começar

Roteamento simples no Istio
60 minutos
Aprendemos a gerenciar o roteamento no Istio com regras simples.
Começar

Regras avançadas de roteamento
60 minutos
Conhecendo o roteamento inteligente no Istio, gerenciamento de acesso, balanceamento de carga e limitação de taxa.
Começar

Módulo 3 – Usuário experiente

Injeção de falhas no Istio
60 minutos
Exploramos os cenários de tratamento de falhas em aplicações distribuídas, criando erros HTTP e atrasos de rede, e aprendemos a aplicar engenharia de caos para restaurar o ambiente.
Começar

Circuit Breaker no Istio
30 minutos
Instalamos o Siege para testes de estresse em sites e aprendemos a garantir a resiliência do backend com reintentos, circuit breaker e rejeição de pool.
Começar

Egress e Istio
10 minutos
Usamos rotas de Egress para criar regras de interação entre serviços internos e APIs e serviços externos.
Começar

Istio e Kiali
15 minutos
Aprendemos a usar o Kiali para obter uma visão geral da rede de serviços e estudar os fluxos de solicitações e dados.
Começar

Mutual TLS no Istio
15 minutos
Criamos um Gateway do Istio e um VirtualService, em seguida, estudamos detalhadamente o mutual TLS (mTLS) e suas configurações.
Começar

Módulo 3.1 — Imersão profunda: Istio Service Mesh para microsserviços

Série de publicações sobre Istio Service Mesh
Sobre o que é o livro:

  • O que é uma rede de serviços service mesh.
  • O sistema Istio e seu papel na arquitetura de microsserviços.
  • Uso do Istio ao resolver as seguintes tarefas:
    • Alta disponibilidade;
    • Roteamento;
    • Testes de caos;
    • Segurança;
    • Coleta de telemetria por meio de rastreamento, métricas e Grafana.

Baixar livro

Série de artigos sobre redes de serviços e Istio

Experimente por conta própria

Esta série de posts não tem o objetivo de proporcionar uma imersão profunda no mundo do Istio. Queremos apenas apresentar a você o conceito e, talvez, inspirá-lo a experimentar o Istio por conta própria. Você pode fazer isso totalmente gratuito, e a Red Hat oferece todas as ferramentas necessárias para começar a dominar o OpenShift, Kubernetes, contêineres Linux e Istio, a saber: Red Hat Developer OpenShift Container Platform, nosso guia sobre Istio e outros recursos em nosso micro site sobre Service Mesh. Não deixe para depois, comece hoje mesmo!

Regras de roteamento do Istio: direcionando solicitações de serviço para onde é necessário

OpenShift e Kubernetes se saem muito bem ao direcionar micro serviços para os pods corretos. Essa é uma das principais finalidades do Kubernetes – roteamento e balanceamento de carga. E se você precisar de um roteamento mais sutil e sofisticado? Por exemplo, para usar simultaneamente duas versões de um micro serviço. Como as regras de roteamento do Istio podem ajudar aqui?

Regras de roteamento – são regras que, de fato, determinam a escolha da rota. Independentemente do nível de complexidade do sistema, o princípio geral de funcionamento dessas regras permanece simples: as solicitações são roteadas com base em determinados parâmetros e valores de cabeçalhos HTTP.
Vamos ver alguns exemplos:

Kubernetes padrão: trivial "50 a 50"

No nosso exemplo, mostraremos como usar simultaneamente duas versões de um micro serviço no OpenShift, chamaremos de v1 e v2. Cada versão roda em seu próprio pod do Kubernetes, e por padrão, aqui funciona um roteamento ciclo balanceado uniformemente (evenly balanced round robin routing). Cada pod recebe sua parte de solicitações conforme o número de seus instâncias de micro serviço, ou seja, réplicas. O Istio permite que você altere esse equilíbrio manualmente.

Suponha que tenhamos implementado no OpenShift duas versões de nosso serviço de recomendação, recommendation-v1 e recommendation-v2.
Na Fig. 1, podemos ver que, quando cada serviço é representado por uma instância, as solicitações alternam igualmente entre eles: 1-2-1-2-… É assim que o roteamento do Kubernetes funciona por padrão:

Série de publicações sobre Istio Service Mesh

Distribuição ponderada entre versões

Na Fig. 2, vemos o que acontece quando aumentamos o número de réplicas do serviço v2 de uma para duas (isso é feito com o comando oc scale —replicas=2 deployment/recommendation-v2). Como podemos observar, as solicitações entre v1 e v2 agora são divididas na proporção de 'um para três': 1-2-2-1-2-2-…:

Série de publicações sobre Istio Service Mesh

Ignorar versões com Istio

O Istio permite alterar facilmente a distribuição das solicitações da maneira que precisamos. Por exemplo, enviar todo o tráfego apenas para recommendation-v1 com o seguinte arquivo yaml do Istio:

Série de publicações sobre Istio Service Mesh

Aqui, é importante notar o seguinte: os pods são selecionados de acordo com as etiquetas. Em nosso exemplo, usamos a etiqueta v1. O parâmetro 'weight: 100' indica que 100% do tráfego será roteado para todos os pods do serviço que possuem a etiqueta v1.

Distribuição diretiva entre versões (Canary Deployment)

A seguir, usando o parâmetro weight, podemos direcionar o tráfego para ambos os pods, ignorando o número de instâncias dos microsserviços em execução em cada um deles. Por exemplo, aqui estamos direcionando 90% do tráfego para v1 e 10% para v2:

Série de publicações sobre Istio Service Mesh

Roteamento separado para usuários móveis

Para concluir, vamos mostrar como forçar o roteamento do tráfego dos usuários móveis para o serviço v2, enquanto todos os outros são direcionados para v1. Para isso, analisamos o valor do user-agent no cabeçalho da solicitação usando expressões regulares:

Série de publicações sobre Istio Service Mesh

Agora é sua vez

O exemplo com expressões regulares para analisar cabeçalhos deve motivá-lo a buscar suas próprias opções de aplicação das regras de roteamento do Istio. Afinal, as possibilidades aqui são bastante amplas, pois os valores dos cabeçalhos podem ser formados no código-fonte das aplicações.

E lembre-se, Ops, não Dev

Tudo o que mostramos nos exemplos acima pode ser feito sem a menor alteração no código-fonte, exceto nos casos em que é necessário formar cabeçalhos de solicitação especiais. O Istio pode ser útil tanto para desenvolvedores, que, por exemplo, podem usá-lo na fase de teste, quanto para profissionais de operações de TI, que se beneficiarão enormemente em produção.

Então, vamos repetir o leitmotiv desta série de posts: você não precisa mudar nada em seu código. Não é necessário criar novas imagens ou iniciar novos contêineres. Tudo isso é implementado fora do código.

Deixe sua imaginação fluir

Imagine as possibilidades que a análise de títulos com expressões regulares pode abrir. Quer redirecionar seu maior cliente para uma versão especial do seu microsserviços? Легко! Нужна отдельная версия для браузера Chrome? Не проблема! Вы можете маршрутизировать трафик практически по любой его характеристике.

Experimente por conta própria

Ler sobre Istio, Kubernetes e OpenShift é uma coisa, mas por que não experimentar tudo com suas próprias mãos? A equipe Red Hat Developer Program preparou um guia detalhado (em inglês) que o ajudará a dominar rapidamente essas tecnologias. O guia também é 100% open source, por isso está disponível publicamente. O arquivo funciona no macOS, Linux e Windows, e o código-fonte está disponível em versões em Java e node.js (em breve haverá versões em outras linguagens). Basta abrir no seu navegador o repositório git correspondente Red Hat Developer Demo.

No próximo post: resolvendo problemas de forma elegante

Hoje você viu do que são capazes as regras de roteamento do Istio. Agora imagine tudo isso, mas aplicável ao tratamento de erros. É sobre isso que falaremos no próximo post.

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster