menu icon

Istio

Saiba mais sobre o Istio, a tecnologia aberta que oferece aos desenvolvedores uma maneira de conectar, gerenciar e proteger perfeitamente redes de diferentes microsserviços.

O que é o Istio?

Istio é um nível de malha de serviços de software livre configurável que conecta, monitora e protege contêineres no cluster Kubernetes. No momento, o Istio funciona nativamente somente com o Kubernetes, mas sua natureza de software livre possibilita que qualquer um escreva extensões, o que permite que o Istio seja executado em qualquer software de cluster. Hoje, focaremos no uso do Istio com o Kubernetes, seu caso de uso mais popular.

Kubernetes é uma ferramenta de orquestração de contêiner e um nó é sua unidade central. Um nó consiste em um ou mais contêineres, com sistemas de arquivos ou outros componentes. Uma arquitetura de microsserviços pode ter dezenas de nós diferentes, cada um representando microsserviços diferentes. Kubernetes gerencia a disponibilidade e o consumo de recursos dos nós, incluindo pods com o dimensionador automático de pods à medida que a demanda aumenta. Istio disponibiliza contêineres adicionais no pod para incluir segurança, gerenciamento e monitoramento.

Por ser um software livre, o Istio pode ser executado em qualquer provedor de cloud pública que o suporte e em qualquer cloud privada com administradores dispostos.

O vídeo a seguir explica mais sobre os conceitos básicos do Istio (5:13):

A malha de serviços de rede

Quando as empresas migram para microsserviços, elas precisam oferecer suporte a dezenas ou centenas de aplicativos específicos. Gerenciar esses terminais separadamente significa suportar um grande número de máquinas virtuais ou VMs, incluindo a demanda. Um software de cluster como o Kubernetes pode criar pods e dimensioná-los, mas o Kubernetes não fornece roteamento, regras de tráfego ou ferramentas sólidas de monitoramento ou depuração.

Utilize a malha de serviços.

À medida que o número de serviços aumenta, o número de possíveis formas de comunicação é ampliado exponencialmente. Dois serviços têm somente dois caminhos de comunicação. Três serviços têm seis e 10 serviços têm 90. Uma malha de serviços fornece uma maneira única de configurar esses caminhos de comunicação por meio da criação de uma política para a comunicação.

Uma malha de serviços instrumenta os serviços e direciona o tráfego de comunicações de acordo com uma configuração predefinida. Isso significa que, em vez de configurar um contêiner em execução (ou escrever um código para isso), um administrador pode fornecer a configuração à malha de serviços e fazer com que ela conclua esse trabalho. Anteriormente, isso sempre acontecia com comunicações de serviço a serviço e servidores da web.

A maneira mais comum de fazer isso em um cluster é usar o padrão de sidecar. Um sidecar é um novo contêiner, dentro do pod, que roteia e observa o tráfego de comunicações entre serviços e contêineres.

Istio e Kubernetes

Como mencionado anteriormente, o Istio se sobrepõe ao Kubernetes, incluindo contêineres essencialmente invisíveis para o programador e o administrador. Chamados de contêineres "sidecar", eles atuam como intermediários, direcionando o tráfego e monitorando as interações entre os componentes. Os dois trabalham em conjunto de três formas: configuração, monitoramento e gerenciamento.

Configuração

O método principal para definir a configuração do Kubernetes é o comando kubectl, geralmente "kubectl -f <filename>", em que o arquivo é um YAML. Os usuários do Istio podem executar tipos novos e diferentes de arquivos YAML com o kubectl ou usar o novo comando ioctl opcional.

Monitoramento

Com o Istio, é possível monitorar facilmente o funcionamento de seus aplicativos em execução com o Kubernetes. A instrumentação do Istio pode gerenciar e visualizar o funcionamento dos aplicativos, fornecendo mais insights do que somente o monitoramento geral de clusters e nós fornecido pelo Kubernetes.

Gerenciamento

Como a interface do Istio é essencialmente a mesma do Kubernetes, o gerenciamento não requer praticamente nenhum trabalho adicional. Na verdade, o Istio permite que o usuário crie políticas que impactem e gerenciem todo o cluster Kubernetes, reduzindo o tempo de gerenciamento de cada cluster e eliminando a necessidade de códigos de gerenciamento customizados.

Benefícios

Os principais benefícios de uma malha de serviços incluem recursos para a melhoria da depuração, do monitoramento, do roteamento, da segurança e da utilização. Ou seja, com o Istio, será necessário menos esforço para gerenciar um grupo mais amplo de serviços.

Depuração melhorada

Digamos, por exemplo, que um serviço tenha diversas dependências. O serviço pay_claim em uma companhia de seguros chama o serviço deductible_amt, que chama o serviço is_member_covered e assim por diante. Uma cadeia de dependência complexa pode ter 10 ou 12 chamadas de serviço. Quando uma dessas 12 falha, ocorre um conjunto de falhas em cascata que resultam em algum tipo de erro 500 ou 400 ou, possivelmente, em nenhuma resposta.

Para depurar esse conjunto de chamadas, é possível usar algo como um rastreio de pilha. No front-end, os desenvolvedores do lado do cliente podem ver quais elementos são retirados dos servidores da web, em qual ordem e examiná-los. Os programadores de front-end podem obter um diagrama em cascata para ajudar na depuração.

O que o exemplo não mostra é o que acontece dentro do data center, ou seja, como callback=parselLotamaAudiences chama outros quatro serviços da web e quais deles respondem mais lentamente. Mais tarde, veremos como o Istio fornece ferramentas para rastrear chamadas de função em um diagrama muito parecido com este.

Monitoramento e observabilidade

As equipes de DevOps e administração de TI podem desejar observar o tráfego para ver a latência, o tempo de serviço, os erros como uma porcentagem de tráfego e assim por diante. Muitas vezes, elas querem ver um dashboard. Um dashboard fornece uma visualização da soma, da média ou dessas métricas ao longo do tempo, potencialmente com a capacidade de efetuar drill down para um nó, serviço ou pod específico. Kubernetes não fornece essa funcionalidade nativamente.

Política

Por padrão, o Kubernetes permite que todos os pods enviem tráfegos para os outros pods Istio permite que os administradores criem uma política para restringir quais serviços podem funcionar em conjunto. Portanto, por exemplo, os serviços poderão chamar somente outros serviços que sejam dependências verdadeiras. Outra política para manter os serviços ativos é um limite de taxa, que impede que o tráfego excessivo obstrua um serviço e evita ataques de recusa de serviço.

Roteamento e balanceamento de carga

Por padrão, o Kubernetes fornece um balanceamento de carga de round-robin. Se houver seis pods fornecendo um microsserviço, o Kubernetes fornecerá um balanceador de carga, ou um "serviço", que enviará solicitações para cada pod em ordem crescente e, em seguida, será reiniciado. No entanto, às vezes, uma empresa implementa versões diferentes do mesmo serviço na produção.

O exemplo mais simples disso pode ser uma implementação azul/verde. Nesse caso, o software pode criar uma versão totalmente nova do aplicativo na produção sem enviar os usuários de produção para ele. Após promover a nova versão, a empresa pode manter os servidores antigos para alterar novamente de forma rápida em caso de falhas.

Com o Istio, isso é tão simples quanto usar tags em um arquivo de configuração. Os administradores também podem usar rótulos para indicar a qual tipo de serviço se conectar e criar regras com base em cabeçalhos. Assim, por exemplo, os usuários beta podem realizar o roteamento para um pod "canary" com a versão mais recente e melhor, enquanto os usuários regulares acessam a compilação estável da produção.

Efeito disjuntor

Se um serviço estiver sobrecarregado ou inativo, solicitações adicionais falharão e continuarão sobrecarregando o sistema. Como o Istio está rastreando erros e atrasos, ele pode forçar uma pausa, o que permite a recuperação de um serviço, após um número específico de solicitações definido pela política. É possível aplicar essa política em todo o cluster criando um pequeno arquivo de texto e instruindo o Istio a usá-lo como uma nova política.

Segurança

Istio fornece identidade, política e criptografia por padrão, além de autenticação, autorização e auditoria (AAA). Quaisquer pods sob o gerenciamento que se comuniquem com outros usarão o tráfego criptografado, que impedirá quaisquer observações. O serviço de identidade, combinado à criptografia, garante que nenhum usuário não autorizado falsifique uma chamada de serviço. A abordagem AAA fornece aos profissionais de segurança e operações as ferramentas necessárias para o monitoramento com menos sobrecarga.

Administração simplificada

Os aplicativos tradicionais ainda precisam dos recursos de identificação, política e segurança oferecidos pelo Istio. Isso faz com que programadores e administradores trabalhem no nível errado de abstração, reimplementando as mesmas regras de segurança repetidamente para cada serviço. Istio permite que eles trabalhem no nível certo, configurando a política para o cluster através de um único painel de controle. Ao mesmo tempo, com os controles de acesso, os dashboards e as ferramentas de depuração do Istio descritos abaixo, é possível incluir facilmente um plug-in na linha de comandos, em vez de acessar uma página da web.

Exemplos

Visualize serviços

O Istio 1.1 inclui um novo complemento chamado Kiali, que fornece uma visualização com base na web. É possível usá-lo para rastrear solicitações de serviço, obter detalhes ou até mesmo exportar o histórico de solicitações de serviço como um JSON para a consulta e a formatação à sua maneira. O gráfico de carga de trabalho abaixo oferece um gráfico de dependências gerado em tempo real com base nos serviços que realmente dependem um do outro. Ele é gerado a partir de observações de tráfego reais.

Imagem de novo complemento chamado Kiali o que proporciona uma visualização com base na web

Rastreie chamadas de serviço

O serviço Jaeger, um componente do Istio, fornece rastreio para qualquer serviço prestado. Neste exemplo, rastreamos a página do produto. Os pontos na primeira imagem representam uma chamada de serviço. Ao clicar em um ponto, é possível "efetuar drill down" do diagrama em cascata para seguir as solicitações e as respostas exatas dos serviços.

Imagem do serviço The Jaeger, um componente do Istio que fornece rastreio para qualquer serviço prestado.  Neste exemplo, rastreamos a página do produto.  Cada ponto na primeira imagem representa uma chamada de serviço.

Também é possível olhar com mais atenção para a página do produto. É possível ver que os erros estão na própria página do produto e que os detalhes foram retornados com sucesso.

Imagem da página do produto.  É possível ver que os erros estão na própria página do produto e que os detalhes foram retornados com sucesso.

Dashboards

Istio é fornecido com muitos dashboards (prontos para uso) que auxiliam no monitoramento do funcionamento e do desempenho do sistema. Eles podem medir a utilização da CPU e da memória, a demanda de tráfego, o número de 400 e 500 erros, o tempo de atendimento de solicitações e muito mais. O melhor de tudo é que eles estão disponíveis simplesmente ao instalar e executar o Istio e incluir o Grafana, uma das ferramentas de dashboard de software livre incluídas no Istio. Istio também fornece dois outros dashboards:Kiali e Jaeger.

Imagem de muitos dashboards do Istio (fora da caixa) para monitorar o funcionamento e o desempenho do sistema.

Istio vs. Envoy

Istio usa uma versão do Envoy muito estendida para executar o monitoramento, o gerenciamento e a criação de logs. Cada pod precisa ser rastreado e o Istio precisa agregar e fornecer informações sobre todos eles. Uma possível alternativa para usar o Istio seria implementar o Envoy no cluster Kubernetes diretamente e escrever o código de gerenciamento. No entanto, ao pensarmos sobre isso, vemos que é essencialmente o mesmo que reescrever o que o Istio é, com todos os custos e erros associados a um projeto de desenvolvimento customizado.

Tutoriais

O site do Istio (link externo à ibm.com) inclui muita documentação e instruções úteis para começar a usar o Istio. 

Istio e a IBM

O Istio gerenciado está disponível como parte do IBM Cloud Kubernetes Service. O serviço fornece a instalação perfeita do Istio, atualizações automáticas e gerenciamento de ciclo de vida de componentes de plano de controle, além da integração com ferramentas de criação de log e de monitoramento da plataforma. Inclua a integração do Istio gerenciado em seus clusters novos ou existentes e retome o controle de seus microsserviços hoje mesmo. Se estiver interessado em explorar o Knative, consulte "Knative: An Essential Guide".

Saiba mais sobre o Istio gerenciado no IBM Cloud Kubernetes Service

Para obter uma visão geral de como o Kubernetes gerenciado pode ajudá-lo em sua jornada para a cloud, consulte nosso vídeo "Advantages of Managed Kubernetes":

Para saber mais sobre as melhores práticas de ativação e agilização da implementação de contêineres em ambientes de produção, consulte o relatório "Best Practices for Running Containers and Kubernetes in Production".

Saiba como as malhas de serviço podem ajudar a controlar as interações entre os serviços em seu aplicativo com o guia prático "Istio Explained: Getting Started with Service Mesh" (PDF, 4,1 MB).

Se estiver pronto para começar a usar a IBM Cloud hoje, inscreva-se aqui.