Gestão de microserviços utilizando Istio no Kubernetes

Gestão de microserviços utilizando Istio no Kubernetes

Com entregas cada vez mais aceleradas, prazos apertados e tudo mais que pode exercer pressão sobre os times, é necessário ter um leque de opções em tecnologia. E ter a capacidade de escalar e gerenciar aplicações complexas de forma eficiente tornou-se uma necessidade. Neste ponto entra o Kubernetes, a plataforma de orquestração de contêineres que já está sendo utilizado em larga escala e a todo vapor, mudando a maneira como implantamos e escalamos aplicações.

A medida que vamos deployando aplicações as comunicações entre serviços vão ficando cada vez mais complexas. Mas quando se trata de gerenciar comunicação entre serviços, segurança e observabilidade em um ecossistema de microserviços, Istio pode ser seu aliado trabalhando em conjunto com o Kubernetes para simplificar essas tarefas, afinal de contas já temos a ferramenta para nos ajudar, então não vamos complicar.

Istio fornece uma camada extra de infraestrutura que controla a comunicação entre serviços, oferecendo funcionalidades como balanceamento de carga, autenticação e autorização seguras, e métricas detalhadas, tudo isso sem alterar o código dos microserviços.

Alguma das funcionalidades bem interessante na minha opnião:

  • Controle de Tráfego: Gerencia como as solicitações são encaminhadas entre os diversos serviços, facilitando com isso um teste A/B, o canary releases, etc.... sem a necessidade de gerar indisponibilidade entre deploys.
  • Segurança: Simplifica a implementação de comunicações seguras entre serviços, gerenciando autenticação, autorização e criptografia.
  • Observabilidade: Fornece insights detalhados sobre o comportamento da aplicação, através de logs, métricas e rastreamentos, tornando mais fácil monitorar e solucionar problemas.

O básico prático de utilização dessa ferramenta:

Antes de começar, certifique-se de ter o Istio instalado. Se não, você pode seguir os passos de instalação no site oficial do Istio.

Instalar o Istio com o perfil padrão:

istioctl install --set profile=default -y        

Verifique se o Istio foi instalado corretamente:

kubectl get svc -n istio-system

kubectl get pods -n istio-system        

Esses comandos listam os serviços e pods do Istio, indicando que o Istio foi instalado corretamente se os pods estão em estado RUNNING.

Confirmamos que está tudo instalado. Agora segue alguns exemplos de como podemos testar alguns cenários. Ex:

Roteamento de Tráfego

Para demonstrar o roteamento de tráfego, assumiremos que você tem um serviço chamado my-app com duas versões, v1 e v2.

Criar um gateway Istio:

Este comando cria um gateway para expor seu serviço externamente.

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: my-app-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "my-app.exemplo.com.br"        

Definir roteamento de tráfego:

Aqui, definimos regras para rotear 80% do tráfego para v1 do serviço e 20% para v2.

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: my-app
spec:
  hosts:
  - "my-app.exemplo.com.br"
  gateways:
  - my-app-gateway
  http:
  - route:
    - destination:
        host: my-app
        subset: v1
      weight: 80
    - destination:
        host: my-app
        subset: v2
      weight: 20        

Um outro exemplo que podemos utilizar com essa ferramenta é a parte de segurança, segue um outro exemplo básico:

Implementação de Políticas de Segurança

Ativar mTLS para todo o namespace:

Istio permite ativar o Mutual TLS (mTLS) para a comunicação entre serviços, aumentando a segurança.

apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
  name: default
  namespace: default
spec:
  mtls:
    mode: STRICT        

Definir uma política de autorização:

Esta política permite que apenas o serviço cliente-servico acesse my-app.

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: my-app-politica
  namespace: default
spec:
  selector:
    matchLabels:
      app: my-app
  action: ALLOW
  rules:
  - from:
    - source:
        principals: ["cluster.local/ns/default/sa/cliente-servico"]        

Um pouco sobre essa ferramenta poderosa que pode ajudar bastante no dia a dia ainda mais quando se utilizar kubernetes para boa parte da aplicações.

Referência

Documentação do Istio


Márcio Zampiron 🇧🇷

Head Cloud|OCI|AWS|GCP|FinOps|CKA|CKAD|DevSecOps|SysAdmin |SRE|Cloud Architect|SOA Architect|Integration Architect|Oracle Middeware Consultant

9 m

Top

Entre para ver ou adicionar um comentário

Outros artigos de Paulo Alves

  • Gerenciamento de Acessos na AWS

    Gerenciamento de Acessos na AWS

    Quase sempre, com a cultura de entregas aceleradas, pontos que precisariam de uma análise mais cuidadosa acabam sendo…

  • O Papel do Analista DevOps na Dinâmica da Equipe

    O Papel do Analista DevOps na Dinâmica da Equipe

    A tecnologia está em constante evolução, e com isso, a cultura DevOps também está em alta. E olha que isso não é algo…

    1 comentário
  • A coletividade do time em entregas com qualidade

    A coletividade do time em entregas com qualidade

    Em tecnologia, a agilidade nas entregas e a capacidade de adaptação a mudanças de cenários e escopos são fundamentais…

    4 comentários
  • O início da liderança na área de tecnologia

    O início da liderança na área de tecnologia

    Em um mundo em constante transformação, especialmente no campo da tecnologia, navegar pelas diferentes trajetórias de…

    1 comentário
  • Gerenciamento de Versões do Terraform com o tfenv

    Gerenciamento de Versões do Terraform com o tfenv

    O gerenciamento de infraestrutura como código (IaC) se tornou algo indispensável no mundo tecnológico atual e não é…

Outras pessoas também visualizaram

Conferir tópicos