Como instalar o Istio no Kubernetes Engine

O Istio é uma biblioteca de código aberto para conectar, monitorar e proteger microsserviços, incluindo serviços em execução no Kubernetes Engine. Ele permite que você crie uma rede de serviços implantados com balanceamento de carga, autenticação de serviço a serviço, monitoramento e muito mais, sem exigir nenhuma alteração no código. Você adiciona a compatibilidade do Istio aos serviços por meio da implantação de um proxy de arquivo secundário Envoy especial a cada um dos pods do seu aplicativo. O proxy Envoy intercepta toda a comunicação de rede entre microsserviços e é configurado e gerenciado com o uso da funcionalidade de plano de controle do Istio. Veja neste tutorial como instalar e configurar o Istio no GKE e implantar um aplicativo multisserviço ativado para o Istio.

Antes de começar

Siga estas etapas para ativar a API do Kubernetes Engine:
  1. Acesse a página do Kubernetes Engine no Console do Google Cloud Platform.
  2. Crie ou selecione um projeto.
  3. Aguarde a ativação da API e dos serviços relacionados. Isso pode demorar alguns minutos.
  4. Verifique se o faturamento foi ativado para o projeto.

    Saiba como ativar o faturamento

Instale as seguintes ferramentas de linha de comando usadas neste tutorial:

  • O gcloud é usado para criar e excluir clusters do Kubernetes Engine. O gcloud está incluso no SDK do Google Cloud.
  • A kubectl é utilizada para gerenciar o Kubernetes, o sistema de orquestração de clusters do Kubernetes Engine. É possível instalar a kubectl usando a gcloud:
    gcloud components install kubectl

Definir padrões da ferramenta de linha de comando gcloud

Para não perder tempo digitando o código do projeto e as opções de zona do Compute Engine na ferramenta de linha de comando gcloud, defina os padrões:
gcloud config set project [PROJECT_ID]
gcloud config set compute/zone us-central1-b

Criar um cluster do GKE

Para criar um cluster para este tutorial, execute o comando a seguir. Vamos chamar o cluster do tutorial de istio-tutorial:

gcloud container clusters create istio-tutorial \
    --machine-type=n1-standard-2 \
    --num-nodes=4 \

Como usar seu próprio cluster

Se você quiser usar um cluster existente para este tutorial, verifique se ele está usando a versão padrão do GKE do Kubernetes e se o controle de acesso baseado em papéis (RBAC na sigla em inglês) está ativado. O RBAC é ativado por padrão em todos os clusters que executam o Kubernetes versão 1.6 ou posterior. Para ativar o RBAC em uma versão mais antiga, atualize seu cluster com a opção --no-enable-legacy-authorization.

Também é preciso garantir que você tenha a kubectl instalada e que a versão seja a mesma do seu cluster ou mais recente. Para verificar se está usando a versão mais recente, execute kubectl version.

Etapa 1: instalar o Istio

Agora vamos instalar o Istio. O Istio é instalado em um namespace próprio istio-system e pode gerenciar microsserviços de todos os outros namespaces. A instalação inclui os principais componentes, ferramentas e amostras do Istio.

Siga estas etapas na mesma máquina em que você tem as credenciais de cluster. Essa é sua máquina de administração de clusters.

  1. Acesse a página da versão do Istio para fazer o download do arquivo de instalação correspondente ao seu sistema operacional em que você quer executar o cliente do Istio.

  2. Extraia o arquivo de instalação do qual você fez o download. O diretório de instalação contém:

    • arquivos .yaml de instalação para Kubernetes em install/;
    • aplicativos de amostra em samples/;
    • o binário do cliente istioctl no diretório bin/. istioctl é usado durante a injeção manual do Envoy como um proxy de arquivo secundário e para criar regras e políticas de roteamento;
    • o arquivo de configuração istio.VERSION.
  3. Verifique se você está no diretório raiz da instalação do Istio.

  4. Adicione o cliente istioctl ao seu PATH:

    export PATH=$PWD/bin:$PATH
  5. Conceda permissões de administrador de cluster ao usuário atual. Você precisa dessas permissões para criar as regras necessárias de controle de acesso baseado em papéis (RBAC, na sigla em inglês) para o Istio:

    kubectl create clusterrolebinding cluster-admin-binding \
      --clusterrole=cluster-admin \
      --user="$(gcloud config get-value core/account)"
    
  6. Instale os componentes principais do Istio:

    kubectl apply -f install/kubernetes/istio-demo-auth.yaml

    Essa ação tem as seguintes consequências:

    • Cria o namespace istio-system juntamente com as permissões RBAC necessárias.
    • Implanta os principais componentes do Istio:

      • Istio-Pilot, responsável pela descoberta do serviço e pela configuração dos proxies do arquivo secundário do Envoy em uma malha de serviço do Istio.
      • Os componentes do Mixer Istio-Policy e Istio-Telemetry, que reforçam as políticas de uso e reúnem dados de telemetria na malha de serviço.
      • Istio-Ingressgateway, que fornece um ponto de entrada para o tráfego de fora do cluster.
      • Istio-Citadel, que automatiza o gerenciamento de chaves e certificados para o Istio.
    • Implanta plug-ins para métricas, registros e rastreamento.

    • Permite a autenticação TLS mútua entre os arquivos secundários do Envoy. O uso dessa opção de autenticação pode não funcionar para todos os aplicativos. Se quiser instalar o Istio sem isso, consulte o Guia de instalação do Istio.

Etapa 2: verificar a instalação do Istio

  1. Verifique se os seguintes serviços do Kubernetes estão implantados: istio-citadel, istio-pilot, istio-ingressgateway, istio-policy e istio-telemetry. Você também verá os outros serviços implantados:

    kubectl get service -n istio-system
    
    Resposta:
    NAME                       TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                                                               AGE
    ...
    istio-citadel              ClusterIP      10.19.253.95            8060/TCP,9093/TCP                                                     37s
    istio-egressgateway        ClusterIP      10.19.242.139           80/TCP,443/TCP                                                        40s
    istio-ingressgateway       LoadBalancer   10.19.247.233        80:31380/TCP,443:31390/TCP,31400:31400/TCP                            40s
    istio-pilot                ClusterIP      10.19.243.14            15003/TCP,15005/TCP,15007/TCP,15010/TCP,15011/TCP,8080/TCP,9093/TCP   38s
    istio-policy               ClusterIP      10.19.254.117           9091/TCP,15004/TCP,9093/TCP                                           39s
    istio-sidecar-injector     ClusterIP      10.19.248.228           443/TCP                                                               37s
    istio-statsd-prom-bridge   ClusterIP      10.19.252.35            9102/TCP,9125/UDP                                                     39s
    istio-telemetry            ClusterIP      10.19.250.11            9091/TCP,15004/TCP,9093/TCP,42422/TCP                                 39s
    ...
  2. Certifique-se de que os pods do Kubernetes correspondentes estejam implantados e que todos os contêineres estejam em operação: istio-pilot-*, istio-policy-*, istio-telemetry-*, istio-ingressgateway-* e istio-citadel-*.

    kubectl get pods -n istio-system
    
    Resposta:
    NAME                                        READY     STATUS      RESTARTS   AGE
    grafana-6995b4fbd7-mp7ps                    1/1       Running     0          12m
    istio-citadel-54f4678f86-4549b              1/1       Running     0          12m
    istio-cleanup-secrets-5pl77                 0/1       Completed   0          12m
    istio-egressgateway-c68bcd889-p52rb         1/1       Running     0          12m
    istio-galley-7bd8b5f88f-nhwlc               1/1       Running     0          12m
    istio-grafana-post-install-6dwhp            0/1       Completed   3          12m
    istio-ingressgateway-665699c874-l62rg       1/1       Running     0          12m
    istio-pilot-68cbbcd65d-l5298                2/2       Running     0          12m
    istio-policy-7c5b5bb744-k6vm9               2/2       Running     0          12m
    istio-security-post-install-g9l9p           0/1       Completed   3          12m
    istio-sidecar-injector-85ccf84984-2hpfm     1/1       Running     0          12m
    istio-statsd-prom-bridge-55965ff9c8-x6sqd   1/1       Running     0          12m
    istio-telemetry-5b6c57fffc-9j4dc            2/2       Running     0          12m
    istio-tracing-77f9f94b98-jv8vh              1/1       Running     0          12m
    prometheus-7456f56c96-7hrk5                 1/1       Running     0          12m
    servicegraph-684c85ffb9-9cd4x               1/1       Running     0          12m

Etapa 3: implantar o aplicativo de amostra BookInfo

Depois que o Istio estiver instalado e todos os componentes estiverem em execução, você poderá tentar implantar um dos aplicativos de amostra fornecidos com a instalação. Neste tutorial, instalaremos o BookInfo. Trata-se de um aplicativo simples de simulação de uma livraria, composto por quatro serviços que oferecem uma página de produto da Web, detalhes do livro, análises (com várias versões do serviço de análise) e classificações, tudo gerenciado com o Istio. Você pode encontrar o código-fonte e todos os outros arquivos usados neste exemplo no diretório samples/bookinfo da instalação do Istio.

Siga as etapas abaixo para implantar os serviços do aplicativo BookInfo em um ambiente ativado para o Istio, com os proxies de arquivo secundário do Envoy injetados junto com cada serviço para fornecer a funcionalidade do Istio.

  1. Verifique se você ainda está na raiz do diretório de instalação do Istio na máquina de administração de clusters.

  2. Implante o aplicativo usando kubectl apply e istioctl kube-inject. O comando kube-inject atualiza a implantação do BookInfo para que um arquivo secundário seja implantado em cada pod do aplicativo junto com o serviço.

    kubectl apply -f <(istioctl kube-inject -f samples/bookinfo/platform/kube/bookinfo.yaml)
    
  3. Confirme se o aplicativo foi implantado corretamente executando os seguintes comandos:

    kubectl get services
    Resposta:
    NAME                       CLUSTER-IP   EXTERNAL-IP   PORT(S)              AGE
    details                    10.0.0.31    <none>        9080/TCP             6m
    kubernetes                 10.0.0.1     <none>        443/TCP              7d
    productpage                10.0.0.120   <none>        9080/TCP             6m
    ratings                    10.0.0.15    <none>        9080/TCP             6m
    reviews                    10.0.0.170   <none>        9080/TCP             6m

    e

    kubectl get pods
    Resposta:
    NAME                                        READY     STATUS    RESTARTS   AGE
    details-v1-1520924117-48z17                 2/2       Running   0          6m
    productpage-v1-560495357-jk1lz              2/2       Running   0          6m
    ratings-v1-734492171-rnr5l                  2/2       Running   0          6m
    reviews-v1-874083890-f0qf0                  2/2       Running   0          6m
    reviews-v2-1343845940-b34q5                 2/2       Running   0          6m
    reviews-v3-1813607990-8ch52                 2/2       Running   0          6m
  4. Finalmente, defina o roteamento do gateway de entrada para o aplicativo:

    kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
    

Etapa 4: validar a implantação do aplicativo

Agora que ele está implantado, vamos dar uma olhada no aplicativo BookInfo em ação.

Como conseguir a porta e o IP de entrada

Para usar o BookInfo, primeiro você precisa conseguir a porta e o IP de entrada da seguinte maneira:

kubectl get svc istio-ingressgateway -n istio-system
Resposta:
NAME                   TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                                      AGE
istio-ingressgateway   LoadBalancer   10.19.247.233   35.239.7.64   80:31380/TCP,443:31390/TCP,31400:31400/TCP   27m

Isso fornece o endereço do serviço de entrada, da seguinte maneira (use a primeira porta):

export GATEWAY_URL=35.239.7.64:80

Como testar o aplicativo

Depois de ter o endereço e a porta, verifique se o aplicativo BookInfo está sendo executado com curl:

curl -I http://${GATEWAY_URL}/productpage

Se a resposta mostrar 200, significa que o aplicativo está funcionando corretamente com o Istio.

Em seguida, acesse http://$GATEWAY_URL/productpage com o navegador para visualizar a página da Web do BookInfo. Se você atualizar a página várias vezes, verá diferentes versões de análises exibidas na página do produto, apresentadas em estilo round robin (estrelas vermelhas, estrelas pretas, sem estrelas), já que ainda não usamos o Istio para controlar o roteamento de versões.

Como implantar seu próprio aplicativo

Se você quiser tentar implantar um dos seus próprios aplicativos, siga o mesmo procedimento com sua própria implantação YAML. O Istio não exige mudanças no aplicativo. Observe que o aplicativo precisa usar o protocolo HTTP/1.1 ou HTTP/2.0 para todo o tráfego HTTP, porque o proxy Envoy não é compatível com HTTP/1.0. Ele depende de cabeçalhos que não estão presentes no HTTP/1.0 para o roteamento.

Limpeza

Para evitar cobranças dos recursos usados neste tutorial na conta do Google Cloud Platform, siga esta recomendação.

Se você não quiser continuar testando o aplicativo BookInfo em Próximas etapas, faça o seguinte para evitar que os recursos usados neste tutorial sejam cobrados na sua conta do Google Cloud Platform:

  1. Exclua o serviço de entrada istio-ingressgateway.

    kubectl -n istio-system delete service istio-ingressgateway
  2. Espere até que o balanceador de carga istio-ingressgateway seja excluído, observando a resposta ao seguinte comando:

    gcloud compute forwarding-rules list
  3. Exclua o cluster do contêiner:

    gcloud container clusters delete istio-tutorial

Próximas etapas

O plano de controle do Istio só pode ser instalado no Kubernetes, mas a funcionalidade de expansão de malha do Istio permite adicionar máquinas que não sejam do Kubernetes, como VMs do Compute Engine, a uma malha de serviço do Istio. Você pode descobrir como fazer isso e expandir nosso exemplo do BookInfo em Como usar o Istio com o Compute Engine.

Se você quiser explorar ainda mais o Istio, a seção de guias do site do Istio tem mais tutoriais que permitem usar a funcionalidade do Istio do BookInfo. Veja alguns exemplos:

  • Roteamento inteligente: neste exemplo, você verá como usar as várias capacidades de gerenciamento de tráfego do Istio com o BookInfo. É uma etapa particularmente útil depois deste tutorial.
  • Telemetria detalhada: neste exemplo, você receberá informações sobre como conseguir métricas, registros e traces uniformes em todos os serviços do BookInfo usando o Istio Mixer e o proxy Envoy.
Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Tutoriais do Kubernetes Engine