Uma série de postagens no Istio Service Mesh

Estamos iniciando uma série de postagens mostrando alguns dos muitos recursos do Istio Service Mesh quando combinado com Red Hat OpenShift e Kubernetes.

Uma série de postagens no Istio Service Mesh

Primeira parte, hoje:

  • Vamos explicar o conceito de contêineres sidecar do Kubernetes e formular o leitmotiv desta série de postagens: "você não precisa alterar nada no seu código".
  • Vamos apresentar o fundamental do Istio: regras de roteamento. Todos os outros recursos do Istio são construídos sobre eles, pois são as regras que permitem direcionar o tráfego para microsserviços, usando arquivos YAML externos ao código do serviço. Também estamos considerando o esquema de implantação Canary Deployment. Bônus de Ano Novo – 10 aulas interativas no Istio


A segunda parte, em breve, dirá a você:

  • Como o Istio implementa Pool Ejection em combinação com o Circuit Breaker e demonstrará como o Istio permite remover um pod morto ou com baixo desempenho do circuito de balanceamento.
  • Também veremos o tópico Circuit Breaker da primeira postagem para ver como o Istio pode ser usado aqui. Mostraremos como rotear o tráfego e lidar com erros de rede usando arquivos de configuração YAML e comandos de terminal sem a menor alteração no código de serviço.

Parte TRÊS:

  • Uma história sobre rastreamento e monitoramento, que já estão integrados ou são facilmente adicionados ao Istio. Mostraremos como usar ferramentas como Prometheus, Jaeger e Grafana em combinação com o escalonamento OpenShift para gerenciar arquiteturas de microsserviços sem esforço.
  • Passamos do monitoramento e tratamento de erros para sua introdução intencional no sistema. Em outras palavras, aprendemos como fazer injeção de falhas sem alterar o código-fonte, o que é muito importante do ponto de vista de teste - pois se você alterar o próprio código para isso, existe o risco de introduzir erros adicionais.

Por fim, na postagem final sobre Istio Service Mesh:

  • Vamos para o Lado Negro. Mais precisamente, aprenderemos a usar o esquema Dark Launch, quando o código é implantado e testado diretamente nos dados de produção, mas não afeta de forma alguma o funcionamento do sistema. É aqui que a capacidade do Istio de dividir o tráfego se torna útil. E a capacidade de testar dados de produção ao vivo sem afetar de forma alguma a operação do sistema de combate é o método de verificação mais convincente.
  • Com base no Dark Launch, mostraremos como usar o modelo Canary Deployment para reduzir riscos e facilitar a colocação de novo código em produção. O Canary Deployment em si está longe de ser novo, mas o Istio permite implementar esse esquema apenas com arquivos YAML simples.
  • Por fim, mostraremos como usar o Istio Egress para dar acesso a serviços para quem está fora de seus clusters, a fim de utilizar os recursos do Istio ao trabalhar com a Internet.

Aqui vamos nos...

Ferramentas de monitoramento e gerenciamento do Istio: tudo o que você precisa para orquestrar microsserviços em uma malha de serviço malha de serviço.

O que é malha de serviço do Istio

Uma malha de serviço implementa funções como monitoramento de tráfego, controle de acesso, descoberta, segurança, tolerância a falhas e outras coisas úteis para um grupo de serviços. 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 atribui seu próprio proxy a cada serviço na forma de um contêiner sidecar (sidecar é um sidecar de motocicleta), após o qual todo o tráfego para esse serviço passa pelo proxy, que, guiado por políticas específicas, decide como, quando e se esse tráfego deveria 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ço do Istio é uma implementação secundária de tudo o que é necessário 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, limitação de taxa e muito mais. E embora hoje existam inúmeras bibliotecas para implementar essas funções diretamente no código, com o Istio você pode obter todas as mesmas coisas sem alterar nada no seu código.

De acordo com o modelo sidecar, o Istio é executado em um contêiner Linux, localizado em um Kubernetes-pod com serviço controlado e injeta e extrai funcionalidades e informações de acordo com a configuração fornecida. Enfatizamos que esta é sua própria configuração e reside fora do seu código. Portanto, o código se torna muito mais simples e curto.

O que também é importante é que a componente operacional dos microsserviços não está de forma alguma ligada ao código em si, o que significa que a sua operação pode ser transferida com segurança para especialistas em TI. Na verdade, por que o desenvolvedor deveria ser responsável pelos disjuntores e pela injeção de faltas? Reagir, sim, mas processá-los e criá-los? Se você remover tudo isso do código, os programadores poderão se concentrar totalmente na funcionalidade do aplicativo. E o código em si ficará mais curto e simples.

Malha de serviço

Istio, que implementa funções para gerenciamento de microsserviços fora de seu código, é o conceito de Service Mesh. Em outras palavras, é um grupo coordenado de um ou mais binários que formam uma malha de funções de rede.

Como o Istio funciona com microsserviços

É assim que se parece o trabalho dos contêineres laterais em conjunto com Kubernetes и Miniturno visão panorâmica: inicie uma instância do Minishift, crie um projeto para o Istio (vamos chamá-lo de “sistema istio”), instale e execute todos os componentes relacionados ao Istio. Depois, ao criar projetos e pods, você adiciona informações de configuração às implantações e seus pods começam a usar o Istio. Um diagrama simplificado se parece com este:

Uma série de postagens no Istio Service Mesh

Agora você pode alterar as configurações do Istio para, por exemplo, organizar injeção de falhas, suporte Implantação canário ou outros recursos do Istio - e tudo isso sem mexer no código dos próprios aplicativos. Digamos que você queira 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 procurará @foocorporation.com no ID do usuário e redirecionará de acordo. Para todos os outros usuários, nada mudará. Enquanto isso, você testará com calma a nova versão do site. E observe que você não precisa envolver desenvolvedores para isso.

E você terá que pagar caro por isso?

De jeito nenhum. Istio é bastante rápido e está escrito em Go e cria muito pouca sobrecarga. Além disso, a possível perda de produtividade online é compensada por um aumento na produtividade do desenvolvedor. Pelo menos em teoria: não esqueça que o tempo dos desenvolvedores é valioso. Quanto aos custos de software, o Istio é um software de código aberto, então você pode obtê-lo e usá-lo gratuitamente.

Domine você mesmo

A equipe Red Hat Developer Experience desenvolveu um guia prático e aprofundado orientar por Istio (em inglês). Funciona em Linux, MacOS e Windows, e o código está disponível em Java e Node.js.

10 aulas interativas no Istio

Bloco 1 – Para Iniciantes

Introdução ao Istio
Minutos 30
Vamos conhecer o Service Mesh e aprender como instalar o Istio em um cluster OpenShift Kubernetes.
Postar

Implantando microsserviços no Istio
Minutos 30
Usamos o Istio para implantar três microsserviços com Spring Boot e Vert.x.
Postar

Bloco 2 – nível intermediário

Monitoramento e rastreamento no Istio
Minutos 60
Exploraremos as ferramentas de monitoramento integradas do Istio, métricas personalizadas e OpenTracing via Prometheus e Grafana.
Postar

Roteamento simples no Istio
Minutos 60
Aprenda como gerenciar o roteamento no Istio usando regras simples.
Postar

Regras de roteamento avançadas
Minutos 60
Vamos dar uma olhada no roteamento inteligente, controle de acesso, balanceamento de carga e limitação de taxa do Istio.
Postar

Bloco 3 – usuário avançado

Injeção de falhas no Istio
Minutos 60
Estudamos cenários de tratamento de falhas em aplicações distribuídas, criando erros HTTP e atrasos de rede, e aprendemos a usar a engenharia do caos para restaurar o ambiente.
Postar

Disjuntor no Istio
Minutos 30
Instalamos o Siege para locais de teste de estresse e aprendemos como garantir tolerância a falhas de back-end usando replays, disjuntor e ejeção de pool.
Postar

Saída e Istio
Minutos 10
Usamos rotas de saída para criar regras para a interação de serviços internos com APIs e serviços externos.
Postar

Istio e Kiali
Minutos 15
Aprenda a usar o Kiali para obter uma visão geral da malha de serviço e explorar fluxos de solicitações e dados.
Postar

TLS mútuo no Istio
Minutos 15
Criamos Istio Gateway e VirtualService, depois estudamos detalhadamente o TLS mútuo (mTLS) e suas configurações.
Postar

Bloco 3.1 – Aprofundamento: Istio Service Mesh para microsserviços

Uma série de postagens no Istio Service Mesh
Sobre o que é o livro:

  • O que é uma malha de serviço?
  • O sistema Istio e sua função na arquitetura de microsserviços.
  • Usando o Istio para resolver os seguintes problemas:
    • Tolerância ao erro;
    • Roteamento;
    • Teste de caos;
    • Segurança;
    • Coleta de telemetria usando traces, métricas e Grafana.

Para baixar um livro

Série de artigos sobre service meshes e Istio

Experimente você mesmo

Esta série de postagens não tem como objetivo fornecer um mergulho profundo no mundo do Istio. Queremos apenas apresentar o conceito e talvez inspirá-lo a experimentar o Istio por si mesmo. É totalmente gratuito e a Red Hat fornece todas as ferramentas que você precisa para começar a usar OpenShift, Kubernetes, contêineres Linux e Istio, incluindo: Plataforma de contêiner OpenShift para desenvolvedores da Red Hat, nosso guia para Istio e outros recursos em nosso microsite no Service Mesh. Não perca tempo, comece hoje!

Regras de roteamento do Istio: direcionando solicitações de serviço para onde elas precisam ir

OpenShift и Kubernetes faça um excelente trabalho abordando microsserviços roteados para os pods necessários. Esta é uma das razões da existência do Kubernetes - roteamento e balanceamento de carga. Mas e se você precisar de um roteamento mais sutil e sofisticado? Por exemplo, para usar simultaneamente duas versões de um microsserviço. Como as regras de rota do Istio podem ajudar aqui?

As regras de roteamento são as regras que realmente determinam a escolha da rota. Independentemente do nível de complexidade do sistema, o princípio geral de funcionamento destas 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/50"

Em nosso exemplo, mostraremos como usar simultaneamente duas versões de um 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, executa roteamento round robin uniformemente balanceado. Cada pod recebe sua parcela de solicitações com base no número de instâncias de microsserviços, ou seja, réplicas. O Istio permite alterar esse saldo manualmente.

Digamos que implementamos duas versões do 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 é representado em uma instância, as solicitações alternam uniformemente entre eles: 1-2-1-2-... É assim que o roteamento do Kubernetes funciona por padrão:

Uma série de postagens no Istio Service Mesh

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 v2 de uma para duas (isso é feito com o comando oc scale —replicas=2 implantação/recomendação-v2). Como você pode ver, as solicitações entre v1 e v2 agora estão divididas em uma proporção de um para três: 1-2-2-1-2-2-…:

Uma série de postagens no Istio Service Mesh

Ignorar versão usando Istio

O Istio facilita alterar a distribuição das solicitações da maneira que precisamos. Por exemplo, envie todo o tráfego apenas para recomendação-v1 usando o seguinte arquivo yaml do Istio:

Uma série de postagens no Istio Service Mesh

Aqui você precisa prestar atenção a isso: os frutos são selecionados de acordo com os rótulos. Nosso exemplo usa o rótulo v1. O parâmetro “peso: 100” significa que 100% do tráfego será roteado para todos os pods de serviço que possuem o rótulo v1.

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

Em seguida, usando o parâmetro peso, você pode direcionar o tráfego para ambos os 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 v1 e 10% para v2:

Uma série de postagens no Istio Service Mesh

Roteamento separado para usuários móveis

Concluindo, mostraremos como forçar o tráfego de usuários móveis a ser roteado para o serviço v2 e todos os demais para v1. Para fazer isso, usamos expressões regulares para analisar o valor do agente do usuário no cabeçalho da solicitação:

Uma série de postagens no Istio Service Mesh

Agora é a sua vez

O exemplo com expressões regulares para análise de cabeçalhos deve motivá-lo a encontrar seus próprios usos das regras de roteamento do Istio. Além disso, as possibilidades aqui são bastante extensas, uma vez que os valores do cabeçalho podem ser formados no código-fonte do aplicativo.

E lembre-se de que Ops, não Dev

Tudo o que mostramos nos exemplos acima é feito sem as menores alterações no código-fonte, enfim, exceto nos casos em que é necessário gerar cabeçalhos de solicitações especiais. O Istio será útil tanto para desenvolvedores, que, por exemplo, poderão utilizá-lo na fase de testes, quanto para especialistas na operação de sistemas de TI, para os quais ajudará muito na produção.

Então, vamos repetir o leitmotiv desta série de posts: você não precisa alterar nada no seu código. Não há necessidade de construir novas imagens ou lançar novos contêineres. Tudo isso é implementado fora do código.

Use sua imaginação

Imagine as possibilidades de análise de cabeçalho usando expressões regulares. Quer redirecionar seu maior cliente para uma versão especial do seu microsserviços? Facilmente! Precisa de uma versão separada para o navegador Chrome? Sem problemas! Você pode rotear o tráfego de acordo com praticamente qualquer característica.

Experimente você mesmo

Ler sobre Istio, Kubernetes e OpenShift é uma coisa, mas por que não mexer em tudo sozinho? Equipe Programa para Desenvolvedores Red Hat preparou um guia detalhado (em inglês) que o ajudará a dominar essas tecnologias o mais rápido possível. O manual também é 100% de código aberto, portanto é publicado em domínio público. O arquivo funciona em macOS, Linux e Windows, e o código-fonte está disponível nas versões Java e node.js (versões em outras linguagens em breve). Basta abrir o repositório git correspondente em seu navegador Demonstração do desenvolvedor Red Hat.

No próximo post: resolvemos os problemas lindamente

Hoje você viu o que as regras de roteamento do Istio podem fazer. Agora imagine a mesma coisa, mas apenas em relação ao tratamento de erros. É exatamente sobre isso que falaremos no próximo post.

Fonte: habr.com

Adicionar um comentário