Como instalar o Anthos Service Mesh usando a CLI do GKE Enterprise

Neste guia, explicamos como instalar o Anthos Service Mesh 1.4.10-asm.18 em um novo cluster do Google Cloud GKE usando a interface de linha de comando (CLI) do Anthos com os seguintes recursos ativados:

Atualmente, a CLI do GKE Enterprise não é compatível com instalações em um cluster atual do GKE ou no GKE no VMware.

Antes de começar

Veja o que é necessário para seguir este guia:

Requisitos

  • Você precisa ter uma licença ou assinatura de teste do GKE Enterprise. Consulte o guia de preços do GKE Enterprise para ver mais detalhes.

  • Seu cluster do GKE precisa atender aos seguintes requisitos:

  • Para serem incluídos na malha de serviço, as portas precisam ser nomeadas, e o nome precisa incluir o protocolo da porta na seguinte sintaxe: name: protocol[-suffix], em que os colchetes indicam um sufixo opcional que precisa começar com um traço. Para mais informações, Como nomear portas de serviço.

  • Se estiver instalando o Anthos Service Mesh em um cluster privado, será necessário adicionar uma regra de firewall para abrir a porta 9443 se quiser usar a injeção automática de sidecar. Se não adicionar a regra de firewall e a injeção automática de sidecar estiver ativada, você receberá um erro ao implantar as cargas de trabalho. Saiba mais sobre como adicionar uma regra de firewall em Como adicionar regras de firewall para casos de uso específicos.

  • Se você tiver criado um perímetro de serviço na sua organização, talvez seja necessário adicionar o serviço Mesh CA ao perímetro. Saiba mais em Como adicionar o Mesh CA a um perímetro de serviço .

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

Como instalar kpt e a CLI do Anthos

Use kpt para instalar a CLI do GKE Enterprise. Use também kpt para fazer o download, gerenciar e personalizar os arquivos de configuração de recursos do Anthos Service Mesh armazenados no GitHub. Os arquivos de configuração contêm marcadores para as informações específicas do cluster do GKE e do projeto do Google Cloud. Depois de personalizar os arquivos de configuração, é possível verificá-los no seu repositório do GitHub ou em outro sistema de controle de origem.

  1. Faça a autenticação com a Google Cloud CLI:

    gcloud auth login
    
  2. Receba o ID do projeto do Google Cloud e crie uma variável de ambiente para ele:

    export PROJECT_ID=YOUR_PROJECT_ID
  3. Defina o ID do projeto padrão para a Google Cloud CLI:

    gcloud config set project ${PROJECT_ID}
    
  4. Selecione uma zona ou região e um tipo de máquina para o novo cluster. O tipo de máquina mínimo exigido pelo Anthos Service Mesh é n1-standard-4. Use qualquer opção de canal de lançamento.

    • Se você criar um cluster de zona única, execute o seguinte comando para ver uma lista das zonas do GCP disponíveis:

      gcloud compute zones list
      
    • Se você estiver criando um cluster regional, execute o seguinte comando para ver uma lista das regiões disponíveis:

      gcloud compute regions list
      
    • Para ver uma lista de tipos de máquina:

      gcloud compute machine-types list | more
      
  5. Crie as variáveis de ambiente a seguir:

    • Defina o nome do cluster:

      export CLUSTER_NAME=YOUR_CLUSTER_NAME

      O nome do cluster precisa conter apenas caracteres alfanuméricos em letras minúsculas e "-", precisa começar com uma letra e terminar com um alfanumérico e não pode ter mais de 40 caracteres.

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

      export CLUSTER_LOCATION=YOUR_ZONE_OR_REGION
  6. Instale a CLI do GKE Enterprise e atualize os componentes. Se você estiver usando o Cloud Shell, adicione sudo aos comandos a seguir:

    gcloud components install kpt anthoscli alpha
    gcloud components update --version 292.0.0
  7. Opcionalmente, crie um novo diretório para o pacote Anthos Service Mesh e cd para ele.

  8. Faça o download do pacote do Anthos Service Mesh no diretório de trabalho atual:

    kpt pkg get \
    https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/asm@release-1.4-asm .
    

    Por padrão, o comando kpt pkg get preenche a zona do Compute nos arquivos do pacote para corresponder à configuração atual.

  9. Defina os seguintes valores nos seus arquivos de configuração:

    • Defina o ID do projeto:

      kpt cfg set asm gcloud.core.project ${PROJECT_ID}
    • Defina o nome do cluster:

      kpt cfg set asm cluster-name ${CLUSTER_NAME}
    • Defina a zona ou a região padrão:

      kpt cfg set asm gcloud.compute.zone ${CLUSTER_LOCATION}
    • Se quiser, mude o canal de lançamento do padrão, REGULAR. No comando a seguir, substitua YOUR_CHANNEL por STABLE ou RAPID.

      kpt cfg set asm gcloud.container.cluster.releaseChannel YOUR_CHANNEL

      Veja uma descrição de cada canal em Quais canais estão disponíveis.

Como instalar o Anthos Service Mesh em um novo cluster

  1. Execute o comando a seguir para criar um novo cluster e instalar o Anthos Service Mesh usando os arquivos de configuração do Anthos Service Mesh que você personalizou:

    anthoscli apply -f asm
    
  2. Aguarde a conclusão da implantação:

    kubectl wait --for=condition=available --timeout=600s deployment --all -n istio-system
    

    Saída:

    deployment.extensions/istio-galley condition met
    deployment.extensions/istio-ingressgateway condition met
    deployment.extensions/istio-pilot condition met
    deployment.extensions/istio-sidecar-injector condition met
    deployment.extensions/promsd condition met

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.

Verifique se o Mesh CA está funcionando:

  kubectl get pods -n istio-system -l app=istio-nodeagent \
  --output=jsonpath={​.items..metadata.name} -o yaml | grep CA_ADDR -A 1

Saída esperada: meshca.googleapis.com:443.

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.

Ativar 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 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.

Antes de você implantar cargas de trabalho, configure uma injeção do proxy sidecar para o Anthos Service Mesh 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 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.

Como instalar uma amostra usando kpt

Se preferir, use kpt para instalar a amostra do Hipster no cluster.

  1. Faça o download da amostra:

    kpt pkg get \
    https://github.com/GoogleCloudPlatform/microservices-demo.git/release \
    hipster-demo
    
  2. Ative a injeção automática de sidecar:

    kubectl label namespace default istio-injection=enabled
    
  3. Implante a amostra no cluster:

    kubectl apply -f hipster-demo
    

    Agora que você tem uma amostra em execução, explore o Anthos Service Mesh no Console do Google Cloud. Pode levar até 5 minutos para o gráfico de topologia exibir os serviços na malha.

Quando terminar de explorar, remova a amostra Hipster:

kubectl delete -f hipster-demo

A seguir