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:
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.
Recomendados pelo LinkedIn
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
Head Cloud|OCI|AWS|GCP|FinOps|CKA|CKAD|DevSecOps|SysAdmin |SRE|Cloud Architect|SOA Architect|Integration Architect|Oracle Middeware Consultant
9 mTop