Estamos iniciando uma série de postagens nas quais demonstraremos alguns dos muitos recursos do Istio Service Mesh em conjunto com o Red Hat OpenShift e o Kubernetes.

Parte Um, Hoje:
- Vamos explicar o conceito de contêineres laterais de Kubernetes e formular o leitmotiv desta série de postagens: "você não precisa alterar nada no seu código" .
- Imagine o básico das regras de roteamento do Istio. Eles constroem todos os outros recursos do Istio, pois são as regras que permitem direcionar o tráfego para microsserviços, usando arquivos YAML externos ao código de serviço para isso. Também analisamos o esquema de implantação do Canary Deployment. Bônus de Ano Novo - 10 lições interativas de Istio
A parte dois dirá a você:
- Como o Istio implementa a Ejeção de Pool em conjunto com o Disjuntor e demonstra como o Istio remove um pod quebrado ou com mau funcionamento do esquema de balanceamento.
- Também abordaremos o tópico Disjuntor da primeira postagem sobre como o Istio pode ser usado aqui. Mostramos como rotear tráfego e manipular erros de rede usando os arquivos de configuração YAML e os comandos do terminal sem a menor alteração no código de serviço.
Parte Três :
- Uma história sobre rastreamento e monitoramento já incorporados ou facilmente adicionados ao Istio. Mostraremos como usar ferramentas como Prometheus, Jaeger e Grafana em combinação com o dimensionamento do OpenShift para gerenciar facilmente sua arquitetura de microsserviço.
- Estamos passando do monitoramento e tratamento de erros para introduzi-los no sistema intencionalmente. Em outras palavras, aprendemos a fazer a injeção de falhas sem alterar o código-fonte, o que é muito importante do ponto de vista dos testes - porque se você alterar o próprio código para isso, há o risco de introduzir erros adicionais.
Por fim,
no post final no Istio Service Mesh:
- Vamos para o lado negro. Mais precisamente, aprenderemos a usar o esquema Dark Launch quando o código for implantado e testado diretamente nos dados de produção, mas não afeta a operação do sistema. É aqui que a capacidade do Istio de compartilhar tráfego é útil. E a capacidade de executar testes em dados de produção ao vivo sem afetar o desempenho do sistema de combate é a maneira mais convincente de verificá-los.
- A partir do Dark Launch, mostraremos como usar o modelo de Canary Deployment para reduzir riscos e simplificar o comissionamento de novo código. O Canary Deployment em si está longe de ser notícia, mas o Istio permite implementar esse esquema com apenas arquivos YAML simples.
- Concluindo, mostraremos como usar o Istio Egress para dar acesso a serviços para aqueles que não pertencem aos seus clusters, a fim de usar os recursos do Istio ao trabalhar com a Internet.
Então, começou ...
Ferramentas de monitoramento e controle do Istio - tudo o que você precisa para coordenar microsserviços na malha de serviço .O que é a grade de serviço do Istio
Uma grade de serviço implementa funções para um grupo de serviços, como monitoramento de tráfego, controle de acesso, descoberta, segurança, tolerância a falhas e outras coisas úteis. O Istio permite que você faça tudo isso sem a menor alteração no código dos próprios serviços. Qual é o segredo da magia? O Istio conecta a cada serviço seu proxy na forma de um sidecar-container (sidecar é um carrinho de motocicleta), após o qual todo o tráfego desse serviço passa por um proxy, que, guiado por políticas predefinidas, decide como, quando e se esse tráfego deve chegar ao serviço. O Istio também possibilita a implementação de técnicas avançadas de DevOps, como implantações de canários, disjuntores, injeção de falhas e muitas outras.
Como o Istio trabalha com contêineres e Kubernetes
A grade de serviço do Istio é uma implementação secundária de tudo o que você precisa para criar e gerenciar microsserviços: monitoramento, rastreamento, disjuntores, roteamento, balanceamento de carga, injeção de falhas, novas tentativas, tempos limite, espelhamento, controle de acesso, limites de velocidade e muito mais outro. E embora hoje existam muitas bibliotecas para implementar essas funções diretamente no código, com o Istio você pode obter a mesma coisa sem alterar nada no seu código.
De acordo com o modelo do sidecar, o Istio é executado em um contêiner Linux, localizado no mesmo pod do
Kubernetes com um serviço controlado e injeta e extrai funcionalidade e informações de acordo com uma determinada configuração. Enfatizamos que essa é sua própria configuração e reside fora do seu código. Portanto, o código se torna muito mais fácil e mais curto.
O que é mais importante, neste caso, o componente operacional dos microsserviços não está de modo algum conectado ao próprio código, o que significa que sua operação pode ser transferida com segurança para especialistas em TI. De fato, por que um desenvolvedor deve ser responsável por disjuntores e injeção de falhas? Reagir - sim, mas processá-los e criá-los? Se você remover tudo isso do código, os programadores poderão se concentrar completamente na funcionalidade do aplicativo. E o próprio código se tornará mais curto e fácil.
Grade de serviço
O Istio, que implementa funções de gerenciamento de microsserviço fora de seu código, é o conceito da grade de serviço do Service Mesh. Em outras palavras, é um grupo coordenado de um ou mais binários que formam uma rede de funções de rede.
Como o Istio trabalha com microsserviços
Aqui está como os contêineres laterais funcionam em conjunto com o
Kubernetes e o
Minishift do
ponto de
vista de um pássaro: inicie uma instância do Minishift, crie um projeto para o Istio (vamos chamá-lo de "istio-system"), instale e execute todos os componentes relacionados ao Istio. Depois, à medida que projetos e pods são criados, adicione informações de configuração às suas implantações e seus pods começam a usar o Istio. Um diagrama simplificado é assim:
Agora você pode alterar as configurações do Istio para, por exemplo, organizar a injeção de falhas, o suporte ao
Canary Deployment ou outros recursos do Istio - tudo isso sem tocar no código dos aplicativos. Suponha que você deseje redirecionar todo o tráfego da Web dos usuários do seu maior cliente (Foo Corporation) para uma nova versão do site. Para fazer isso, basta criar uma regra de roteamento do Istio que pesquisará @ foocorporation.com no ID do usuário e executará o redirecionamento apropriado. Para todos os outros usuários, nada mudará. Enquanto isso, você testará calmamente a nova versão do site. E observe que você não precisa atrair desenvolvedores para isso.
E você tem que pagar caro por isso?
Nem um pouco. O Istio funciona muito rápido, está escrito em
Go e cria uma sobrecarga muito pequena. Além disso, uma possível perda na produtividade online é compensada por um aumento na produtividade do desenvolvedor. Pelo menos na teoria: não esqueça que o tempo de desenvolvimento é caro. Quanto ao custo do software, o Istio é um software de código aberto, para que você possa obtê-lo e usá-lo gratuitamente.
Aprenda você mesmo
A Equipe de Experiência do Desenvolvedor Red Hat desenvolveu um
guia prático detalhado do Istio (em inglês). É executado no Linux, MacOS e Windows, e o código é apresentado em Java e Node.js.
10 lições interativas sobre Istio
Bloco 1 - Para Iniciantes
Introdução ao Istio30 minutos
Nós nos familiarizamos com o Service Mesh, aprendemos a instalar o Istio no cluster Kubernetes OpenShift.
ComeçarImplantando microsserviços no Istio30 minutos
Usamos o Istio para implantar três microsserviços com Spring Boot e Vert.x.
ComeçarBloco 2 - Intermediário
Monitoramento e rastreamento no Istio60 minutos
Estamos explorando as ferramentas de monitoramento, métricas personalizadas e o OpenTracing do Istio por meio do Prometheus e da Grafana.
ComeçarRoteamento Fácil no Istio60 minutos
Aprenda a gerenciar o roteamento no Istio com regras simples.
ComeçarRegras de roteamento avançadas60 minutos
Apresentando o roteamento inteligente do Istio, controle de acesso, balanceamento de carga e limitação de velocidade.
ComeçarBloco 3 - Usuário Avançado
Injeção de falha no Istio60 minutos
Estudamos cenários de failover em aplicativos distribuídos, criando erros de HTTP e atrasos na rede e aprendemos como usar a engenharia do caos para restaurar o ambiente.
ComeçarCircuit Breaker na Istio30 minutos
Instale o Siege para sites de teste de estresse e aprenda a fornecer resiliência de back-end com repetições, disjuntor e ejeção de pool.
ComeçarSaída e Istio10 minutos
Usamos as rotas de saída para criar regras para a interação de serviços internos com APIs e serviços externos.
ComeçarIstio e Kiali15 minutos
Aprendemos a usar o Kiali para obter uma imagem geral da grade de serviço e estudar o fluxo de solicitações e dados.
ComeçarTLS mútuo no Istio
15 minutos
Criamos o Istio Gateway e o VirtualService e estudamos em detalhes TLS mútuo (mTLS) e suas configurações.
ComeçarBloco 3.1 - Imersão Profunda: Malha de Serviço Istio para Microsserviços

Sobre o que o livro:
- O que é uma malha de serviço de malha de serviço.
- Sistema Istio e seu papel na arquitetura de microsserviços.
- Usando o Istio para resolver os seguintes problemas:
- Tolerância a falhas;
- Encaminhamento
- Teste de caos;
- Segurança;
- Coleta de telemetria usando rastreamento, métricas e Grafana.
Baixar livroSérie de artigos sobre redes de serviço e Istio
Experimente você mesmo
Esta série de posts não tem como objetivo fornecer uma imersão profunda no mundo do Istio. Queremos apenas apresentar o conceito em si e talvez inspirá-lo a experimentar o Istio por conta própria. Isso pode ser feito de forma totalmente gratuita, e a Red Hat fornece todas as ferramentas necessárias para começar a explorar OpenShift, Kubernetes, contêineres Linux e Istio, a saber:
Red Hat Developer OpenShift Container Platform ,
nosso guia Istio e outros recursos em nosso
micro site em Malha de serviço . Não adie, comece hoje!
Regras de roteamento do Istio: direcionamos solicitações de serviço para onde precisamos
O OpenShift e o
Kubernetes fazem um excelente trabalho de roteamento de chamadas de
microsserviço para os pods corretos. Esse é um dos objetivos do Kubernetes - roteamento e balanceamento de carga. Mas e se você precisar de roteamento mais fino e sofisticado? Por exemplo, para usar duas versões de um microsserviço ao mesmo tempo. Como as regras de rota do Istio ajudam aqui?
Regras de roteamento são regras que, de fato, determinam a escolha da rota. Em qualquer nível de complexidade do sistema, o princípio geral de operação dessas regras permanece simples: as solicitações são roteadas com base em determinados parâmetros e valores de cabeçalho HTTP.
Vejamos exemplos:
Padrão do Kubernetes: trivial "50 a 50"
Em nosso exemplo, mostraremos como usar simultaneamente duas versões do microsserviço no OpenShift, vamos chamá-las de v1 e v2. Cada versão é executada em seu próprio pod Kubernetes e, por padrão, funciona roteamento de round robin igualmente equilibrado. Cada pod recebe seu compartilhamento de solicitações pelo número de suas instâncias de microsserviço, ou seja, réplicas. O Istio também permite que você altere esse saldo manualmente.
Suponha que tenhamos implantado duas versões de nosso serviço de recomendação no OpenShift, recomendação-v1 e recomendação-v2.
Na fig. A Figura 1 mostra que, quando cada serviço é apresentado em uma instância, as solicitações são alternadas 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. A Figura 2 mostra o que acontece se você aumentar o número de réplicas de serviço da v2 de um para dois (isso é feito com o comando oc scale --replicas = 2 deployment / recomendação-v2). Como você pode ver, as solicitações entre v1 e v2 agora estão divididas em um relacionamento de um para três: 1-2-2-1-2-2-2- ...:
Ignorar versão usando o Istio
O Istio facilita a alteração da distribuição de consultas da maneira que precisamos. Por exemplo, envie todo o tráfego apenas para a recomendação-v1 usando o seguinte arquivo Istio yaml:
Aqui é necessário prestar atenção a isso: os pods são selecionados de acordo com os rótulos. No nosso exemplo, o rótulo v1 é usado. O parâmetro "weight: 100" significa que 100% do tráfego será roteado para todos os pods do serviço que possuem o rótulo v1.
Distribuição de diretório entre versões (Canary Deployment)
Além disso, usando o parâmetro weight, você pode direcionar o tráfego para os dois pods, ignorando o número de instâncias de microsserviço em execução em cada um deles. Por exemplo, aqui direcionamos 90% do tráfego para a v1 e 10% para a v2:
Roteamento separado de usuários móveis
Em conclusão, mostraremos como forçar o tráfego de usuários móveis para o serviço v2 e todo o resto para a v1. Para fazer isso, usando expressões regulares, analisamos o valor do user-agent no cabeçalho da solicitação:
Agora é a sua vez
Um exemplo com expressões regulares para analisar cabeçalhos deve motivá-lo a procurar suas próprias opções para aplicar as regras de roteamento do Istio. Além disso, as possibilidades aqui são muito amplas, pois os valores dos cabeçalhos podem ser formados no código fonte dos aplicativos.
E lembre-se que Ops, não Dev
Tudo o que mostramos nos exemplos acima é feito sem as menores alterações no código-fonte, exceto nos casos em que é necessário formar cabeçalhos de solicitação especiais. O Istio será útil tanto para desenvolvedores que, por exemplo, poderão usá-lo no estágio de teste quanto para especialistas na operação de sistemas de TI, a quem ele ajudará bastante na produção.
Então,
vamos repetir o tema desta série de postagens:
você não precisa alterar nada no seu código . Não há necessidade de coletar novas imagens ou lançar novos contêineres. Tudo isso é implementado fora do código.
Ligue a imaginação
Imagine as perspectivas da análise de cabeçalho com expressões regulares. Deseja redirecionar seu maior cliente para uma versão especial dos seus
microsserviços ? Fácil! Precisa de uma versão separada para o navegador Chrome? Não tem problema! Você pode rotear o tráfego por quase qualquer uma de suas características.
Experimente você mesmo
Ler sobre Istio, Kubernetes e OpenShift é uma coisa, mas por que não tocá-lo com suas próprias mãos? A equipe do
Programa Red Hat Developer preparou um manual detalhado (em inglês) que o ajudará a dominar rapidamente essas tecnologias. O manual também é 100% de código aberto, portanto está disponível ao público. O arquivo funciona no macOS, Linux e Windows, e o código-fonte está nas versões em Java e node.js (as versões em outros idiomas serão em breve). Basta abrir o repositório git
Red Hat Developer Demo apropriado no seu navegador.
No próximo post: resolvemos os problemas lindamente
Hoje você viu do que as regras de roteamento do Istio são capazes. Agora imagine a mesma coisa, mas apenas em relação ao tratamento de erros. É sobre isso que falaremos no próximo post.