Essencialmente, Kubernetes expõe um serviço de back -end internamente dentro do cluster e o front-end interage com este serviço. As vagens que oferecem o serviço podem muito bem ser substituídas e ninguém notaria nada. Mas à medida que os recursos em seus aplicativos crescem, o número de serviços que você precisa manter também cresce. Cada serviço pode potencialmente conversar com todos os outros serviços no cluster, e a rede resultante é denominada Malha de serviço.
Existem muitos complementos para Kubernetes para nos ajudar a simplificar o gerenciamento desta malha de serviço. Muitos recursos de chaves, como TLS, balanceamento de carga automatizado, APIs de segurança, mesmo na rede interna, etc. são oferecidas por esses acréscimos. Muitas opções como istio, linkerd e conduíte podem ser integradas a Kubernetes para fazer isso. Estaremos analisando Istio neste post, pois é a versão 1.0 foi anunciado recentemente.
Para começar com o ISTIO, você precisaria de um cluster de Kubernetes funcionando. Existem três maneiras de conseguir isso.
Por que usar uma malha de serviço?
A instalação de uma malha de serviço, como o ISTIO, facilita o trabalho com microsserviços. Enquanto se desenvolve, você não precisa se preocupar com o fato de que seu microsserviço teria que oferecer suporte para TLs mútuos, balanceamento de carga ou qualquer outro aspecto, como a descoberta de serviços. Uma malha de serviço ideal permite conectar microsserviços, protegê -los um do outro e do mundo exterior e gerenciá -los de uma maneira organizada. Ajuda os desenvolvedores e os operadores imensamente.
Instalando o ISTIO
Instalar o ISTIO requer ter um cluster de Kubernetes. Se você tem um único cluster de nós como você obtém com Minikube ou Docker na área de trabalho, todos os comandos podem ser executados no seu nó local. No entanto, se você estiver usando um cluster de vários nós como o que o Playground Katacoda oferece, lembre-se de que a maioria dos comandos e procedimentos de configuração é feita no nó mestre. Sim, afeta todo o cluster, mas precisamos interagir apenas com o nó principal.
Começamos com clonagem (ou download) o último lançamento de Istio do Github. Os usuários do Windows podem querer visitar esta página e obter o apropriado .fecho eclair arquivo.
$ curl -l https: // git.io/getLatestistio | sh -
$ CD ISTIO-1.0.0
O nome do repos.0.0 é o último lançamento estável. Este repo contém não apenas a extensão da malha de serviço, mas também um aplicativo de amostra chamado Bookinfo para fins de experimentação. O script também adiciona o novo diretório $ pwd/istio-1.0.0/BIN para sua variável de caminho.
Este diretório contém istioctl binário que pode ser usado para interagir com o cluster. Os usuários do Windows podem simplesmente chamar o binário indo para a pasta ISTIO-1.0.0 \ bin e chamando .\ istioctl Usando PowerShell ou prompt de comando. Mas é um complemento opcional.
Se você estiver usando o Mac, pode fazer isso usando o seguinte comando:
$ Caminho de exportação = $ PWD/BIN: $ PATH
Em seguida, precisamos estender nossa API Kubernetes com definições de recursos personalizadas (CRDs) que ISTIO nos fornece.
$ kubectl Aplicar -f install/kubernetes/helm/istio/modsates/CRDS.YamlIsso pode entrar em vigor em alguns segundos e, uma vez feito, seu kube-apiserver terá extensões ISTIO embutidas nele. A partir daqui, as opções de instalação variam dependendo se você está usando isso para fins de produção ou se estiver experimentando com ele em seu próprio ambiente isolado.
Vamos assumir que o último é o caso e instalar ISTIO sem autenticação TLS.
$ kubectl Aplicar -f install/kubernetes/istio -Demo.YamlIsso criará um novo namespace Istio-System, onde todos os vários componentes como Istio-Pilot e Ingress Gateway serão instalados.
Implantação de aplicativos e injetor de istio
Aí vem a utilidade de Istio. Istio adiciona proxies sidecar aos seus serviços, e isso é feito sem modificar o código real do seu aplicativo. Se o injetor automático de istio-sideCar estiver ativado. Você pode rotular um espaço para nome com injeção de istio = ativado e quando seu aplicativo for implantado neste espaço de nome, os próprios pods terão contêineres de enviados especializados junto com os contêineres para o aplicativo principal. Por exemplo, vamos rotular o espaço para nome padrão
$ KUBECTL Jamespace Padrão ISTIO-Injeção = Ativado
Agora vamos implantar o aplicativo de bookinfo de amostra neste espaço de nome. Do diretório raiz do representante de Isitio que clonamos, executamos:
$ kubectl Aplicar -f Amostras/bookinfo/plataforma/kube/bookinfo.YamlVocê pode listar todos os pods em execução aqui:
$ kubectl Obtenha pods
Escolha qualquer cápsula e veja seus detalhes. Por exemplo, um dos pods do aplicativo Bookinfo na minha implantação é nomeado Detalhes-V1-6865B9B99D-6MXX9
$ KUBECTL Descreva os pods/detalhes-V1-6865b9b99d-6mxx9
Na descrição, você notará que o POD contém dois recipientes, primeiro é um componente da execução real do aplicativo de imagem exemplos-bookinfo-details-v1: 1.8.0 e o segundo é o istio-proxy executando a imagem GCR.io/istio-lançamento/proxyv2: 1.0.0 .
Istio oferece controle de granulação fina sobre sua malha de serviço porque injeta esses contêineres até as vagens onde seus aplicativos residem. Isso combinado com TLS fácil de usar para comunicação e controle de tráfego de granulação fina é uma das muitas razões pelas quais aplicativos grandes podem se beneficiar de uma malha de serviço como Istio.
A arquitetura real tem muitos componentes como piloto, cidadela e misturador, cada um com seu próprio papel importante a desempenhar. Você pode aprender muito mais sobre esses componentes aqui e tentar implantar seu próprio microsserviço aqui.