Neste guia, descrevemos como configurar o Cloud Service Mesh gerenciado em um cluster do Autopilot do Google Kubernetes Engine (GKE). O Cloud Service Mesh é uma malha de serviço totalmente gerenciada com base no Istio.
Neste tutorial, mostramos como configurar uma malha de serviço pronta para produção em execução em um único cluster do Autopilot do GKE com configurações padrão. Recomendamos que você também consulte o guia de provisionamento completo do Cloud Service Mesh ao projetar o ambiente.
Vantagens de executar o Cloud Service Mesh gerenciado com o Autopilot do GKE
Quando você usa o GKE no modo Autopilot, o Google processa a configuração e o gerenciamento do cluster automaticamente. O modo Autopilot simplifica a experiência de operar um cluster e permite que você se concentre nos aplicativos. Da mesma forma, o Cloud Service Mesh gerenciado é uma malha de serviço totalmente gerenciada que pode ser provisionada seguindo algumas etapas.
- Você provisiona o Cloud Service Mesh gerenciado usando a
API Fleet, sem a necessidade
de ferramentas do lado do cliente, como
istioctl
. - O Cloud Service Mesh injeta proxies sidecar automaticamente em cargas de trabalho sem a necessidade de conceder privilégios elevados aos contêineres.
- É possível visualizar painéis avançados para sua malha e serviços sem nenhuma configuração extra e usar essas métricas para configurar objetivos de nível de serviço (SLOs) e alertas para monitorar a integridade dos aplicativos.
- O plano de controle do Cloud Service Mesh gerenciado é atualizado automaticamente para garantir que você tenha os recursos e patches de segurança mais recentes.
- O plano de dados gerenciado do Cloud Service Mesh faz upgrade automaticamente dos proxies sidecar nas cargas de trabalho para que você não precise reiniciar os serviços quando upgrades de proxy e patches de segurança estiverem disponíveis
- O Cloud Service Mesh é um produto compatível e pode ser configurado usando APIs Istio de código aberto padrão. Confira os recursos compatíveis.
Objetivos
- Criar um cluster do Autopilot do GKE
- Provisionar o Cloud Service Mesh gerenciado usando a API Fleet
- Implantar gateways de entrada da malha em um namespace dedicado
- Implantar um aplicativo de amostra
- Configurar o Cloud Service Mesh para aplicar a autenticação TLS mútua (mTLS) estrita para comunicação de serviço a serviço.
- Visualizar os painéis do Cloud Service Mesh e verificar se os serviços se conectam com mTLS
Custos
Neste documento, você usará os seguintes componentes faturáveis do Google Cloud:
Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços.
Ao concluir as tarefas descritas neste documento, é possível evitar o faturamento contínuo excluindo os recursos criados. Saiba mais em Limpeza.
Antes de começar
O Cloud Shell vem pré-instalado com o software necessário para este tutorial, incluindo o kubectl
, a gcloud CLI, o Helm e o Terraform. Se você não usa o Cloud Shell, é necessário instalar a gcloud CLI.
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Grant roles to your user account. Run the following command once for each of the following IAM roles:
roles/container.containerAdmin, roles/gkehub.admin, roles/serviceusage.serviceUsageAdmin
gcloud projects add-iam-policy-binding PROJECT_ID --member="USER_IDENTIFIER" --role=ROLE
- Replace
PROJECT_ID
with your project ID. -
Replace
USER_IDENTIFIER
with the identifier for your user account. For example,user:myemail@example.com
. - Replace
ROLE
with each individual role.
- Replace
configurar o ambiente
É possível configurar o ambiente usando a gcloud CLI ou o Terraform.
gcloud
Defina as variáveis de ambiente:
PROJECT_ID=PROJECT_ID gcloud config set project ${PROJECT_ID}
Ative a API Mesh:
gcloud services enable mesh.googleapis.com
A ativação do mesh.googleapis.com ativa as seguintes APIs:
API Finalidade Pode ser desativada? meshconfig.googleapis.com
O Cloud Service Mesh usa a API Mesh Configuration para redirecionar os dados de configuração da malha para o Google Cloud. Além disso, ativar a API Mesh Configuration permite acessar as páginas do Cloud Service Mesh no console do Google Cloud e usar a autoridade certificadora do Cloud Service Mesh. Não meshca.googleapis.com
Relacionada à autoridade certificadora do Cloud Service Mesh usada pelo Cloud Service Mesh gerenciado. Não container.googleapis.com
Necessária para a criação de clusters do Google Kubernetes Engine (GKE). Não gkehub.googleapis.com
Necessária para o gerenciamento da malha como uma frota. Não monitoring.googleapis.com
Necessária para a captura da telemetria de cargas de trabalho da malha. Não stackdriver.googleapis.com
Necessária para uso da interface dos serviços. Não opsconfigmonitoring.googleapis.com
Necessária para uso da interface dos serviços para clusters fora do Google Cloud. Não connectgateway.googleapis.com
Necessária para que o plano de controle do Cloud Service Mesh gerenciado acesse cargas de trabalho da malha. Sim* trafficdirector.googleapis.com
Permite um plano de controle gerenciado altamente disponível e escalonável. Sim* networkservices.googleapis.com
Permite um plano de controle gerenciado altamente disponível e escalonável. Sim* networksecurity.googleapis.com
Permite um plano de controle gerenciado altamente disponível e escalonável. Sim*
Terraform
gcloud config set project PROJECT_ID
GOOGLE_CLOUD_PROJECT=$(gcloud config get-value project)
export GOOGLE_CLOUD_PROJECT
Crie um cluster do GKE
Criar um cluster do GKE no modo Autopilot.
gcloud
Crie um cluster registrado como membro de uma frota:
gcloud container clusters create-auto asm-cluster \ --location="us-central1" \ --enable-fleet
Verifique se o cluster está registrado na frota:
gcloud container fleet memberships list
O resultado será assim:
NAME: asm-cluster EXTERNAL_ID: LOCATION: us-central1
Anote o nome da assinatura, porque você precisará dele para configurar o Cloud Service Mesh.
Terraform
Para criar um cluster do GKE, use o recurso google_container_cluster
. Você define o bloco fleet
para que o
cluster seja adicionado a uma frota quando for criado.
Para saber como aplicar ou remover uma configuração do Terraform, consulte Comandos básicos do Terraform.
Provisionar o Cloud Service Mesh gerenciado
Provisione o Cloud Service Mesh gerenciado usando o recurso servicemesh
na
assinatura da frota do cluster.
gcloud
Ative o recurso de frota do Cloud Service Mesh no projeto:
gcloud container fleet mesh enable
Ative o gerenciamento automático da malha:
gcloud container fleet mesh update \ --management=automatic \ --memberships=MEMBERSHIP_NAME \ --location=us-central1
Substitua
MEMBERSHIP_NAME
pelo nome da associação listado quando você verificou que o cluster está registrado na frota.
Terraform
Para ativar a API mesh, use o recurso google_project_service
.
Use os recursos google_gke_hub_feature
e
google_gke_hub_feature_membership
para configurar o Cloud Service Mesh gerenciado no cluster.
Para saber como aplicar ou remover uma configuração do Terraform, consulte Comandos básicos do Terraform.
Verificar se o plano de controle está ativo
Aguarde até que o controlPlaneManagement.state
esteja ACTIVE
. Isso pode levar até 15 minutos.
watch -n 30 gcloud container fleet mesh describe
A resposta é semelhante a:
membershipSpecs:
projects/746296320118/locations/us-central1/memberships/asm-cluster:
mesh:
management: MANAGEMENT_AUTOMATIC
membershipStates:
projects/746296320118/locations/us-central1/memberships/asm-cluster:
servicemesh:
controlPlaneManagement:
details:
- code: REVISION_READY
details: 'Ready: asm-managed'
state: ACTIVE
dataPlaneManagement:
details:
- code: PROVISIONING
details: Service is provisioning.
state: PROVISIONING
state:
code: OK
description: 'Revision(s) ready for use: asm-managed.'
A seção dataPlaneManagement
permanece no estado PROVISIONING
até
você implantar o gateway de entrada, porque os clusters do Autopilot não
provisionam nós até que uma carga de trabalho seja implantada.
Implantar um gateway de entrada da malha
Nesta seção, você implanta um gateway de entrada da malha para lidar com o tráfego de entrada para o aplicativo de amostra. Um gateway de entrada é um balanceador de carga que opera na borda da malha e recebe conexões HTTP/TCP de entrada ou saída.
Implante o gateway em um namespace dedicado e rotule a implantação para garantir que o gateway possa ser gerenciado com segurança e atualizado automaticamente pelo plano de controle do Cloud Service Mesh.
Faça o download das credenciais para acessar o cluster:
gcloud container clusters get-credentials asm-cluster --location=us-central1
Crie um namespace para a implantação do gateway:
kubectl create namespace bank-gateways
Adicione um rótulo ao namespace para que o plano de controle do Cloud Service Mesh injete automaticamente a configuração do gateway na implantação.
kubectl label namespace bank-gateways istio-injection=enabled
Implante o gateway de entrada no namespace:
Helm
helm repo add istio https://istio-release.storage.googleapis.com/charts helm repo update helm install --wait --namespace bank-gateways \ --set resources.requests.cpu=250m \ --set resources.requests.memory=512Mi \ --set resources.requests.ephemeral-storage=1Gi \ --set resources.limits.cpu=250m \ --set resources.limits.memory=512Mi \ --set resources.limits.ephemeral-storage=1Gi \ istio-ingressgateway istio/gateway
kubectl
kubectl apply -n bank-gateways \ -k https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages/tree/main/samples/gateways/istio-ingressgateway kubectl -n bank-gateway wait "deployment/istio-ingressgateway" \ --for=condition=available --timeout=240s
Verifique se você definiu solicitações de recursos adequadas ao implantar em um ambiente de produção. O Autopilot do GKE considera apenas valores de recursos definidos em
requests
, e não emlimits
. O projeto do Istio publica informações sobre desempenho e escalonabilidade.
Implantar o aplicativo de amostra
Crie um namespace do Kubernetes para a implantação:
kubectl create namespace bank-sample
Adicione um rótulo ao namespace para que o Cloud Service Mesh injete automaticamente proxies sidecar nos pods de amostra:
kubectl label namespace bank-sample istio-injection=enabled
Implantar o aplicativo de amostra:
git clone https://github.com/GoogleCloudPlatform/bank-of-anthos.git kubectl apply -n bank-sample -f bank-of-anthos/extras/jwt/jwt-secret.yaml kubectl apply -n bank-sample -f bank-of-anthos/kubernetes-manifests/
Aguarde o aplicativo ficar pronto. Isso levará alguns minutos.
watch kubectl -n bank-sample get pods
Quando o aplicativo estiver pronto, a saída será semelhante a esta:
NAME READY STATUS RESTARTS AGE accounts-db-0 2/2 Running 0 2m16s balancereader-5c695f78f5-x4wlz 2/2 Running 0 3m8s contacts-557fc79c5-5d7fg 2/2 Running 0 3m7s frontend-7dd589c5d7-b4cgq 2/2 Running 0 3m7s ledger-db-0 2/2 Running 0 3m6s ledgerwriter-6497f5cf9b-25c6x 2/2 Running 0 3m5s loadgenerator-57f6896fd6-lx5df 2/2 Running 0 3m5s transactionhistory-6c498965f-tl2sk 2/2 Running 0 3m4s userservice-95f44b65b-mlk2p 2/2 Running 0 3m4s
Crie os recursos
Gateway
eVirtualService
do Istio para expor o aplicativo por trás do gateway de entrada:kubectl apply -n bank-sample -f bank-of-anthos/extras/istio/frontend-ingress.yaml
Receba um link para o aplicativo de amostra:
INGRESS_HOST=$(kubectl -n bank-gateways get service istio-ingressgateway \ -o jsonpath='{.status.loadBalancer.ingress[0].ip}') echo "http://$INGRESS_HOST"
Em um navegador, siga o link para abrir o aplicativo de amostra. Faça login com o nome de usuário e a senha padrão para ver o aplicativo.
Aplicar TLS mútuo
Verifique se o modo TLS mútuo (mTLS) STRICT está ativado. Aplique uma política
PeerAuthentication
padrão para a malha no namespace istio-system.
Salve o seguinte manifesto como
mesh-peer-authn.yaml
:apiVersion: "security.istio.io/v1beta1" kind: "PeerAuthentication" metadata: name: "default" namespace: "istio-system" spec: mtls: mode: STRICT
Aplique o manifesto ao cluster:
kubectl apply -f mesh-peer-authn.yaml
É possível modificar essa configuração criando recursos PeerAuthentication
em namespaces específicos.
Conhecer os painéis do Cloud Service Mesh
No console do Google Cloud, acesse Cloud Service Mesh para ver os painéis da malha:
Selecione o projeto na lista suspensa na barra de menus.
Você verá uma tabela de visão geral com todos os microsserviços na sua malha e uma visualização gráfica das conexões entre os microsserviços. Para cada microsserviço, a tabela mostra três "sinais de ouro" de SRE:
- Tráfego: solicitações por segundo
- Taxa de erros: uma porcentagem
- Latência: milissegundos
Essas métricas são baseadas no tráfego real que está sendo processado pelos microsserviços. O tráfego de teste constante é enviado automaticamente para o serviço
frontend
por um clienteloadgenerator
implantado como parte do aplicativo de amostra. O Cloud Service Mesh envia automaticamente métricas, registros e, opcionalmente, traces para a observabilidade do Google Cloud.Clique no serviço
frontend
na tabela para ver um painel de visão geral do serviço. Você verá métricas adicionais do serviço e uma visualização de conexões de entrada e saída. Também é possível criar um objeto de nível de serviço (SLO, na sigla em inglês) para monitorar e enviar alertas sobre o serviço.
Verificar se o mTLS está ativado
Clique no link de segurança
no painel para ter uma visão geral da segurança do serviço frontend
.
A tabela e a visualização mostram um ícone de cadeado verde para cada conexão de entrada e saída entre microsserviços. Esse ícone indica que a
conexão está usando mTLS para autenticação e criptografia.
Limpar
Para evitar cobranças na sua conta do Google Cloud pelos recursos usados no tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.
Para evitar cobranças dos recursos usados neste tutorial na conta do Google Cloud, siga estas etapas:
Exclua o projeto
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
Excluir recursos individuais
Se você usou um projeto existente e não quer excluí-lo, exclua os recursos individuais.
gcloud
Exclua o aplicativo e os gateways de amostra:
kubectl delete namespace bank-sample kubectl delete namespace bank-gateways
Exclua o cluster do GKE:
gcloud container clusters delete --region us-central1 asm-cluster --quiet
Terraform
Exclua os recursos que você criou com o Terraform:
terraform destroy