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.

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. .
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 -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 e 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:

Agora você pode alterar as configurações do Istio para, por exemplo, implementar fault injection, suporte 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 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 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.
Implantação de microsserviços no Istio
30 minutos
Usamos o Istio para implantar três microsserviços com Spring Boot e Vert.x.
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.
Roteamento simples no Istio
60 minutos
Aprendemos a gerenciar o roteamento no Istio com regras simples.
Regras avançadas de roteamento
60 minutos
Conhecendo o roteamento inteligente no Istio, gerenciamento de acesso, balanceamento de carga e limitação de taxa.
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.
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.
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.
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.
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.
Módulo 3.1 — Imersão profunda: Istio Service Mesh para microsserviços

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.
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: , e outros recursos em nosso . Não deixe para depois, comece hoje mesmo!
Regras de roteamento do Istio: direcionando solicitações de serviço para onde é necessário
e se saem muito bem ao direcionar 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:

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-…:

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:

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:

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:

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 ? Легко! Нужна отдельная версия для браузера 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 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 .
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
