Como instalar o Anthos Service Mesh em um cluster existente

O Anthos Service Mesh é um framework compatível com Istio para conectar, monitorar e proteger serviços em execução no Google Kubernetes Engine (GKE) e no GKE no VMware. Ele permite que você crie uma rede de serviços implantados com balanceamento de carga, autenticação entre serviços, monitoramento e muito mais, sem exigir nenhuma alteração no código. O Anthos Service Mesh injeta automaticamente um proxy sidecar para cada pod do aplicativo. O proxy sidecar intercepta todo o tráfego de rede dos pods e para eles. O Anthos Service Mesh também configura um gateway de entrada para gerenciar o tráfego de entrada para a malha. É possível usar APIs de código aberto do Istio para configurar políticas aplicadas a sidecars e gateways.

Neste guia, explicamos como fazer uma instalação limpa da versão 1.4.10-asm.18 do Anthos Service Mesh em um cluster atual do GKE do Google Cloud. Se você tiver uma versão anterior do Anthos Service Mesh instalada, consulte Como fazer upgrade do Anthos Service Mesh no GKE.

A instalação ativa os seguintes recursos:

Antes de começar

Analise os requisitos e restrições a seguir antes de iniciar a configuração.

Requisitos

Restrições

Só é possível ter uma instalação do Anthos Service Mesh por projeto do Google Cloud. Não é possível ter várias implantações de malha em um único projeto

Dados do certificado

Os certificados do Mesh CA incluem os seguintes dados sobre os serviços do aplicativo:

  • O ID do projeto do Google Cloud
  • O namespace do GKE
  • O nome da conta de serviço do GKE

Configurar o projeto

  1. Consiga o ID do projeto em que o cluster foi criado:

    gcloud

    gcloud projects list

    Console

    1. No console do Google Cloud, acesse a página Painel:

      Ir para a página "Painel"

    2. Clique na lista suspensa Selecionar de na parte superior da página. Na janela Selecionar de exibida, selecione seu projeto.

      O ID do projeto é exibido no card Informações do projeto do Painel.

  2. Crie uma variável de ambiente para o ID do projeto:
    export PROJECT_ID=YOUR_PROJECT_ID
    
  3. Defina o ID do projeto padrão para a ferramenta de linha de comando gcloud:
    gcloud config set project ${PROJECT_ID}
  4. Crie uma variável de ambiente para o número do projeto:
    export PROJECT_NUMBER=$(gcloud projects describe ${PROJECT_ID} --format="value(projectNumber)")

  5. Defina os papéis necessários de gerenciamento de identidade e acesso (IAM, na sigla em inglês). Se você for um proprietário do projeto, terá todas as permissões necessárias para concluir a instalação e registrar o cluster com o ambiente. Se você não for proprietário do projeto, será necessário alguém que conceda os seguintes papéis específicos do IAM. No comando a seguir, altere GCP_EMAIL_ADDRESS para a conta que você usa para fazer login no Google Cloud.
    gcloud projects add-iam-policy-binding ${PROJECT_ID} \
         --member user:GCP_EMAIL_ADDRESS \
         --role=roles/editor \
         --role=roles/compute.admin \
         --role=roles/container.admin \
         --role=roles/resourcemanager.projectIamAdmin \
         --role=roles/iam.serviceAccountAdmin \
         --role=roles/iam.serviceAccountKeyAdmin \
         --role=roles/gkehub.admin

    Para saber mais sobre como conceder papéis do IAM, consulte Como conceder, alterar e revogar o acesso a recursos. Para uma descrição desses papéis, consulte Permissões necessárias para instalar o Anthos Service Mesh

  6. Ative as APIs a seguir:
    gcloud services enable \
        container.googleapis.com \
        compute.googleapis.com \
        monitoring.googleapis.com \
        logging.googleapis.com \
        cloudtrace.googleapis.com \
        meshca.googleapis.com \
        meshtelemetry.googleapis.com \
        meshconfig.googleapis.com \
        iamcredentials.googleapis.com \
        anthos.googleapis.com \
        gkeconnect.googleapis.com \
        gkehub.googleapis.com \
        cloudresourcemanager.googleapis.com

    A ativação das APIs pode levar um minuto ou mais para ser concluída. Quando as APIs estão ativadas, você vê uma saída semelhante a esta:

    Operation "operations/acf.601db672-88e6-4f98-8ceb-aa3b5725533c" finished
    successfully.
    

Como configurar um cluster do GKE atual

Nesta seção, explicamos como configurar um cluster do GKE existente com as opções necessárias para o Anthos Service Mesh. Veja mais informações na documentação do GKE.

  1. Crie as variáveis de ambiente a seguir:

    • Defina o nome do cluster.

      export CLUSTER_NAME=YOUR_CLUSTER_NAME

    • Defina CLUSTER_LOCATION como a zona ou a região do cluster.

      export CLUSTER_LOCATION=YOUR_ZONE_OR_REGION

    • Defina o pool de carga de trabalho.

      export WORKLOAD_POOL=${PROJECT_ID}.svc.id.goog

    • Defina o ID da malha.

      export MESH_ID="proj-${PROJECT_NUMBER}"

  2. Defina a zona ou a região padrão da Google Cloud CLI.

    • Se você tiver um cluster de zona única, defina a zona padrão:

      gcloud config set compute/zone ${CLUSTER_LOCATION}
    • Se você tiver um cluster regional, defina a região padrão:

      gcloud config set compute/region ${CLUSTER_LOCATION}

    Dica: para facilitar a configuração do ambiente shell no futuro, copie e cole as instruções export de cada variável de ambiente em um script de shell simples que você source ao iniciar um novo shell. Também é possível adicionar os comandos gcloud que definem valores padrão ao script. Outra opção é usar gcloud init para criar e ativar uma configuração gcloud nomeada.

  3. Defina o rótulo mesh_id no cluster, necessário para que as métricas sejam exibidas no painel do Anthos Service Mesh no Console do Google Cloud. Se o cluster tiver rótulos existentes que você quer manter, inclua-os ao adicionar o rótulo mesh_id.

    1. Para ver se o cluster tem rótulos existentes:

      gcloud container clusters describe ${CLUSTER_NAME}

      Procure o campo resourceLabels na saída. Cada rótulo é armazenado em uma linha separada no campo resourceLabels. Por exemplo:

      resourceLabels:
        csm: ''
        env: dev
        release: stable

      Se o rótulo csm estiver na saída, não será necessário preservá-lo. O rótulo mesh_id substitui o rótulo csm.

      Para facilitar, é possível adicionar os rótulos a uma variável de ambiente. No exemplo a seguir, substitua YOUR_EXISTING_LABELS por uma lista separada por vírgulas dos rótulos existentes no seu cluster no formato KEY=VALUE. Por exemplo: env=dev,release=stable

      export EXISTING_LABELS="YOUR_EXISTING_LABELS"
    2. Defina o rótulo mesh_id:

      • Se o cluster tiver rótulos que você quer manter, atualize o cluster com o mesh_id e os rótulos existentes:

        gcloud container clusters update ${CLUSTER_NAME} \
          --update-labels=mesh_id=${MESH_ID},${EXISTING_LABELS}
      • Se o cluster não tiver rótulos existentes, atualize o cluster com apenas com o rótulo mesh_id:

        gcloud container clusters update ${CLUSTER_NAME} \
          --update-labels=mesh_id=${MESH_ID}
  4. Ative a Identidade da carga de trabalho:

    gcloud container clusters update ${CLUSTER_NAME} \
       --workload-pool=${WORKLOAD_POOL}
  5. Ative o Cloud Monitoring e o Cloud Logging no GKE:

    gcloud container clusters update ${CLUSTER_NAME} \
       --enable-stackdriver-kubernetes
  6. Se o cluster estiver usando uma versão estática do GKE, inscreva-o em um canal de lançamento.

Como configurar credenciais e permissões

Antes de continuar, ative todas as APIs necessárias. Se tiver alguma dúvida, poderá executar o comando gcloud services enable novamente.

  1. Inicialize seu projeto para prepará-lo para instalação. Entre outras coisas, esse comando cria uma conta de serviço para permitir que os componentes do Istio, como o proxy sidecar, acessem com segurança os dados e os recursos do seu projeto:
    curl --request POST \
      --header "Authorization: Bearer $(gcloud auth print-access-token)" \
      --data '' \
      https://meshconfig.googleapis.com/v1alpha1/projects/${PROJECT_ID}:initialize

    A resposta do comando mostra chaves vazias: {}

    Se você instalar uma nova versão do Anthos Service Mesh neste cluster no futuro, não precisará executar o comando novamente, mas executá-lo novamente não afetará a instalação.

  2. Receba credenciais de autenticação para interagir com o cluster:
    gcloud container clusters get-credentials ${CLUSTER_NAME}
  3. 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 Anthos Service Mesh:
    kubectl create clusterrolebinding cluster-admin-binding \
      --clusterrole=cluster-admin \
      --user="$(gcloud config get-value core/account)"

    Se você vir o erro "cluster-admin-binding" already exists, poderá ignorá-lo com segurança e continuar com o cluster-admin-binding atual.

Como registrar o cluster

É necessário registrar o cluster com a frota do projeto para ter acesso à interface do usuário unificada no Console do Google Cloud. Uma frota fornece uma forma unificada de visualizar e gerenciar os clusters e as cargas de trabalho deles, incluindo clusters fora do Google Cloud.

Criar uma conta de serviço e um arquivo de chave do Google Cloud

Um arquivo JSON contendo credenciais de conta de serviço é necessário para registrar um cluster. Para seguir o princípio de privilégio mínimo, recomendamos que você crie uma conta de serviço distinta para cada cluster registrado.

Para criar uma conta de serviço e um arquivo de chave:

  1. Selecione um nome para a conta de serviço e crie uma variável de ambiente para ela:

    export SERVICE_ACCOUNT_NAME=SERVICE_ACCOUNT_NAME
    
  2. Crie a conta de serviço:

    gcloud iam service-accounts create ${SERVICE_ACCOUNT_NAME}
  3. Liste todas as contas de serviço de um projeto para confirmar se a conta de serviço foi criada:

    gcloud iam service-accounts list
  4. Vincule o papel do IAM gkehub.connect à conta de serviço:

    gcloud projects add-iam-policy-binding ${PROJECT_ID} \
       --member="serviceAccount:${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com" \
       --role="roles/gkehub.connect"
  5. Crie uma variável de ambiente para o caminho de arquivo local em que você quer salvar o arquivo JSON. Recomendamos que você nomeie o arquivo usando o nome da conta de serviço e o ID do projeto, como: /tmp/creds/${SERVICE_ACCOUNT_NAME}-${PROJECT_ID}.json

    export SERVICE_ACCOUNT_KEY_PATH=LOCAL_KEY_PATH
  6. Faça o download do arquivo JSON da chave privada da conta de serviço.

    gcloud iam service-accounts keys create ${SERVICE_ACCOUNT_KEY_PATH} \
       --iam-account=${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com

Registre o cluster

No comando a seguir, substitua MEMBERSHIP_NAME por um nome que represente de maneira exclusiva o cluster que está sendo registrado no Hub.

gcloud container hub memberships register MEMBERSHIP_NAME \
    --gke-cluster=${CLUSTER_LOCATION}/${CLUSTER_NAME} \
    --service-account-key-file=${SERVICE_ACCOUNT_KEY_PATH}

O comando responde com uma saída semelhante a esta:

kubeconfig entry generated for CLUSTER_NAME.
Waiting for membership to be created...done.
Created a new membership [projects/PROJECT_ID/locations/global/memberships/MEMBERSHIP_NAME] for the cluster [MEMBERSHIP_NAME]
Generating the Connect Agent manifest...
Deploying the Connect Agent on cluster [MEMBERSHIP_NAME] in namespace [gke-connect]...
Deployed the Connect Agent on cluster [MEMBERSHIP_NAME] in namespace [gke-connect].
Finished registering the cluster [MEMBERSHIP_NAME] with the Hub.

Esta chave de conta de serviço é armazenada como um secret chamado creds-gcp no namespace gke-connect.

Para mais informações sobre o registro de clusters, consulte Como registrar um cluster na documentação do Connect.

Como preparar a instalação do Anthos Service Mesh

Antes de continuar, verifique se a conta de serviço do plano de dados do ASM Mesh é membro do projeto:

gcloud projects get-iam-policy ${PROJECT_ID} | grep -B 1 'roles/meshdataplane.serviceAgent'

Se o comando anterior não resultar em nada, volte para a seção Definir credenciais e permissões e execute o comando curl.

    Linux

  1. Faça o download do arquivo de instalação do Anthos Service Mesh no diretório de trabalho atual:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.4.10-asm.18-linux.tar.gz
  2. Faça o download do arquivo de assinatura e use openssl para verificar a assinatura:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.4.10-asm.18-linux.tar.gz.1.sig
    openssl dgst -verify - -signature istio-1.4.10-asm.18-linux.tar.gz.1.sig istio-1.4.10-asm.18-linux.tar.gz <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    A saída esperada é Verified OK.

  3. macOS

  4. Faça o download do arquivo de instalação do Anthos Service Mesh no diretório de trabalho atual:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.4.10-asm.18-osx.tar.gz
  5. Faça o download do arquivo de assinatura e use openssl para verificar a assinatura:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.4.10-asm.18-osx.tar.gz.1.sig
    openssl dgst -sha256 -verify /dev/stdin -signature istio-1.4.10-asm.18-osx.tar.gz.1.sig istio-1.4.10-asm.18-osx.tar.gz <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    A saída esperada é Verified OK.

  6. Windows

  7. Faça o download do arquivo de instalação do Anthos Service Mesh no diretório de trabalho atual:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.4.10-asm.18-win.zip
  8. Faça o download do arquivo de assinatura e use openssl para verificar a assinatura:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.4.10-asm.18-win.zip.1.sig
    openssl dgst -verify - -signature istio-1.4.10-asm.18-win.zip.1.sig istio-1.4.10-asm.18-win.zip <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    A saída esperada é Verified OK.

  9. Extraia o conteúdo do arquivo em qualquer local no sistema. Por exemplo, para extrair o conteúdo para o diretório de trabalho atual:
    tar xzf istio-1.4.10-asm.18-linux.tar.gz

    O comando cria um diretório de instalação no seu diretório de trabalho atual chamado istio-1.4.10-asm.18, que contém:

    • aplicativos de amostra em samples;
    • As seguintes ferramentas no diretório bin:
      • istioctl: use istioctl para instalar o Anthos Service Mesh.
      • asmctl: use asmctl para ajudar a validar sua configuração de segurança depois de instalar o Anthos Service Mesh. No momento, asmctl não é compatível com o GKE no VMware.

  10. Verifique se você está no diretório raiz da instalação do Anthos Service Mesh.
    cd istio-1.4.10-asm.18
  11. Para facilitar, adicione as ferramentas ao diretório /bin/bin do seu PATH.
    export PATH=$PWD/bin:$PATH

Como instalar o Anthos Service Mesh

Nesta seção, explicamos como instalar o Anthos Service Mesh e ativar os itens abaixo:

  • Os recursos Padrão compatíveis listados na página Recursos compatíveis.
  • Autoridade de certificação do Anthos Service Mesh (Mesh CA, na sigla em inglês).
  • O pipeline de dados de telemetria que alimenta o painel do Anthos Service Mesh no Console do Google Cloud.

Para informações sobre como ativar os recursos Opcionais compatíveis, consulte Como ativar recursos opcionais.

Para instalar o Anthos Service Mesh:

Escolha um dos comandos a seguir para configurar o Anthos Service Mesh no modo de autenticação TLS mútua (mTLS) PERMISSIVE ou no modo mTLS STRICT.

PERMISSIVE mTLS

istioctl manifest apply --set profile=asm \
  --set values.global.trustDomain=${WORKLOAD_POOL} \
  --set values.global.sds.token.aud=${WORKLOAD_POOL} \
  --set values.nodeagent.env.GKE_CLUSTER_URL=https://container.googleapis.com/v1/projects/${PROJECT_ID}/locations/${CLUSTER_LOCATION}/clusters/${CLUSTER_NAME} \
  --set values.global.meshID=${MESH_ID} \
  --set values.global.proxy.env.GCP_METADATA="${PROJECT_ID}|${PROJECT_NUMBER}|${CLUSTER_NAME}|${CLUSTER_LOCATION}"

STRICT mTLS

istioctl manifest apply --set profile=asm \
  --set values.global.trustDomain=${WORKLOAD_POOL} \
  --set values.global.sds.token.aud=${WORKLOAD_POOL} \
  --set values.nodeagent.env.GKE_CLUSTER_URL=https://container.googleapis.com/v1/projects/${PROJECT_ID}/locations/${CLUSTER_LOCATION}/clusters/${CLUSTER_NAME} \
  --set values.global.meshID=${MESH_ID} \
  --set values.global.proxy.env.GCP_METADATA="${PROJECT_ID}|${PROJECT_NUMBER}|${CLUSTER_NAME}|${CLUSTER_LOCATION}" \
  --set values.global.mtls.enabled=true

Verificar os componentes do plano de controle

Verifique se os pods do plano de controle em istio-system estão ativos:

kubectl get pod -n istio-system

Espere para ver uma saída semelhante a esta:

NAME                                      READY   STATUS      RESTARTS   AGE
istio-galley-5c65896ff7-m2pls             2/2     Running     0          18m
istio-ingressgateway-587cd459f-q6hqt      2/2     Running     0          18m
istio-nodeagent-74w69                     1/1     Running     0          18m
istio-nodeagent-7524w                     1/1     Running     0          18m
istio-nodeagent-7652w                     1/1     Running     0          18m
istio-nodeagent-7948w                     1/1     Running     0          18m
istio-pilot-9db77b99f-7wfb6               2/2     Running     0          18m
istio-sidecar-injector-69c4d9f875-dt8rn   1/1     Running     0          18m
promsd-55f464d964-lqs7w                   2/2     Running     0          18m

Você verá uma instância de istio-nodeagent para cada nó no seu cluster. O Mesh CA, que substitui o componente Citadel OSS Istio, cria os agentes de nó para emitir certificados mTLS para as cargas de trabalho em execução na malha de serviço.

Como validar recursos de segurança

Recomendamos que você use a ferramenta de análise asmctl para validar a configuração básica do projeto, do cluster e das cargas de trabalho. Se um teste asmctl falhar, asmctl recomenda soluções, se possível. O comando asmctl validate executa testes básicos que verificam:

  1. que as APIs exigidas pelo Anthos Service Mesh estão ativadas no projeto;
  2. que o Istio-Ingressgateway está configurado corretamente para chamar a CA do Mesh;
  3. a integridade geral do Istiod e do Istio-Ingressgateway.

Se você executar o comando asmctl validate com a sinalização opcional --with-testing-workloads, além dos testes básicos, o asmctl executará testes de segurança que verificam:

  1. se a comunicação TLS mútua (mTLS) está configurada corretamente;
  2. se a CA do Mesh pode emitir certificados.

Para executar os testes de segurança, o asmctl implanta cargas de trabalho no cluster em um namespace de teste, executa os testes de comunicação mTLS, gera os resultados e exclui o namespace de teste.

Para executar asmctl:

  1. Verifique se o Application Default Credentials da gcloud está configurado:

     gcloud auth application-default login
    
  2. Receba credenciais de autenticação para interagir com o cluster, caso ainda não tenha feito isso:

     gcloud container clusters get-credentials ${CLUSTER_NAME}
    
  3. Para executar os testes básicos e de segurança, supondo que istio-1.4.10-asm.18/bin esteja no seu PATH:

    asmctl validate --with-testing-workloads
    

    Se for bem-sucedido, o comando responderá com uma saída semelhante à seguinte:

    [asmctl version 0.3.0]
    Using Kubernetes context: example-project_us-central1-example-cluster
    To change the context, use the --context flag
    Validating enabled APIs
    OK
    Validating ingressgateway configuration
    OK
    Validating istio system
    OK
    Validating sample traffic
    Launching example services...
    Sent traffic to example service http code: 200
    verified mTLS configuration
    OK
    Validating issued certs
    OK
    

Como injetar proxies sidecar

O Anthos Service Mesh usa proxies sidecar para aumentar a segurança, a confiabilidade e a observabilidade da rede. Com o Anthos Service Mesh, essas funções são abstraídas do contêiner principal do aplicativo e implementadas em um proxy comum fora do processo, entregue como um contêiner separado no mesmo pod.

Todas as cargas de trabalho em execução no cluster antes da instalação do Anthos Service Mesh precisam ter o proxy sidecar injetado ou atualizado para que tenham a versão atual do Anthos Service Mesh. Antes de implantar novas cargas de trabalho, configure a injeção de proxy sidecar para que o Anthos Service Mesh possa monitorar e proteger o tráfego.

É possível ativar a injeção automática do sidecar com um comando, por exemplo:

kubectl label namespace NAMESPACE istio-injection=enabled --overwrite

em que NAMESPACE é o nome do namespace para os serviços do seu aplicativo ou default se você não tiver criado explicitamente um namespace.

Saiba mais em Como injetar proxies sidecar.

Como ativar as políticas de segurança de pods

Para ter a melhor segurança na malha de serviço, recomendamos que você ative as políticas de segurança de pods.

Como visualizar as páginas do Anthos Service Mesh

Depois de implantar as cargas de trabalho no seu cluster com os proxies sidecar injetados, acesse as páginas do Anthos Service Mesh no Console do Google Cloud para ver todos os recursos de observabilidade que o Anthos Service Mesh oferece. Observe que leva cerca de um ou dois minutos para que os dados de telemetria sejam exibidos no console do Google Cloud após a implantação das cargas de trabalho.

O acesso ao Anthos Service Mesh no console do Google Cloud é controlado pelo Gerenciamento de identidade e acesso (IAM). Para acessar as páginas do Anthos Service Mesh, um proprietário do projeto precisa conceder aos usuários o papel de Editor ou Visualizador de projeto ou os papéis mais restritivos descritos em Como controlar o acesso ao Anthos Service Mesh no console do Google Cloud.

  1. No console do Google Cloud, acesse Anthos Service Mesh.

    Acesse o Anthos Service Mesh

  2. Selecione o projeto do Google Cloud na lista suspensa na barra de menus.

  3. Se você tiver mais de uma malha de serviço, selecione a malha na lista suspensa Service Mesh.

Para saber mais, consulte Como explorar o Anthos Service Mesh no console do Google Cloud.

Além das páginas do Anthos Service Mesh, as métricas relacionadas aos seus serviços, como o número de solicitações recebidas por um serviço específico, são enviadas para o Cloud Monitoring, onde elas aparecem o Metrics Explorer.

Para ver métricas:

  1. No Console do Google Cloud, acesse a página Monitoring.

    Acessar Monitoring

  2. Selecione Recursos > Metrics Explorer.

Veja uma lista completa de métricas em Métricas do Istio na documentação do Cloud Monitoring.

A seguir