Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Microsserviços - Monitoramento e Solução de Problemas com Istio (Service Mesh)

Microsserviços - Monitoramento e Solução de Problemas com Istio (Service Mesh)

Microsserviços são complexos e muito difíceis, não é uma mera afirmativa. Todo desenvolvedor chega a essa conclusão quando coloca o primeiro projeto em produção usando a arquitetura.

O mais legal de tudo é que grandes empresas (com recursos) também chegaram à essa mesma conclusão, e para resolver os principais problemas encontrados nesses cenários elas criaram soluções open source para ajudar a comunidade, como a Netflix por exemplo.

Apesar de microsserviços serem realmente difíceis, a disseminação do conhecimento sobre esse tema evoluiu bastante. Escolha a linguagem e procure por soluções de circuit breaking no principal repositório de pacotes do idioma para ver o que encontra. O grande problema dessas soluções é que devem ser implementadas em todos os artefatos do sistema, agora imagine em uma arquitetura com pouco mais de 50 microsserviços, isso pode ser complicado :(

Com esse cenário em mente, ao invés de tentar resolver os problemas em nível de aplicação, vamos aplicar essas estas soluções à infraestrutura.

E é finalmente nesse momento que vamos conhecer o Service Mash Istio. Ele foi criado para resolver situações como as descritas acima, utilizando o Envoy como implementação de sidecar, ele permite que você aplique soluções distribuídas em todos os microsserviços sem adicionar nenhuma linha de configuração às suas aplicações.

O Istio resolve de forma global problemas como tracing, circuit breaking, roteamento, injeção, autenticação, etc. E nessa talk vamos entender como o Istio funciona e principalmente, como podemos utilizá-lo para monitorar e solucionar problemas de forma escalável.

8ec5e76c7e812fa175b2e1c7ac4a43d0?s=128

Marcos Vinicius

August 01, 2020
Tweet

Transcript

  1. Microsserviços - Monitoramento e Solução de Problemas com Istio (Service

    Mesh) JS+ Tech Talks
  2. Marcos V. Leal Software engineer at @JuntosSomos+

  3. Marcos V. Leal <marcosleal.prd@gmail.com> Agenda • Monólito vs Microsserviços •

    Porque Service Mesh • Istio: Sidecar e Arquitetura • Controle de Tráfego • Observabilidade • Segurança • Istio na prática • Opções de mercado • Considerações
  4. Contexto

  5. Marcos V. Leal <marcosleal.prd@gmail.com> Sua jornada para a grandiosidade Self-Service,

    On-Demand, Infraestrutura Elástica Automação CI & CD Deployment Pipeline Técnicas avançadas de deployment Microsserviços Cultura DevOps
  6. Marcos V. Leal <marcosleal.prd@gmail.com> Monólito MyApp

  7. Marcos V. Leal <marcosleal.prd@gmail.com> Aplicação

  8. Marcos V. Leal <marcosleal.prd@gmail.com> Módulos / Componentes

  9. Marcos V. Leal <marcosleal.prd@gmail.com> Microsserviços

  10. Marcos V. Leal <marcosleal.prd@gmail.com> Microsserviços

  11. Marcos V. Leal <marcosleal.prd@gmail.com> Microsserviços

  12. Marcos V. Leal <marcosleal.prd@gmail.com> Rede de Serviços

  13. Marcos V. Leal <marcosleal.prd@gmail.com> Banco de Dados Próprios

  14. Marcos V. Leal <marcosleal.prd@gmail.com> Múltiplos Pontos de Entrada

  15. Marcos V. Leal <marcosleal.prd@gmail.com> Múltiplos Times & Pipelines

  16. 2 Pizzas Marcos V. Leal <marcosleal.prd@gmail.com> Princípios de microsserviços 1.

    Independência de implantação - as atualizações em um microsserviço individual não têm impacto negativo em nenhum outro componente do sistema. Otimizado para substituição. 2. Organizado em torno das capacidades de negócios. 3. Produtos, não projetos. 4. Focado API. 5. Endpoints inteligentes e pipelines burros. 6. Governança descentralizada. 7. Gerenciamento de dados descentralizado. 8. Automação de infraestrutura (infraestrutura como código). 9. Design para falha. 10. Design Evolucionário. https://martinfowler.com/articles/microservices.html#CharacteristicsOfAMicroserviceArchitecture
  17. Marcos V. Leal <marcosleal.prd@gmail.com> Velho, Ultrapassado, Jeito Errado... Novo, Moderno,

    Jeito Certo...
  18. Marcos V. Leal <marcosleal.prd@gmail.com> Microsserviços = Computação Distribuída SO Service

    A SO Service B SO Service C
  19. Marcos V. Leal <marcosleal.prd@gmail.com> Falácias da computação distribuída The network

    is reliable. Latency is zero. Bandwidth is infinite. The network is secure. Topology doesn't change. There is one administrator. Transport cost is zero. The network is homogeneous. https://en.wikipedia.org/wiki/Fallacies_of_distributed_computing
  20. Marcos V. Leal <marcosleal.prd@gmail.com> Falácias da computação distribuída The network

    is reliable. Circuit breaking and load balancing Latency is zero. Timeouts and retries Bandwidth is infinite. Rating and limiting The network is secure. Mutual TLS Topology doesn't change. Service discovery There is one administrator. Role-based access control Transport cost is zero. gRPC / GraphQL The network is homogeneous. Dynamic routing - A/B, canary deployments https://en.wikipedia.org/wiki/Fallacies_of_distributed_computing
  21. Marcos V. Leal <marcosleal.prd@gmail.com> Falha de um serviço

  22. Marcos V. Leal <marcosleal.prd@gmail.com> Falha em cascata

  23. Capacidades Fundamentais

  24. Marcos V. Leal <marcosleal.prd@gmail.com> Capacidades de Microsserviços MyService Monitoring Tracing

    API Discovery Invocation Resilience Pipeline Authentication Logging Elasticity
  25. Marcos V. Leal <marcosleal.prd@gmail.com> Capacidades Incorporadas SO Service A SO

    Service B SO Service C Tracing Discovery Circuit Breaking Metrics Tracing Discovery Circuit Breaking Metrics Tracing Discovery Circuit Breaking Metrics
  26. Marcos V. Leal <marcosleal.prd@gmail.com>

  27. Marcos V. Leal <marcosleal.prd@gmail.com> Capacidades + K8s MyService Monitoring Tracing

    API Discovery Invocation Resilience Pipeline Authentication Logging Elasticity
  28. Marcos V. Leal <marcosleal.prd@gmail.com> Capacidades + Jenkins MyService Monitoring Tracing

    API Discovery Invocation Resilience Pipeline Authentication Logging Elasticity
  29. Marcos V. Leal <marcosleal.prd@gmail.com> Capacidades + Istio MyService Monitoring Tracing

    API (APM) Discovery Invocation Resilience Pipeline Authentication Logging Elasticity
  30. Istio

  31. Marcos V. Leal <marcosleal.prd@gmail.com> O que é uma Service Mesh?

    Uma malha de serviço (service mesh) é uma camada de infraestrutura dedicada para lidar com a comunicação serviço a serviço. É responsável pela entrega confiável de solicitações por meio da topologia complexa de serviços que inclui um aplicativo nativo da nuvem moderno. Na prática, a malha de serviço é normalmente implementada como uma matriz de proxies de rede leves que são implantados juntamente com o código do aplicativo, sem que o aplicativo precise estar ciente. Tradução livre de https://buoyant.io/2017/04/25/whats-a-service-mesh-and-why-do-i-need-one/
  32. Isso é um sidecar!

  33. Marcos V. Leal <marcosleal.prd@gmail.com> Antes do Istio Container Service A

    POD Service A Tracing Discovery Circuit Breaking Metrics Container Service A POD Service B Tracing Discovery Circuit Breaking Metrics Container Service A POD Service C Tracing Discovery Circuit Breaking Metrics
  34. Marcos V. Leal <marcosleal.prd@gmail.com> Depois do Istio Container POD Service

    A Sidecar container Container POD Service B Sidecar container Container POD Service C Sidecar container
  35. Marcos V. Leal <marcosleal.prd@gmail.com> Proxy Envoy (sidecar) Container POD Service

    A Container POD Service B Container POD Service C HTTP1.1, HTTP/2, gRPC, TCP com ou sem mTLS HTTP1.1, HTTP/2, gRPC, TCP com ou sem mTLS HTTP1.1, HTTP/2, gRPC, TCP com ou sem mTLS
  36. Marcos V. Leal <marcosleal.prd@gmail.com> Injeção (Manual)

  37. Marcos V. Leal <marcosleal.prd@gmail.com> Injeção (Automática)

  38. Marcos V. Leal <marcosleal.prd@gmail.com> Istio Data Plane vs Control Plane

  39. Marcos V. Leal <marcosleal.prd@gmail.com> Kubernetes Ingress POD SERVICE INGRESS App

    Container POD App Container POD App Container Load Balancer
  40. Marcos V. Leal <marcosleal.prd@gmail.com> Istio Ingress POD SERVICE GATEWAY App

    Container POD App Container POD App Container ISTIO INGRESS VIRTUAL SERVICE DESTINATION RULES Load Balancer
  41. Marcos V. Leal <marcosleal.prd@gmail.com> Istio - Kubernetes CRDs Adapters.config.istio.io Apikeys.config.istio.io

    Attributemanifests.config.istio.io Authorizations.config.istio.io Bypasses.config.istio.io Checknothings.config.istio.io Circonuses.config.istio.io Cloudwatches.config.istio.io Deniers.config.istio.io Destinationrules.networking.istio.io Dogstatsds.config.istio.io Edges.config.istio.io Envoyfilters.networking.istio.io Fluentds.config.istio.io Gateways.networking.istio.io Handlers.config.istio.io Httpapispecbindings.config.istio.io Httpapispecs.config.istio.io Instances.config.istio.io Kubernetesenvs.config.istio.io Kuberneteses.config.istio.io Listcheckers.config.istio.io Listentries.config.istio.io Logentries.config.istio.io Memquotas.config.istio.io Meshpolicies.authentication.istio.io Metrics.config.istio.io Noops.config.istio.io Opas.config.istio.io Policies.authentication.istio.io Prometheuses.config.istio.io Quotas.config.istio.io Quotaspecbindings.config.istio.io Quotaspecs.config.istio.io Rbacconfigs.rbac.istio.io Rbacs.config.istio.io Redisquotas.config.istio.io Reportnothings.config.istio.io Rules.config.istio.io Servicecontrolreports.config.istio.io Servicecontrols.config.istio.io Serviceentries.networking.istio.io Servicerolebindings.rbac.istio.io Serviceroles.rbac.istio.io Signalfxs.config.istio.io Solarwindses.config.istio.io Stackdrivers.config.istio.io Statsds.config.istio.io Stdios.config.istio.io Templates.config.istio.io Tracespans.config.istio.io Virtualservices.networking.istio.io https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/
  42. Controle de Tráfego

  43. Marcos V. Leal <marcosleal.prd@gmail.com> Controle de Tráfego • Blue /

    Green deployment • Canary deployment (really) • Mirroring / Dark Launch / Shadow
  44. Blue / Green Deployment

  45. Marcos V. Leal <marcosleal.prd@gmail.com> Blue/Green Deployment DEVELOPMENT QA STAGING PRODUCTION

    ROUTER USERS BUILD SCM
  46. Marcos V. Leal <marcosleal.prd@gmail.com> Blue/Green Deployment DEVELOPMENT QA STAGING PRODUCTION

    ROUTER USERS BUILD SCM
  47. Marcos V. Leal <marcosleal.prd@gmail.com> Blue/Green Deployment DEVELOPMENT QA STAGING PRODUCTION

    ROUTER USERS BUILD SCM
  48. Marcos V. Leal <marcosleal.prd@gmail.com> Blue/Green Deployment DEVELOPMENT QA STAGING PRODUCTION

    ROUTER USERS BUILD SCM
  49. Marcos V. Leal <marcosleal.prd@gmail.com> Blue/Green Deployment DEVELOPMENT QA STAGING PRODUCTION

    ROUTER USERS BUILD SCM
  50. Marcos V. Leal <marcosleal.prd@gmail.com> Blue/Green Deployment DEVELOPMENT QA STAGING PRODUCTION

    ROUTER USERS SCM
  51. Marcos V. Leal <marcosleal.prd@gmail.com> Blue/Green Deployment DEVELOPMENT QA STAGING PRODUCTION

    ROUTER USERS SCM x
  52. Marcos V. Leal <marcosleal.prd@gmail.com> Blue/Green Deployment DEVELOPMENT QA STAGING PRODUCTION

    ROUTER USERS SCM
  53. Canary Deployment

  54. Marcos V. Leal <marcosleal.prd@gmail.com> Canary Deployment DEVELOPMENT QA STAGING PRODUCTION

    ROUTER USERS SCM
  55. Marcos V. Leal <marcosleal.prd@gmail.com> Canary Deployment DEVELOPMENT QA STAGING PRODUCTION

    ROUTER USERS SCM
  56. Marcos V. Leal <marcosleal.prd@gmail.com> Canary Deployment DEVELOPMENT QA STAGING PRODUCTION

    ROUTER USERS SCM
  57. Marcos V. Leal <marcosleal.prd@gmail.com> Canary Deployment DEVELOPMENT QA STAGING PRODUCTION

    ROUTER USERS SCM
  58. Marcos V. Leal <marcosleal.prd@gmail.com> Canary Deployment DEVELOPMENT QA STAGING PRODUCTION

    ROUTER USERS SCM
  59. Marcos V. Leal <marcosleal.prd@gmail.com> Canary Deployment DEVELOPMENT QA STAGING PRODUCTION

    ROUTER USERS SCM
  60. Marcos V. Leal <marcosleal.prd@gmail.com> Canary Deployment DEVELOPMENT QA STAGING PRODUCTION

    ROUTER USERS SCM
  61. Marcos V. Leal <marcosleal.prd@gmail.com> Canary Deployment DEVELOPMENT QA STAGING PRODUCTION

    ROUTER USERS SCM
  62. Marcos V. Leal <marcosleal.prd@gmail.com> Canary Deployment DEVELOPMENT QA STAGING PRODUCTION

    ROUTER USERS SCM
  63. Marcos V. Leal <marcosleal.prd@gmail.com> Canary Deployment DEVELOPMENT QA STAGING PRODUCTION

    ROUTER USERS SCM
  64. None
  65. Marcos V. Leal <marcosleal.prd@gmail.com> Canary com Kubernetes ROUTER USERS SERVICE

    Container POD APP v1 Container POD APP v2 50% 50%
  66. Marcos V. Leal <marcosleal.prd@gmail.com> Canary com Istio ROUTER USERS SERVICE

    Container POD APP v1 Container POD APP v2 95% 5%
  67. Dark Launch

  68. Marcos V. Leal <marcosleal.prd@gmail.com> Dark Launch DEVELOPMENT QA STAGING PRODUCTION

    ROUTER USERS BUILD SCM
  69. Marcos V. Leal <marcosleal.prd@gmail.com> Dark Launch DEVELOPMENT QA STAGING PRODUCTION

    ROUTER USERS BUILD SCM
  70. Marcos V. Leal <marcosleal.prd@gmail.com> Dark Launch DEVELOPMENT QA STAGING PRODUCTION

    ROUTER USERS BUILD SCM
  71. Marcos V. Leal <marcosleal.prd@gmail.com> Dark Launch DEVELOPMENT QA STAGING PRODUCTION

    ROUTER USERS BUILD SCM
  72. Marcos V. Leal <marcosleal.prd@gmail.com> Dark Launch DEVELOPMENT QA STAGING PRODUCTION

    ROUTER USERS BUILD SCM
  73. Marcos V. Leal <marcosleal.prd@gmail.com> Dark Launch DEVELOPMENT QA STAGING PRODUCTION

    ROUTER USERS SCM
  74. Marcos V. Leal <marcosleal.prd@gmail.com> Dark Launch DEVELOPMENT QA STAGING PRODUCTION

    ROUTER USERS SCM X
  75. Observabilidade

  76. Prometheus

  77. Prometheus

  78. Grafana

  79. Grafana

  80. Kiali

  81. Kiali

  82. Jeager

  83. Jeager

  84. Segurança

  85. Marcos V. Leal <marcosleal.prd@gmail.com> Capacidades de Segurança • Egress blocking

    • mTLS - Encryption • Access Control • JSON Web Token (JWT) Authentication • Role-based Access Control (RBAC) Authorization
  86. Marcos V. Leal <marcosleal.prd@gmail.com> Capacidades de Segurança • Egress blocking

    • mTLS - Encryption • Access Control • JSON Web Token (JWT) Authentication • Role-based Access Control (RBAC) Authorization
  87. Egress

  88. Marcos V. Leal <marcosleal.prd@gmail.com> Egress blocking

  89. Marcos V. Leal <marcosleal.prd@gmail.com> Egress blocking

  90. Marcos V. Leal <marcosleal.prd@gmail.com> Egress blocking

  91. mTLS

  92. Marcos V. Leal <marcosleal.prd@gmail.com> Mutual TLS Container POD Service A

    Container POD Service B Container POD Service C
  93. Marcos V. Leal <marcosleal.prd@gmail.com> Mutual TLS Container POD Service A

    Container POD Service B Container POD Service C Container POD Eavesdropper
  94. Marcos V. Leal <marcosleal.prd@gmail.com> Mutual TLS Container POD Service A

    Container POD Service B Container POD Service C Container POD Eavesdropper
  95. Access Control

  96. Marcos V. Leal <marcosleal.prd@gmail.com> Controle de Acesso Container POD Service

    A Container POD Service B Container POD Service C
  97. Marcos V. Leal <marcosleal.prd@gmail.com> Controle de Acesso Container POD Service

    A Container POD Service B Container POD Service C
  98. Marcos V. Leal <marcosleal.prd@gmail.com> Controle de Acesso Container POD Service

    A Container POD Service B Container POD Service C
  99. Marcos V. Leal <marcosleal.prd@gmail.com> JSON Web Tokens

  100. Marcos V. Leal <marcosleal.prd@gmail.com> JSON Web Tokens • ORY Hydra

    • Keycloak • Auth0 • Autenticação Firebase • Google Auth https://istio.io/latest/docs/concepts/security/#istio-identity
  101. Bookinfo (demo)

  102. Marcos V. Leal <marcosleal.prd@gmail.com> Bookinfo - Visão https://istio.io/latest/docs/examples/bookinfo/

  103. Marcos V. Leal <marcosleal.prd@gmail.com> Bookinfo - Visão https://istio.io/latest/docs/examples/bookinfo/

  104. Outras opções

  105. Marcos V. Leal <marcosleal.prd@gmail.com>

  106. Considerações

  107. Istio é complexo.

  108. MUITO complexo.

  109. Ative o mTLS.

  110. Leia istio.io/latest/docs

  111. Não use com imprudência ou imperícia.

  112. É complexo, mas é INCRÍVEL. Não se esqueça disso.

  113. Marcos V. Leal <marcosleal.prd@gmail.com> Referências • https://istio.io • https://kind.sigs.k8s.io •

    https://k9scli.io • https://en.wikipedia.org/wiki/Fallacies_of_distributed_computing • https://12factor.net/pt_br • https://principlesofchaos.org • http://kubernetes.io • https://www.envoyproxy.io • https://martinfowler.com/articles/microservices.html#CharacteristicsOfAMicroserviceArchitecture • https://buoyant.io/2017/04/25/whats-a-service-mesh-and-why-do-i-need-one • https://en.wikipedia.org/wiki/Eavesdropping • https://kiali.io • https://prometheus.io/ • https://grafana.com/ • https://www.jaegertracing.io/
  114. Follow me Be a better version of yourself every day.

    twitter.com/marcosleal_prd instagram.com/marcosleal.prd medium.com/@marcosleal.prd linkedin.com/in/marcosleal-prd speakerdeck.com/marcosleal_prd marcosleal.prd@gmail.com