Revisado por Elder Moraes
Istio é uma plataforma aberta que fornece uma maneira uniforme de conectar, gerenciar e proteger microsserviços. Suporta o gerenciamento de fluxos de tráfego entre microsserviços, impondo políticas de acesso e agregando dados de telemetria, tudo sem exigir alterações no código fonte dos serviços. Ele funciona por meio de um proxy sidecar especial adicionado em cada serviço que intercepta toda a comunicação de rede entre eles, oferecendo as seguintes funcionalidades:
Na imagem abaixo, é demonstrada a arquitetura geral do Istio composta pelo data plane (conjunto de proxies inteligentes Envoy implementados como sidecars) e o control plane (gerencia e configura os proxies para rotear o tráfego).
Fonte: Istio website
Para realizar a criação de um novo cluster Kubernetes basta acessar o dashboard do Oracle OKE e solicitar a opção (botão) para criar um novo cluster. Será aberto uma janela com opções e informações adicionais para criação, onde basta definir o nome do cluster, versão Kubernetes suportada, e a opção para criação rápida.
Além disto, é possível habilitar complementos como Kubernetes Dashboard e Tiller (Helm) para serem habilitados durante o processo de criação do cluster. Vale a pena ressaltar que o Tiller será utilizado posteriormente neste artigo para instalação do Istio Service Mesh. Após a confirmação, a criação do cluster deverá estar disponível dentro de alguns minutos.
O cluster Kubernetes estará pronto assim que o status de criação demonstrar ativo, e as instâncias que compõem o cluster ficarem disponíveis.
Para acessar e administrar o ambiente do cluster remotamente, é necessário instalar e configurar os utilitários kubectl (Kubernetes command line) e Oracle CLI (Oracle Cloud command line). Após a instalação e configuração destas ferramentas, você pode realizar a seguinte configuração para acesso.
mkdir -p $HOME/.kube
oci ce cluster create-kubeconfig --cluster-id [cluster id] --file $HOME/.kube/config
Feito isto, você poderá administrar remotamente seu Kubernetes cluster, inclusive definir um proxy de acesso local para o Kubernetes Dashboard.
kubectl proxy
http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/
A instalação do Istio no cluster OKE será realizada por meio do Helm. Ele é um gerenciador de pacotes para definição, instalação e atualização de aplicações no Kubernetes. Existem outras possíveis maneiras de instalação do Istio em um cluster Kubernetes, mas o Helm é o método mais fácil e recomendado (principalmente pois já foi previamente instalado na criação do cluster OKE anteriormente).
Para iniciar a instalação, será necessário fazer o download da última versão do Istio em um diretório local, e para isto você pode executar o seguinte comando:
curl -L https://git.io/getLatestIstio | sh --
Caso você esteja utilizando uma versão do Helm anterior à 2.10.0 será necessário instalar primeiro o Istio CRDs (Custom Resource Definitions) por meio do utilitário kubectl.
kubectl apply -f install/kubernetes/helm/istio/templates/crds.yaml
Após finalizada a instalação do CRDs you pode então instalar o Istio Service Mesh. Vale a pena ressaltar que foram informados os parâmetros opcionais para habilitar o suporte as ferramentas de telemetria e monitoramento (Grafrana, Service Graph, Kiali).
helm install --wait --name=istio --namespace=istio-system --set grafana.enabled=true
--set servicegraph.enabled=true --set tracing.enabled=true --set kiali.enabled=true
./install/kubernetes/helm/istio
Este pacote de instalação Helm irá configurar automaticamente seu cluster para realizar injeção do sidecar proxy. Para verificar se a instalação do Istio finalizou com sucesso, você pode utilizar um comando no kubectl para visualizar os containers instalados em execução.
kubectl get pods -n istio-system
A maneira mais simples para verificar o funcionamento do ambiente de service mesh em ação é por meio da aplicação de exemplo Bookinfo, que já vem como parte dos exemplos oficiais na distribuição do Istio. Esta aplicação exibe informações sobre um livro, semelhante a uma entrada de catálogo em uma livraria on-line. Na página de exibição, há uma descrição do livro, detalhes do livro (ISBN, número de páginas e assim por diante) e algumas resenhas do mesmo. Na imagem abaixo é demonstrada a arquitetura desta aplicação, que é composta por quatro microsserviços separados (productpage, details, reviews, ratings).
Fonte: Istio Bookinfo page
Para instalar a aplicação no cluster OKE, basta habilitar a injeção dos sidecar proxy automático no namespace default e realizar a instalação por meio dos seguintes comandos:
kubectl label namespace default istio-injection=enabled
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
Para confirmar que a aplicação Bookinfo foi instalada com sucesso, você pode verificar se os serviços e os pods encontram-se todos em execução no cluster:
kubectl get services
kubectl get pods
Será necessário também expor o gateway para acesso à aplicação dentro do cluster, por meio do seguinte comando:
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
Para confirmar que o gateway foi criado e definido corretamente:
kubectl get gateway
Para acessar a aplicação é necessário descobrir o endereço IP e porta do cluster, para então definir a URL de acesso externo. Você pode realizar as seguintes configurações para descoberta do endereço de acesso:
export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o
jsonpath='{.status.loadBalancer.ingress[0].ip}')
export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o
jsonpath='{.spec.ports[?(@.name=="http2")].port}')
export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT
Prometheus é um sistema de alerta e monitoramento open-source que coleta métricas de destinos configurados em determinados intervalos, avaliando regras definidas e exibindo os respectivos resultados.
Para acessar o serviço no cluster, verifique se o mesmo encontra-se disponível por meio do seguinte comando:
kubectl -n istio-system get svc prometheus
Simule o envio de algum tráfego de acesso à aplicação de exemplo Bookinfo, por meio do seguinte comando:
while true; do sleep 1; curl http://${GATEWAY_URL}/productpage; echo -e '\n\n\n\n'$(date);done
Defina o proxy local para acesso e acesse o endereço do Prometheus:
kubectl -n istio-system port-forward $(kubectl -n istio-system get pod -l app=prometheus -o
jsonpath='{.items[0].metadata.name}') 9090:9090 &
Você pode, por exemplo, testar algumas das seguintes consultadas customizadas pelo Prometheus:
# Total de requests realizados somente ao serviço 'productpage'
istio_requests_total{destination_service="productpage.default.svc.cluster.local"}
# Total de requests realizados somente a v3 do serviço 'reviews'
istio_requests_total{destination_service="reviews.default.svc.cluster.local", destination_version="v3"}
# Taxa de requests realizados nos últimos 5 minutos com HTTP 200 somente ao serviço 'productpage'
rate(istio_requests_total{destination_service=~"productpage.*", response_code="200"}[5m])
Grafana é uma suíte open-source de análise e visualização de dados em tempo real a partir de métricas computadas pelo Graphite, Elasticsearch, OpenTSDB, Prometheus e/ou InfluxDB.
Para acessar o serviço do Grafana, verifique se o mesmo encontra-se disponível no cluster por meio do seguinte comando:
kubectl -n istio-system get svc grafana
Defina o proxy local e acesse o endereço do serviço do Grafana:
kubectl -n istio-system port-forward $(kubectl -n istio-system get pod -l
app=grafana -o jsonpath='{.items[0].metadata.name}') 3000:3000 &
Este serviço do já vem configurado com dashboards previamente configurados para Istio, que podem ser acessados:
Jaeger é um sistema de rastreamento distribuído open-source utilizado para monitorar e solucionar problemas de sistemas distribuídos baseados em microsserviços. Além disto, pode ser utilizado também para:
Para acessar o serviço do Jaeger, primeiramente, verifique se o mesmo encontra-se disponível no cluster por meio do seguinte comando:
kubectl -n istio-system get svc | grep jaeger
Defina o proxy local e acesse o endereço do serviço do Jaeger:
kubectl port-forward -n istio-system $(kubectl get pod -n istio-system -l app=jaeger -o
jsonpath='{.items[0].metadata.name}') 16686:16686 &
Você pode buscar pelos rastros distribuídos tomando como base um determinado serviço, como no exemplo da imagem abaixo...
… E também expandir um determinado rastro para verificar todas as chamadas internas realizadas, com suas respectivas dependências.
Uma outra ferramenta que está disponível no ambiente do Istio é o Service Graph, responsável pela geração de um gráfico dinâmico de dependências entre os microsserviços da aplicação.
Para acessar o Service Graph, verifique se o mesmo encontra-se disponível no cluster por meio do seguinte comando:
kubectl -n istio-system get svc servicregraph
Defina o proxy local e acesse o endereço do serviço do Service Graph:
$ kubectl -n istio-system port-forward $(kubectl -n istio-system get pod -l
app=servicegraph -o jsonpath='{.items[0].metadata.name}') 8088:8088 &
Rodrigo Cândido da Silva @rcandidosilva
Consultor independente, Oracle Groundbreaker Ambassador e JUG Leader do GUJavaSC, grupo de usuários Java de Santa Catarina. Com mais de 18 anos de experiência na área de desenvolvimento de software, vem trabalhando atualmente nas áreas de consultoria, desenvolvimento, treinamento e design de arquiteturas de software. Contribuidor ativo de projetos open source e participante frequente em conferências de software pelo Brasil e pelo mundo.
Este artigo foi revisto pela equipe de produtos Oracle e está em conformidade com as normas e práticas para o uso de produtos Oracle