{"id":32766,"date":"2019-10-31T21:48:48","date_gmt":"2019-10-31T18:48:48","guid":{"rendered":"https:\/\/prohoster.info\/blog\/kak-zapustit-istio-ispolzuya-kubernetes-v-production-chast-1\/"},"modified":"2019-10-31T21:48:48","modified_gmt":"2019-10-31T18:48:48","slug":"kak-zapustit-istio-ispolzuya-kubernetes-v-production-chast-1","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/kak-zapustit-istio-ispolzuya-kubernetes-v-production-chast-1","title":{"rendered":"Como executar o Istio usando Kubernetes em produ\u00e7\u00e3o. Parte 1","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>O que \u00e9 <noindex><a rel=\"nofollow\" href=\"https:\/\/istio.io\">Istio<\/a><\/noindex>? \u042d\u0442\u043e \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 Service mesh, \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 \u043d\u0430\u0434 \u0441\u0435\u0442\u044c\u044e. \u041c\u044b \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0432\u0435\u0441\u044c \u0438\u043b\u0438 \u0447\u0430\u0441\u0442\u044c \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0441 \u043d\u0438\u043c. \u041a\u0430\u043a\u043e\u0439 \u0438\u043c\u0435\u043d\u043d\u043e? \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u0435\u043b\u0430\u0435\u043c \u0443\u043c\u043d\u044b\u0439 \u0440\u043e\u0443\u0442\u0438\u043d\u0433, \u0438\u043b\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u043f\u043e\u0434\u0445\u043e\u0434 circuit breaker, \u043c\u043e\u0436\u0435\u043c \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u00abcanary deployment\u00bb, \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u044f \u0442\u0440\u0430\u0444\u0438\u043a \u043d\u0430 \u043d\u043e\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0441\u0435\u0440\u0432\u0438\u0441\u0430, \u0430 \u043c\u043e\u0436\u0435\u043c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u043f\u043e\u0445\u043e\u0434\u044b \u0438\u0437 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0432\u043e \u0432\u043d\u0435\u0448\u043d\u044e\u044e \u0441\u0435\u0442\u044c. \u0415\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c policy \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0434\u043b\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u043f\u043e\u0445\u043e\u0434\u043e\u0432 \u043c\u0435\u0436\u0434\u0443 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u0430\u043c\u0438. \u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432\u0441\u044e \u043a\u0430\u0440\u0442\u0443 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043f\u043e \u0441\u0435\u0442\u0438 \u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0443\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u0431\u043e\u0440 \u043c\u0435\u0442\u0440\u0438\u043a \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e \u0434\u043b\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.<\/p>\n<p>Voc\u00ea pode ler sobre o mecanismo de funcionamento na <noindex><a rel=\"nofollow\" href=\"https:\/\/istio.io\/docs\/concepts\/\">documenta\u00e7\u00e3o oficial<\/a><\/noindex>. O Istio \u00e9 realmente uma ferramenta poderosa que permite resolver uma s\u00e9rie de tarefas e problemas. Neste artigo, gostaria de responder \u00e0s principais perguntas que geralmente surgem no in\u00edcio do trabalho com o Istio. Isso ajudar\u00e1 voc\u00ea a entender melhor.<\/p>\n<p><img decoding=\"async\" alt=\"Como executar o Istio usando Kubernetes em produ\u00e7\u00e3o. Parte 1\" src=\"\/wp-content\/uploads\/2019\/04\/7ab676ec42cacafc97099d5af9f6332a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Princ\u00edpio de funcionamento<\/h3>\n<p>\nO Istio \u00e9 composto por duas \u00e1reas principais \u2014 o control plane e o data plane. O control plane cont\u00e9m os componentes principais que garantem o funcionamento correto dos demais. Na vers\u00e3o atual (1.0), o control plane possui tr\u00eas componentes principais: Pilot, Mixer, Citadel. N\u00e3o iremos abordar o Citadel, pois ele \u00e9 necess\u00e1rio para a gera\u00e7\u00e3o de certificados que garantem o funcionamento do mutual TLS entre os servi\u00e7os. Vamos analisar mais detalhadamente a estrutura e o prop\u00f3sito do Pilot e do Mixer.<\/p>\n<p><img decoding=\"async\" alt=\"Como executar o Istio usando Kubernetes em produ\u00e7\u00e3o. Parte 1\" src=\"\/wp-content\/uploads\/2019\/04\/1e2b76b5ec12343dee7728e505321908.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPilot \u00e9 o principal componente de gerenciamento, que distribui todas as informa\u00e7\u00f5es sobre o que temos no cluster \u2013 servi\u00e7os, seus endpoints e regras de roteamento (como, por exemplo, regras para Canary deployment ou regras de circuit breaker).<\/p>\n<p>Mixer \u00e9 um componente opcional do control plane, que fornece a capacidade de coletar m\u00e9tricas, logs e qualquer informa\u00e7\u00e3o sobre a intera\u00e7\u00e3o de rede. Ele tamb\u00e9m monitora a conformidade com as regras de Policy e limita\u00e7\u00f5es de taxa.<\/p>\n<p>O data plane \u00e9 implementado por meio de containers sidecar proxy. O poderoso <noindex><a rel=\"nofollow\" href=\"https:\/\/www.envoyproxy.io\/\">servidor proxy envoy<\/a><\/noindex>. Ele pode ser substitu\u00eddo por outra implementa\u00e7\u00e3o, como nginx (nginmesh).<\/p>\n<p>Para que o Istio opere de forma totalmente transparente para as aplica\u00e7\u00f5es, h\u00e1 um sistema de inje\u00e7\u00e3o autom\u00e1tica. A \u00faltima implementa\u00e7\u00e3o \u00e9 adequada para vers\u00f5es do Kubernetes 1.9+ (mutational admission webhook). Para as vers\u00f5es 1.7 e 1.8 do Kubernetes, h\u00e1 a op\u00e7\u00e3o de usar o Initializer.<\/p>\n<p>Os containers sidecar se conectam ao Pilot por meio do protocolo GRPC, que permite otimizar o modelo de push para as altera\u00e7\u00f5es que ocorrem no cluster. O GRPC come\u00e7ou a ser utilizado no Envoy a partir da vers\u00e3o 1.6 e no Istio \u00e9 usado desde a vers\u00e3o 0.8, representando-se como pilot-agent \u2014 uma camada em golang sobre o envoy, que configura os par\u00e2metros de inicializa\u00e7\u00e3o.<\/p>\n<p>Pilot e Mixer s\u00e3o componentes completamente stateless, mantendo todo o estado na mem\u00f3ria. A configura\u00e7\u00e3o para eles \u00e9 definida na forma de Recursos Customizados do Kubernetes, que s\u00e3o armazenados no etcd. <br \/>\nO Istio-agent obt\u00e9m o endere\u00e7o do Pilot e abre um stream GRPC para ele. <\/p>\n<p>Como j\u00e1 mencionei, o Istio implementa toda a funcionalidade de forma completamente transparente para os aplicativos. Vamos entender como. O algoritmo \u00e9 o seguinte:<\/p>\n<ol>\n<li>Implantamos uma nova vers\u00e3o do servi\u00e7o.<\/li>\n<li>Dependendo da abordagem de inje\u00e7\u00e3o do cont\u00eainer sidecar, o cont\u00eainer istio-init e o cont\u00eainer istio-agent (envoy) s\u00e3o adicionados na fase de aplica\u00e7\u00e3o da configura\u00e7\u00e3o, ou podem j\u00e1 ter sido inseridos manualmente na descri\u00e7\u00e3o da entidade Pod do Kubernetes.<\/li>\n<li>O cont\u00eainer istio-init consiste em um script que aplica regras iptables ao pod. Existem duas op\u00e7\u00f5es para configurar o redirecionamento de tr\u00e1fego para o cont\u00eainer istio-agent: usar regras de redirecionamento iptables ou <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kristrev\/tproxy-example\/blob\/master\/tproxy_example.c\">TPROXY<\/a><\/noindex>. No momento da reda\u00e7\u00e3o deste artigo, a abordagem com regras de redirecionamento \u00e9 a usada por padr\u00e3o. No istio-init, \u00e9 poss\u00edvel configurar qual tr\u00e1fego deve ser interceptado e direcionado para o istio-agent. Por exemplo, para interceptar todo o tr\u00e1fego de entrada e sa\u00edda, \u00e9 necess\u00e1rio definir os par\u00e2metros <code>-i<\/code> e <code>-b<\/code> como valor <code>*<\/code>. \u00c9 poss\u00edvel especificar portas espec\u00edficas que devem ser interceptadas. Para evitar interceptar uma sub-rede espec\u00edfica, \u00e9 poss\u00edvel indic\u00e1-la com a flag <code>-x<\/code>.<\/li>\n<li>Ap\u00f3s a execu\u00e7\u00e3o dos cont\u00eaineres init, os principais s\u00e3o iniciados, incluindo o pilot-agent (envoy). Ele se conecta ao Pilot j\u00e1 implementado via GRPC e obt\u00e9m informa\u00e7\u00f5es sobre todos os servi\u00e7os existentes e pol\u00edticas de roteamento no cluster. Com base nos dados recebidos, ele configura os clusters e define diretamente os endpoints dos nossos aplicativos no cluster Kubernetes. Tamb\u00e9m \u00e9 importante notar um ponto fundamental: o envoy configura dinamicamente os listeners (pares IP, port) que come\u00e7a a escutar. Portanto, quando as solicita\u00e7\u00f5es chegam ao pod, s\u00e3o redirecionadas por meio das regras de redirecionamento iptables para o sidecar, e o envoy j\u00e1 pode processar essas conex\u00f5es com sucesso e entender para onde deve encaminhar o tr\u00e1fego a seguir. Al\u00e9m disso, neste est\u00e1gio, informa\u00e7\u00f5es s\u00e3o enviadas ao Mixer, que examinaremos mais adiante, e s\u00e3o enviados spans de rastreamento.<\/li>\n<\/ol>\n<p>\nNo final, temos toda uma rede de proxies envoy que podemos configurar a partir de um \u00fanico ponto (Pilot). Todas as requisi\u00e7\u00f5es inbound e outbound passam pelo envoy. Al\u00e9m disso, apenas o tr\u00e1fego TCP \u00e9 interceptado. Isso significa que o IP do servi\u00e7o Kubernetes \u00e9 resolvido usando kube-dns via UDP sem altera\u00e7\u00f5es. Ap\u00f3s a resolu\u00e7\u00e3o, ocorre a intercepta\u00e7\u00e3o da requisi\u00e7\u00e3o de sa\u00edda e o processamento pelo envoy, que decide para qual endpoint a requisi\u00e7\u00e3o deve ser enviada (ou n\u00e3o, em caso de pol\u00edticas de acesso ou ativa\u00e7\u00e3o do algoritmo de circuit breaker).<\/p>\n<p>Com o Pilot entendido, agora precisamos compreender como funciona o Mixer e para qu\u00ea ele serve. Voc\u00ea pode ler a documenta\u00e7\u00e3o oficial sobre ele. <noindex><a rel=\"nofollow\" href=\"https:\/\/istio.io\/docs\/concepts\/policies-and-telemetry\/overview\/\">aqui<\/a><\/noindex>.<\/p>\n<p>O Mixer, na sua forma atual, \u00e9 composto por dois componentes: istio-telemetry e istio-policy (at\u00e9 a vers\u00e3o 0.8, era um \u00fanico componente chamado istio-mixer). Ambos representam o mixer, cada um respons\u00e1vel por sua pr\u00f3pria tarefa. O istio-telemetry recebe informa\u00e7\u00f5es sobre quem est\u00e1 indo aonde e com quais par\u00e2metros, enviadas via GRPC pelos cont\u00eaineres sidecar. O istio-policy recebe requisi\u00e7\u00f5es de verifica\u00e7\u00e3o (Check) para validar se os requisitos da pol\u00edtica est\u00e3o sendo atendidos. As verifica\u00e7\u00f5es de pol\u00edtica s\u00e3o, claro, n\u00e3o feitas em cada requisi\u00e7\u00e3o, mas s\u00e3o armazenadas em cache no cliente (no sidecar) por um tempo determinado. As verifica\u00e7\u00f5es de relat\u00f3rio (Report) s\u00e3o enviadas em lotes. Vamos ver mais tarde como configur\u00e1-las e quais par\u00e2metros exatamente precisam ser enviados. <\/p>\n<p>O Mixer \u00e9 projetado como um componente de alta disponibilidade, que garante o funcionamento cont\u00ednuo da coleta e processamento de dados de telemetria. O sistema acaba se tornando um buffer em m\u00faltiplas camadas. Inicialmente, os dados s\u00e3o armazenados em buffer no lado dos cont\u00eaineres sidecar, depois no lado do mixer e, em seguida, enviados para os chamados backends do mixer. Assim, se algum componente do sistema falhar, o buffer aumenta e, ap\u00f3s a recupera\u00e7\u00e3o do sistema, \u00e9 descarregado. Os backends do mixer atuam como os pontos finais de envio de dados de telemetria: statsd, newrelic, etc. \u00c9 poss\u00edvel escrever seu pr\u00f3prio backend, o que \u00e9 bastante simples, e ver como fazer isso.<\/p>\n<p><img decoding=\"async\" alt=\"Como executar o Istio usando Kubernetes em produ\u00e7\u00e3o. Parte 1\" src=\"\/wp-content\/uploads\/2019\/04\/e7dd11d5ee26a692e1cd213578d47700.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nResumindo, o esquema de opera\u00e7\u00e3o com o istio-telemetry \u00e9 o seguinte.<\/p>\n<ol>\n<li>O servi\u00e7o 1 envia uma requisi\u00e7\u00e3o para o servi\u00e7o 2.<\/li>\n<li>Ao sair do servi\u00e7o 1, a requisi\u00e7\u00e3o \u00e9 encapsulada em seu pr\u00f3prio sidecar.<\/li>\n<li>O sidecar envoy monitora como a requisi\u00e7\u00e3o avan\u00e7a para o servi\u00e7o 2 e prepara as informa\u00e7\u00f5es necess\u00e1rias.<\/li>\n<li>Em seguida, estas informa\u00e7\u00f5es s\u00e3o enviadas ao istio-telemetry por meio de uma requisi\u00e7\u00e3o de Report.<\/li>\n<li>O istio-telemetry determina se deve enviar este Report para os backends, quais especificamente e quais dados devem ser enviados.<\/li>\n<li>O Istio-telemetry envia dados de relat\u00f3rio para o backend se necess\u00e1rio.<\/li>\n<\/ol>\n<p>\nAgora vamos ver como implantar o sistema Istio, composto apenas pelos componentes principais (Pilot e sidecar envoy).<\/p>\n<p>Para come\u00e7ar, vamos olhar a configura\u00e7\u00e3o principal (mesh) que o Pilot l\u00ea:<\/p>\n<pre><code class=\"plaintext\">apiVersion: v1\nkind: ConfigMap\nmetadata:\n  name: istio\n  namespace: istio-system\n  labels:\n    app: istio\n    service: istio\ndata:\n  mesh: |-\n\n    # por enquanto n\u00e3o habilitamos o envio de informa\u00e7\u00f5es de tracing (o pilot configurar\u00e1 os envoys de tal forma que o envio n\u00e3o ocorra)\n    enableTracing: false\n\n    # por enquanto n\u00e3o especificamos os endpoints do mixer, para que os cont\u00eaineres sidecar n\u00e3o enviem informa\u00e7\u00f5es para l\u00e1\n    #mixerCheckServer: istio-policy.istio-system:15004\n    #mixerReportServer: istio-telemetry.istio-system:15004\n\n    # definimos o intervalo de tempo com o qual o envoy far\u00e1 novas consultas ao Pilot (isso \u00e9 para a vers\u00e3o antiga do proxy envoy)\n    rdsRefreshDelay: 5s\n\n    # configura\u00e7\u00e3o padr\u00e3o para o sidecar do envoy\n    defaultConfig:\n      # similar ao rdsRefreshDelay\n      discoveryRefreshDelay: 5s\n\n      # mantemos por padr\u00e3o (caminho para a configura\u00e7\u00e3o e bin\u00e1rio do envoy)\n      configPath: \"\/etc\/istio\/proxy\"\n      binaryPath: \"\/usr\/local\/bin\/envoy\"\n\n      # nome padr\u00e3o do cont\u00eainer sidecar em execu\u00e7\u00e3o (usado, por exemplo, nos nomes de servi\u00e7o ao enviar spans de tracing)\n      serviceCluster: istio-proxy\n\n      # tempo que o envoy esperar\u00e1 antes de for\u00e7ar o fechamento de todas as conex\u00f5es estabelecidas\n      drainDuration: 45s\n      parentShutdownDuration: 1m0s\n\n      # por padr\u00e3o, s\u00e3o usadas regras de REDIRECT do iptables. Pode ser alterado para TPROXY.\n      #interceptionMode: REDIRECT\n\n      # Porta em que ser\u00e1 iniciada a painel administrativo de cada cont\u00eainer sidecar (envoy)\n      proxyAdminPort: 15000\n\n      # endere\u00e7o para onde os traces ser\u00e3o enviados via protocolo zipkin (no in\u00edcio desabilitamos o pr\u00f3prio envio, portanto este campo atualmente n\u00e3o ser\u00e1 utilizado)\n      zipkinAddress: tracing-collector.tracing:9411\n\n      # endere\u00e7o statsd para enviar m\u00e9tricas dos cont\u00eaineres envoy (desabilitado)\n      # statsdUdpAddress: aggregator:8126\n\n      # desativamos o suporte \u00e0 op\u00e7\u00e3o Mutual TLS\n      controlPlaneAuthPolicy: NONE\n\n      # endere\u00e7o onde o istio-pilot escutar\u00e1 para relatar informa\u00e7\u00f5es sobre descoberta de servi\u00e7o a todos os cont\u00eaineres sidecar\n      discoveryAddress: istio-pilot.istio-system:15007\n<\/code><\/pre>\n<p>\nTodos os principais componentes de controle (control plane) ser\u00e3o colocados no namespace istio-system no Kubernetes.<\/p>\n<p>Minimamente, precisamos implantar apenas o Pilot. Para isso, usaremos <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/istio\/istio\/blob\/release-1.0\/install\/kubernetes\/helm\/istio\/charts\/pilot\/templates\/deployment.yaml\">esta configura\u00e7\u00e3o.<\/a><\/noindex><\/p>\n<p>E configuraremos manualmente o injecting do cont\u00eainer sidecar.<\/p>\n<p>Cont\u00eainer Init:<\/p>\n<pre><code class=\"plaintext\">initContainers:\n - name: istio-init\n   args:\n   - -p\n   - \"15001\"\n   - -u\n   - \"1337\"\n   - -m\n   - REDIRECT\n   - -i\n   - '*'\n   - -b\n   - '*'\n   - -d\n   - \"\"\n   image: istio\/proxy_init:1.0.0\n   imagePullPolicy: IfNotPresent\n   resources:\n     limits:\n       memory: 128Mi\n   securityContext:\n     capabilities:\n       add:\n       - NET_ADMIN\n<\/code><\/pre>\n<p>\nE sidecar:<\/p>\n<pre><code class=\"plaintext\">       name: istio-proxy\n       args:\n         - \"bash\"\n         - \"-c\"\n         - |\n           exec \/usr\/local\/bin\/pilot-agent proxy sidecar \n           --configPath \n           \/etc\/istio\/proxy \n           --binaryPath \n           \/usr\/local\/bin\/envoy \n           --serviceCluster \n           service-name \n           --drainDuration \n           45s \n           --parentShutdownDuration \n           1m0s \n           --discoveryAddress \n           istio-pilot.istio-system:15007 \n           --discoveryRefreshDelay \n           1s \n           --connectTimeout \n           10s \n           --proxyAdminPort \n           \"15000\" \n           --controlPlaneAuthPolicy \n           NONE\n         env:\n         - name: POD_NAME\n           valueFrom:\n             fieldRef:\n               fieldPath: metadata.name\n         - name: POD_NAMESPACE\n           valueFrom:\n             fieldRef:\n               fieldPath: metadata.namespace\n         - name: INSTANCE_IP\n           valueFrom:\n             fieldRef:\n               fieldPath: status.podIP\n         - name: ISTIO_META_POD_NAME\n           valueFrom:\n             fieldRef:\n               fieldPath: metadata.name\n         - name: ISTIO_META_INTERCEPTION_MODE\n           value: REDIRECT\n         image: istio\/proxyv2:1.0.0\n         imagePullPolicy: IfNotPresent\n         resources:\n           requests:\n             cpu: 100m\n             memory: 128Mi\n           limits:\n             memory: 2048Mi\n         securityContext:\n           privileged: false\n           readOnlyRootFilesystem: true\n           runAsUser: 1337\n         volumeMounts:\n         - mountPath: \/etc\/istio\/proxy\n           name: istio-envoy\n<\/code><\/pre>\n<p>\nPara que tudo funcione corretamente, \u00e9 necess\u00e1rio criar um ServiceAccount, ClusterRole, ClusterRoleBinding e CRD para o Pilot, cujas descri\u00e7\u00f5es podem ser encontradas <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/istio\/istio\/tree\/release-1.0\/install\/kubernetes\/helm\/istio\/charts\/pilot\/templates\">aqui<\/a><\/noindex>. <\/p>\n<p>Em resumo, o servi\u00e7o no qual injetamos o sidecar com o envoy deve ser iniciado com sucesso, obter todas as descobertas do piloto e processar as solicita\u00e7\u00f5es.<\/p>\n<p>\u00c9 importante entender que todos os componentes do controle de plano s\u00e3o aplicativos sem estado e podem ser escalonados horizontalmente sem problemas. Todos os dados est\u00e3o armazenados no etcd na forma de descri\u00e7\u00f5es personalizadas de recursos do Kubernetes.<\/p>\n<p>O Istio tamb\u00e9m (ainda de forma experimental) tem a capacidade de funcionar fora do cluster e de visualizar e compartilhar a descoberta de servi\u00e7os entre v\u00e1rios clusters do Kubernetes. Mais detalhes podem ser encontrados aqui. <noindex><a rel=\"nofollow\" href=\"https:\/\/istio.io\/docs\/setup\/kubernetes\/multicluster-install\/\">aqui<\/a><\/noindex>.<\/p>\n<p>Ao instalar em ambientes multicluster, \u00e9 importante considerar as seguintes restri\u00e7\u00f5es:<\/p>\n<ol>\n<li>O Pod CIDR e o Service CIDR devem ser exclusivos em todos os clusters e n\u00e3o devem se sobrepor.<\/li>\n<li>Todos os Pod CIDR devem ser acess\u00edveis a partir de qualquer Pod CIDR entre os clusters.<\/li>\n<li>Todos os servidores de API do Kubernetes devem ser acess\u00edveis entre si.<\/li>\n<\/ol>\n<p>\nEstas s\u00e3o informa\u00e7\u00f5es iniciais que ajudar\u00e3o voc\u00ea a come\u00e7ar a trabalhar com Istio. No entanto, h\u00e1 muitos desafios adicionais. Por exemplo, as particularidades do roteamento de tr\u00e1fego externo (fora do cluster), abordagens para depura\u00e7\u00e3o de sidecars, perfilamento, configura\u00e7\u00e3o do mixer e desenvolvimento de um backend customizado para o mixer, al\u00e9m da configura\u00e7\u00e3o do mecanismo de rastreamento e sua opera\u00e7\u00e3o com o envoy.<br \/>\nVamos abordar tudo isso nas publica\u00e7\u00f5es futuras. Sinta-se \u00e0 vontade para fazer suas perguntas, tentarei esclarec\u00ea-las.<br \/>\n<br \/>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/avito\/blog\/419319\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Istio? \u042d\u0442\u043e \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 Service mesh, \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 \u043d\u0430\u0434 \u0441\u0435\u0442\u044c\u044e. \u041c\u044b \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0432\u0435\u0441\u044c \u0438\u043b\u0438 \u0447\u0430\u0441\u0442\u044c \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0441 \u043d\u0438\u043c. \u041a\u0430\u043a\u043e\u0439 \u0438\u043c\u0435\u043d\u043d\u043e? \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u0435\u043b\u0430\u0435\u043c \u0443\u043c\u043d\u044b\u0439 \u0440\u043e\u0443\u0442\u0438\u043d\u0433, \u0438\u043b\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u043f\u043e\u0434\u0445\u043e\u0434 circuit breaker, \u043c\u043e\u0436\u0435\u043c \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u00abcanary deployment\u00bb, \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u044f \u0442\u0440\u0430\u0444\u0438\u043a \u043d\u0430 \u043d\u043e\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0441\u0435\u0440\u0432\u0438\u0441\u0430, \u0430 \u043c\u043e\u0436\u0435\u043c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0442\u044c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":24545,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-32766","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Istio? \u042d\u0442\u043e \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 Service mesh, \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 \u043d\u0430\u0434 \u0441\u0435\u0442\u044c\u044e.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/kak-zapustit-istio-ispolzuya-kubernetes-v-production-chast-1\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"pt_PT\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u0430\u043a \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c Istio, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f Kubernetes \u0432 production. \u0427\u0430\u0441\u0442\u044c 1 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Istio? \u042d\u0442\u043e \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 Service mesh, \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 \u043d\u0430\u0434 \u0441\u0435\u0442\u044c\u044e.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/kak-zapustit-istio-ispolzuya-kubernetes-v-production-chast-1\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:48:48+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:48:48+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Como iniciar o Istio usando Kubernetes em produ\u00e7\u00e3o. Parte 1 | ProHoster","description":"O que \u00e9 Istio? \u00c9 uma chamada Service mesh, uma tecnologia que adiciona um n\u00edvel de abstra\u00e7\u00e3o sobre a rede.","canonical_url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/kak-zapustit-istio-ispolzuya-kubernetes-v-production-chast-1","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pt_PT","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u0430\u043a \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c Istio, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f Kubernetes \u0432 production. \u0427\u0430\u0441\u0442\u044c 1 | ProHoster","og:description":"\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Istio? \u042d\u0442\u043e \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 Service mesh, \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 \u043d\u0430\u0434 \u0441\u0435\u0442\u044c\u044e.","og:url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/kak-zapustit-istio-ispolzuya-kubernetes-v-production-chast-1","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:48:48+00:00","article:modified_time":"2019-10-31T18:48:48+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"32766","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 12:27:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:53:24","updated":"2026-01-21 12:27:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/32766","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/comments?post=32766"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/32766\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media\/24545"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media?parent=32766"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/categories?post=32766"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/tags?post=32766"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}