Uma tradução do artigo foi preparada especificamente para os alunos do curso da Plataforma de Infraestrutura Baseada em Kubernetes .

A configuração de um microsserviço básico no Kubernetes é enganosamente simples. Em um artigo recente, falamos sobre como é fácil começar a trabalhar com contêineres. Reunimos uma imagem simples do Docker, a implantamos usando o Kubernetes e executamos a solicitação do aplicativo. Não foi difícil, mas na vida as arquiteturas de nuvem geralmente são mais complicadas. Eles incluem dezenas e até centenas de serviços com bancos de dados, autenticação e outros elementos necessários na realidade.
Administrá-los às vezes é uma dor de cabeça contínua. Neste artigo, falaremos sobre o Istio, uma ferramenta para a malha de serviço ( examinamos essa arquitetura anteriormente ) que leva o gerenciamento de grandes implantações de nuvem para o próximo nível.
Os microsserviços oferecem grande escalabilidade e a malha de serviço os complementa com os benefícios de centralização típicos de ambientes monolíticos (como logs e controle de versão). Escrevemos mais sobre os recursos e benefícios da malha de serviço em um artigo anterior desta série.
A mesma publicação se concentra nos recursos do Istio para implementar um padrão de arquitetura em nuvem usando redes mesh. Aprenderemos como configurar o plano de controle, consideraremos os pontos fortes do Istio e, finalmente, tomaremos o serviço Kubernetes com o qual trabalhamos na última vez, adicionaremos um proxy de side-car e associá-lo ao plano de controle recém-criado.
Apresentando o plano de dados e o proxy lateral
Os dois principais termos arquitetônicos do Istio são o plano de dados e o plano de controle. O plano de dados trabalha com dados que são movidos no aplicativo, transferidos para várias instâncias de serviço e processados pelos próprios serviços. Para sua implementação, principalmente proxies de side-car são usados. No nível de gerenciamento, são determinadas a instanciação da ordem de serviço, o local dos dados de telemetria e as informações de serviço. Os principais elementos do plano de controle incluem Pilot e Mixer. Vamos ver como tudo funciona.
O proxy sidecar é executado junto com a lareira que define seu serviço no Kubernetes. Ele é adicionado aos principais componentes do serviço e trabalha com o tráfego que vai para esse serviço. Você pode adicionar um proxy de carro lateral à definição de serviço existente na lareira: apenas as linhas que definem o proxy de carro lateral serão adicionadas ao serviço e ele começará a funcionar.

Em troca, você obterá uma lista dos benefícios subjacentes à rede de malha em nuvem Istio. O proxy sidecar intercepta o tráfego que entra no serviço e permite o roteamento inteligente. Estamos falando de tarefas simples, como balanceamento de carga ou manipulação de interrupções TLS, que aceleram significativamente o trabalho e processos mais complexos, como controle de versão, implantação em fases de uma nova versão de um serviço e coleta de indicadores de utilização de recursos. O sidecar-proxy permite adicionar todos esses recursos à arquitetura existente de microsserviços sem reorganizar o sistema inteiro .
À medida que o objetivo inicial do proxy do side-car se torna claro, os benefícios do Istio e da malha do serviço de nuvem em geral se tornam aparentes. De fato, todas as arquiteturas de proxy de side-car agregadas, funcionando como elementos de conexão unificados entre os pods de serviço, passam por todo o tráfego que passa pelo aplicativo. Isso significa que, se necessário, para fortalecer a proteção, eles agem como um único local onde você pode adicionar processos de autenticação e o protocolo HTTPS entre serviços, manter um log de eventos para verificar anomalias e implantar ferramentas de controle de tráfego e filtragem para autenticação.
Além disso, como os proxies de side-car atuam como pontos finais centrais para a comunicação entre serviços, eles aumentam a tolerância a falhas do aplicativo e adicionam um nível adicional de escalabilidade. Uma das desvantagens dos microsserviços é que todos os pods do servidor estão isolados e, se algo estiver errado com o microsserviço, as solicitações podem ser processadas lentamente ou redefinidas completamente. Graças aos proxies laterais, você pode adicionar tempos limite centralmente, configurar o balanceamento de carga inteligente e expandir os recursos de monitoramento.
Centralização: o plano de controle
Além do plano de dados, o Istio inclui um plano de controle. Ele desempenha o papel de um controlador para todos os proxies laterais executados no aplicativo e de um repositório central para todas as informações (como entradas de log e informações de versão), que são percebidas pelos serviços na rede como uma única fonte de dados confiáveis.

Ao trabalhar com o Istio, o Kubernetes é a principal maneira de interagir com o plano de controle. Após instalar os pacotes Istio e adicionar definições, você pode usar os comandos kubectl
que controlam o estado do sistema para acessar o plano de controle. Por exemplo, o processo de atualização de uma lareira para uma nova versão usando o kubectl
começa com a atualização das variáveis do plano de controle local.
É mais fácil ver isso usando o comando get-svc
como parte do kubectl
- você obterá uma lista de serviços relacionados a uma biblioteca específica. Para verificar quais componentes do Istio estão em execução, você pode usar o seguinte comando:
kubectl get svc -n istio-system
Uma lista dos principais elementos do plano de controle do Istio em execução em segundo plano é exibida. Você já deve estar familiarizado com alguns deles, como o Citadel, um serviço que gerencia a proteção do tráfego entre serviços.
Instale o Istio
Vamos ver quais recursos o Istio suporta por padrão. Instalaremos o plano de controle do Istio para administrar a API HTTP básica descrita no artigo anterior. Este serviço de API foi definido no Kubernetes e implementado como um único no Kubernetes com uma API em execução.
Para instalar o Istio, siga as etapas no guia oficial rápido. Comece baixando a versão mais recente do Istio da página apropriada. O programa ainda está se desenvolvendo ativamente, trabalhando melhor com seus últimos lançamentos. Basta baixar o arquivo e verifique se ele está disponível no diretório correto.
Em seguida, adicione as definições do Istio ao Kubernetes para poder usá-las com a kubectl
linha de comando kubectl
. Inclua os arquivos .yaml
obtidos anteriormente no diretório de instalação usando o kubectl apply
:
kubectl apply -f install/kubernetes/helm/istio/templates/crds.yaml
Em seguida, ative a instalação do Istio escolhendo um método de autenticação. Usarei a autenticação HTTPS mútua padrão, o que é ótimo para demonstrações e introdução. Para adicionar uma malha de serviço a um projeto existente, você precisa descobrir mais algumas opções disponíveis. Nesta fase, você pode executar o seguinte comando:
kubectl apply -f install/kubernetes/istio-demo-auth.yaml
Depois disso, você pode continuar. Você precisará adicionar a estrutura do Istio aos pods criados anteriormente e, para novos pods, adicione o Istio como uma dependência.
Implantação de aplicativo Helloworld
Usaremos o aplicativo de teste helloworld, descrito em nossa publicação anterior. Será criado: uma implantação, um serviço, um gateway e um serviço virtual. Atualize o arquivo de configuração para corresponder ao seguinte:
helloworld.yaml
apiVersion: v1 kind: Service metadata: name: helloworld spec: type: ClusterIP ports: - port: 80 targetPort: 8080 selector: app: helloworld --- apiVersion: apps/v1 kind: Deployment metadata: name: helloworld-v1 spec: replicas: 1 selector: matchLabels: app: helloworld template: metadata: labels: app: helloworld version: v1 spec: containers: - name: helloworld-kubernetes - image: haseebm/helloworld-kubernetes ports: - containerPort: 8080 --- apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: name: helloworld-gateway spec: selector: istio: ingressgateway # use istio default controller servers: - port: number: 80 name: http protocol: HTTP hosts: - "*" --- apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: helloworld spec: hosts: - "*" gateways: - helloworld-gateway http: route: - destination: host: helloworld port: number: 80
Proxy sidecar manual do Istio
O Istio usa a amostra de proxy do side-car para colocar o contêiner do proxy lateral do Istio em uma lareira com o contêiner do aplicativo helloworld.
$ kubectl apply -f <(istioctl kube-inject -f helloworld.yaml) service/helloworld created deployment.extensions/helloworld-v1 created gateway.networking.istio.io/helloworld-gateway created virtualservice.networking.istio.io/helloworld created
Verifique se os pods e o serviço são executados:
$ kubectl get pod,svc | grep helloworld pod/helloworld-v1-1cbca3f8d5-achr2 2/2 Running service/helloworld ClusterIP 10.160.58.61
Agora verifique o tráfego para o aplicativo helloworld:
$ curl a2******.ap-southeast-1.elb.amazonaws.com/api/hello
Hello world v1
Próximas etapas
O Istio é uma ótima maneira de conhecer as redes de malha de tecnologia em nuvem e o gerenciamento inteligente de microsserviços em geral. Como já escrevemos mais de uma vez, os microsserviços administrados adequadamente têm muitas vantagens técnicas, inclusive em termos de escala. No entanto, para obter esses benefícios, você precisa usar as tecnologias existentes efetivamente.
No futuro, exploraremos outros cenários para usar o Istio e as redes de malha em nuvem para melhorar a segurança e a gerenciabilidade de nossa arquitetura de teste. Portanto, o próximo artigo se concentrará no gerenciamento e versão de implantação no Istio para distribuir com eficiência atualizações de código sem interrupções e danos às implantações.
Asad Faizi
Fundador e CEO, CloudPlex.io, Inc
asad@cloudplex.io
www.cloudplex.io