Descubra a magia da arquitetura de service mesh e veja como ela potencializa seus sistemas distribuídos.
Mergulhe no Istio, o superstar do service mesh, e aprenda como ele orquestra seu cluster Kubernetes com perfeição.
Aplicações monolíticas evoluíram para serviços menores e independentes. Essa mudança ganhou imensa popularidade com a computação cloud-native e a arquitetura de microserviços. Ferramentas como Docker e Kubernetes aceleraram essa tendência.
Microserviços em plataformas como Kubernetes oferecem inúmeros benefícios, mas também introduzem complexidades. Gerenciar a comunicação entre esses serviços distribuídos requer considerações cuidadosas de descoberta, roteamento, novas tentativas e failover.
Desafios adicionais incluem segurança e observabilidade.
Construir capacidades de comunicação em cada serviço é demorado, especialmente à medida que o cenário de serviços se expande. É aí que o service mesh brilha. Ele gerencia toda a comunicação entre serviços dentro de um sistema distribuído.
O service mesh faz isso usando proxies de rede. As solicitações entre serviços são roteadas através desses proxies, que residem fora dos serviços na camada de infraestrutura:
Esses proxies formam uma rede em malha para os serviços, daí o nome. O service mesh controla todos os aspectos da comunicação entre serviços, permitindo que ele resolva as oito falácias da computação distribuída.
Libere todo o potencial dos seus serviços com um service mesh! Descubra como essa ferramenta mágica pode transformar seu cenário de aplicações.
Vamos dividir essa magia em três habilidades principais: magias de tráfego, segurança impenetrável e visibilidade cristalina.
Um service mesh é seu maior policial de tráfego, direcionando interações entre serviços com precisão. Aproveite o roteamento dinâmico, descoberta inteligente e recursos incríveis como o traffic shadowing e a divisão de tráfego para lançamentos canários e experimentos de testes A/B.
Diga adeus a conexões instáveis! Um service mesh envolve seus serviços em um manto de confiabilidade, oferecendo novas tentativas, timeouts, limitação de taxa e circuit breakers para proteger seus aplicativos do caos.
Proteja seus serviços com uma fortaleza impenetrável! Um service mesh criptografa todas as comunicações com MTLS robusto, verifica identidades com autenticação rigorosa e aplica regras de acesso para proteção máxima.
Descubra poderes ocultos de segurança! Isole serviços, rastreie cada movimento para auditoria e crie um perímetro seguro ao redor da sua aplicação com um service mesh.
Navegue pelas complexidades do seu sistema distribuído com facilidade! Um service mesh oferece visibilidade inigualável nas entranhas da sua aplicação por meio de rastreamento distribuído.
Descubra insights valiosos com uma infinidade de métricas, logs e dados de desempenho. Otimize seus serviços e resolva problemas como um profissional com um service mesh.
Istio, uma criação open-source da IBM, Google e Lyft, melhora invisivelmente aplicações distribuídas com gerenciamento de tráfego, segurança e insights de desempenho.
Flexível para ser implantado on-premise, na nuvem, dentro do Kubernetes ou em máquinas virtuais, Istio brilha com microserviços no Kubernetes. Embora seja agnóstico de plataforma, é um ajuste natural para ambientes conteinerizados.
No seu núcleo, Istio implanta proxies Envoy como sidecars ao lado de cada microserviço:
Essa rede de proxies forma o plano de dados do Istio, orquestrado pelo plano de controle:
O plano de controle, o cérebro do Istio, capacita os proxies Envoy com descoberta, configuração e gerenciamento de certificados.
Libere o potencial do Istio com uma infinidade de microserviços interconectados, onde os proxies sidecar tecem uma robusta infraestrutura de service mesh:
A adaptabilidade do Istio brilha por meio de sua integração perfeita com sistemas externos de registro, telemetria e políticas.
A arquitetura do Istio é um duo dinâmico: o plano de dados e o plano de controle. Juntos, eles orquestram a mágica por trás das capacidades do Istio. Vamos mergulhar nos componentes principais que alimentam essa plataforma excepcional.
Prepare-se para explorar os detalhes intrincados dos componentes centrais do Istio.
O plano de dados do Istio é essencialmente uma versão ampliada do proxy Envoy. Esse marco open-source lida com as complexidades da rede, liberando as aplicações para focarem em seu core business. As aplicações interagem sem perceber a complexa infraestrutura de rede.
No seu núcleo, o Envoy é um mago da rede operando nas camadas 3 e 4 do modelo OSI. Ele gerencia conexões com uma cadeia de filtros de rede adaptáveis. Além disso, o filtro da camada L7 do Envoy permite que ele lide com tráfego HTTP com finesse. E não é só isso - ele é natural com protocolos HTTP/2 e gRPC.
Muitos dos recursos de destaque do Istio são superpoderes herdados das habilidades integradas do Envoy:
O verdadeiro potencial do Envoy brilha quando combinado com o Istio. Sua extensibilidade, alimentada pelo WebAssembly, é um divisor de águas para a aplicação de políticas personalizadas e telemetria. Além disso, a API sandbox Proxy-Wasm do Istio abre portas para ainda mais personalizações do Envoy.
Conheça o istiod, o maestro da orquestra do plano de controle do Istio. Esse maestro transforma regras de roteamento de alto nível e diretivas de gerenciamento de tráfego em configurações amigáveis ao Envoy, distribuindo-as perfeitamente para os sidecars.
Lembra da arquitetura anterior do Istio com seus componentes individuais? Bem, para simplificar as coisas, esses componentes foram mesclados no unificado istiod. Mas não se preocupe, as funcionalidades principais permanecem intactas.
No seu coração, o istiod aproveita o mesmo código e APIs de seus predecessores. O Pilot, por exemplo, continua sendo o maestro da descoberta de serviços, traduzindo detalhes específicos da plataforma em uma linguagem universal compreendida pelos sidecars. Essa flexibilidade permite que o Istio harmonize com ambientes diversos como Kubernetes e Máquinas Virtuais.
O istiod também assume o controle da segurança, estabelecendo uma autenticação robusta de serviço para serviço e de usuário final com seu sistema embutido de gerenciamento de identidade e credenciais. Aplique políticas de segurança granulares com base na identidade de serviço com facilidade. Além disso, o istiod funciona como uma Autoridade de Certificação (CA) confiável, emitindo certificados para garantir a comunicação entre serviços usando TLS mútua (MTLS).
Exploramos os recursos típicos de um service mesh e dissecamos a arquitetura e os componentes principais do Istio. Agora, vamos descobrir como o Istio entrega esses recursos usando seus componentes principais.
Vamos revisitar as mesmas categorias de recursos que exploramos anteriormente.
A API de gerenciamento de tráfego do Istio oferece controle granular sobre o tráfego da malha de serviços. Personalize configurações de tráfego usando essas APIs e defina recursos de API com definições de recursos personalizados (CRDs) do Kubernetes. Os principais recursos de API para roteamento de tráfego são serviços virtuais e regras de destino:
Um serviço virtual dita como as solicitações são roteadas para um serviço dentro da malha Istio. Ele contém uma ou mais regras de roteamento avaliadas sequencialmente. Após o roteamento do serviço virtual, regras de destino são aplicadas para controlar o tráfego para um destino, como agrupar instâncias de serviço por versão.
A base de segurança do Istio são identidades fortes para cada serviço. Agentes Istio ao lado de cada proxy Envoy colaboram com o istiod para automatizar a rotação de chaves e certificados:
O Istio suporta dois tipos de autenticação: autenticação de pares e autenticação de solicitações. A autenticação de pares protege a comunicação entre serviços com a solução mTLS do Istio. A autenticação de solicitações lida com a autenticação de usuários finais por meio da validação do JSON Web Token (JWT) usando um provedor de autenticação personalizado ou provedor OpenID Connect (OIDC).
O Istio aplica controle de acesso a serviços usando políticas de autorização. Essas políticas regulam o tráfego de entrada no proxy Envoy, permitindo o controle de acesso no nível da malha, namespace e serviço.
O Istio gera telemetria abrangente, incluindo métricas, rastreamentos distribuídos e logs de acesso, para toda a comunicação de serviços dentro da malha. Essa telemetria abrange métricas no nível do proxy, orientadas a serviço e no plano de controle.
Anteriormente, o Mixer era o componente central na arquitetura de telemetria do Istio. No entanto, o Telemetry v2 substitui os recursos do Mixer com plugins do proxy Envoy:
O Istio cria rastreamentos distribuídos por meio dos proxies Envoy e oferece suporte a diversos backends de rastreamento como Zipkin, Jaeger, Lightstep e Datadog. A taxa de amostragem de geração de rastreamento é configurável. Além disso, o Istio gera logs de acesso para o tráfego de serviços em formatos personalizáveis.
Chega de teoria, vamos ver o Istio em ação! Vamos instalar o Istio em um cluster Kubernetes e usar um aplicativo simples de microserviços para mostrar seu poder.
O Istio pode ser instalado de várias formas, mas baixar e extrair a versão mais recente para o seu sistema operacional (como Windows) é a maneira mais fácil. O pacote extraído inclui o cliente istioctl na pasta bin. Use o istioctl para instalar o Istio no seu cluster Kubernetes:
istioctl install --set profile=demo -y
Isso instala os componentes do Istio no cluster Kubernetes padrão usando o perfil de demonstração. Substitua 'demo' por outro perfil específico do fornecedor, se necessário.
Em seguida, instrua o Istio a injetar automaticamente proxies sidecar Envoy ao implantar aplicativos nesse cluster Kubernetes:
kubectl label namespace default istio-injection=enabled
Estamos usando o kubectl aqui, assumindo que você tenha um cluster Kubernetes (como Minikube) e a CLI Kubernetes kubectl configurada.
Imagine um simples aplicativo de pedidos online para esta demonstração. Ele consiste em três microserviços que trabalham juntos para atender pedidos:
Não vamos nos aprofundar nos detalhes dos microserviços, mas eles são fáceis de criar com Spring Boot e APIs REST. O mais importante é criar imagens Docker desses microserviços para implantar no Kubernetes.
Implantar workloads conteinerizados em clusters Kubernetes como o Minikube é simples. Use recursos de Deployment e Service para declarar e acessar o workload. Normalmente, defina-os em um arquivo YAML:
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: order-service
namespace: default
spec:
replicas: 1
template:
metadata:
labels:
app: order-service
version: v1
spec:
containers:
- name: order-service
image: kchandrakant/order-service:v1
resources:
requests:
cpu: 0.1
memory: 200
---
apiVersion: v1
kind: Service
metadata:
name: order-service
spec:
ports:
- port: 80
targetPort: 80
protocol: TCP
name: http
selector:
app: order-service
Este é um exemplo básico de definição de Deployment e Service para o order-service. Crie arquivos YAML semelhantes para inventory-service e shipping-service.
Implante esses recursos facilmente usando kubectl:
kubectl apply -f booking-service.yaml -f inventory-service.yaml -f shipping-service.yaml
Como habilitamos a injeção automática de proxies sidecar Envoy para o namespace padrão, tudo será gerenciado. Ou, injete manualmente os proxies sidecar Envoy usando o comando kube-inject do istioctl.
O Istio lida principalmente com o tráfego da malha. Por padrão, o tráfego de ou para fora da malha é bloqueado. O Istio usa gateways para gerenciar o tráfego de entrada e saída da malha, dando controle preciso sobre o que entra ou sai. O Istio oferece implantações de proxy de gateway preconfiguradas: istio-ingressgateway e istio-egressgateway.
Crie um Gateway e um Serviço Virtual para seu aplicativo:
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: booking-gateway
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: booking
spec:
hosts:
- "*"
gateways:
- booking-gateway
http:
- match:
- uri:
prefix: /api/v1/booking
route:
- destination:
host: booking-service
port:
number: 8080
Estamos usando o controlador de ingresso padrão do Istio aqui. Além disso, definimos um serviço virtual para rotear solicitações para o serviço de reservas.
Você também pode definir um gateway de saída para o tráfego de saída da malha.
Implantamos um aplicativo simples no Kubernetes com Istio. Vamos explorar os poderosos recursos do Istio e ver como eles podem aprimorar nosso aplicativo.
Imagine implantar várias versões de um microserviço como shipping-service. Você deseja introduzir gradualmente novos recursos sem impactar todos os usuários. O roteamento de solicitações permite que você faça isso, direcionando uma parte do tráfego para a versão mais recente.
Use regras de roteamento de serviços virtuais para conseguir isso.
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: shipping-service
spec:
hosts:
- shipping-service
http:
- route:
- destination:
host: shipping-service
subset: v1
weight: 90
- destination:
host: shipping-service
subset: v2
weight: 10
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: shipping-service
spec:
host: shipping-service
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2
As regras de roteamento também podem filtrar tráfego com base em cabeçalhos ou outros atributos. O campo destination especifica o serviço de destino para solicitações correspondentes.
Previna falhas em cascata com circuit breakers. Esse padrão detecta erros e interrompe temporariamente o tráfego para serviços que estão falhando, protegendo a saúde geral do seu aplicativo.
A DestinationRule do Istio permite configurar o comportamento de circuit breaking para serviços como o inventory-service.
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: inventory-service
spec:
host: inventory-service
trafficPolicy:
connectionPool:
tcp:
maxConnections: 1
http:
http1MaxPendingRequests: 1
maxRequestsPerConnection: 1
outlierDetection:
consecutive5xxErrors: 1
interval: 1s
baseEjectionTime: 3m
maxEjectionPercent: 100
Limitando o número máximo de conexões, solicitações pendentes e solicitações por conexão, você pode gerenciar o tráfego de forma eficaz e prevenir sobrecarga.
A TLS mútua garante comunicação segura entre os serviços, exigindo que ambas as partes se autentiquem. O Istio habilita automaticamente a TLS mútua para serviços usando seus proxies.
Embora o Istio imponha a TLS mútua entre serviços proxy, o tráfego em texto simples ainda pode atingir serviços sem proxies. Use políticas PeerAuthentication para aplicar a TLS mútua em toda a sua malha.
apiVersion: "security.istio.io/v1beta1"
kind: "PeerAuthentication"
metadata:
name: "default"
namespace: "istio-system"
spec:
mtls:
mode: STRICT
Você pode aplicar TLS mútua no nível da malha, namespace ou serviço. Políticas específicas de serviço substituem as configurações de namespace.
JSON Web Tokens (JWT) são um padrão para transmitir informações de usuários de forma segura. Eles são amplamente usados para autenticação e autorização.
A AuthorizationPolicy do Istio permite controlar o acesso a serviços como o booking-service com base nas reivindicações do JWT.
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
name: require-jwt
namespace: default
spec:
selector:
matchLabels:
app: booking-service
action: ALLOW
rules:
- from:
- source:
requestPrincipals: ["[email protected]/[email protected]"]
Exija JWTs válidos com reivindicações específicas para acesso autorizado. O Istio cria um atributo requestPrincipal a partir das reivindicações de emissor e sujeito do JWT.
O Istio simplifica a gestão de desafios comuns em arquiteturas de microserviços distribuídos. No entanto, sua complexidade pode adicionar sobrecarga às implantações. Como qualquer ferramenta, o Istio não é uma solução mágica e requer consideração cuidadosa.
Embora os service meshes ofereçam vantagens, considere essas desvantagens:
Os service meshes oferecem benefícios, mas a avaliação cuidadosa da complexidade do seu aplicativo é crucial. Pese as vantagens contra a complexidade adicionada.
O Istio é um service mesh popular apoiado por líderes da indústria, mas não é a única opção. Aqui está uma breve visão geral do Linkerd e Consul.
Linkerd é um service mesh Kubernetes-native open-source que está ganhando popularidade. É um projeto incubado pela CNCF e funciona de forma semelhante ao Istio, usando proxies TCP. O micro-proxy baseado em Rust do Linkerd é chamado Linkerd-proxy.
O Linkerd é geralmente mais simples do que o Istio devido ao seu foco no Kubernetes. No entanto, seu conjunto de recursos se assemelha ao do Istio, e sua arquitetura central é semelhante. O Linkerd consiste em uma interface de usuário, plano de dados e plano de controle.
Consul é um service mesh open-source da HashiCorp que se integra a outras ferramentas de infraestrutura da HashiCorp. O plano de dados do Consul suporta modelos de integração nativos e com proxy. Ele oferece um proxy embutido, mas também pode funcionar com o Envoy.
O Consul opera além do Kubernetes, oferecendo suporte a plataformas como Nomad. Ele usa agentes em cada nó para realizar verificações de integridade e se comunica com servidores Consul para armazenamento e replicação de dados. Embora ofereça recursos padrão de service mesh, o Consul é mais complexo de implantar e gerenciar.
Este tutorial explorou os fundamentos da arquitetura de service mesh e as poderosas capacidades do Istio. Dissecamos a estrutura central do Istio, seus componentes e aplicações práticas. Ao final, você deve ter uma sólida compreensão de como instalar e utilizar o Istio em cenários comuns.
Feedback dos Clientes
As avaliações a seguir foram coletadas em nosso site.
Tem Dúvidas? Encontre as Respostas Aqui!
Nossas Perguntas Mais Frequentes