Este guia descreve como configurar o Cloud Service Mesh gerido num cluster do Google Kubernetes Engine (GKE) Autopilot. O Cloud Service Mesh é uma malha de serviços totalmente gerida baseada no Istio.
Este tutorial mostra como configurar uma malha de serviços pronta para produção num único cluster do GKE Autopilot com as predefinições. Recomendamos que consulte também o guia de aprovisionamento do Cloud Service Mesh completo quando conceber o seu ambiente.
Vantagens da execução do Cloud Service Mesh gerido com o GKE Autopilot
Quando usa o GKE no modo Autopilot, a Google processa a configuração e a gestão do seu cluster automaticamente. O modo de piloto automático simplifica a experiência de operar um cluster e permite-lhe focar-se nas suas aplicações. Da mesma forma, o Cloud Service Mesh gerido é uma malha de serviços totalmente gerida que pode aprovisionar seguindo alguns passos.
- Aprovisiona o Cloud Service Mesh gerido através da API Fleet, sem necessidade de ferramentas do lado do cliente, como o
istioctl
. - O Cloud Service Mesh injeta automaticamente proxies sidecar em cargas de trabalho sem necessidade de conceder privilégios elevados aos seus contentores.
- Pode ver painéis de controlo detalhados para a sua malha e serviços sem qualquer configuração adicional e, em seguida, usar estas métricas para configurar objetivos de nível de serviço (SLOs) e alertas para monitorizar o estado das suas aplicações
- O painel de controlo do Cloud Service Mesh gerido é atualizado automaticamente para garantir que recebe os patches e as funcionalidades de segurança mais recentes
- O plano de dados gerido da Cloud Service Mesh atualiza automaticamente os proxies auxiliares nas suas cargas de trabalho para que não tenha de reiniciar os serviços manualmente quando estiverem disponíveis atualizações de proxies e patches de segurança
- O Cloud Service Mesh é um produto suportado e pode ser configurado através das APIs Istio de código aberto padrão. Consulte as funcionalidades suportadas.
Configure o seu ambiente
Pode configurar o seu ambiente através da CLI gcloud ou do Terraform.
gcloud
Defina 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 de mesh.googleapis.com ativa as seguintes APIs:
API Finalidade Pode ser desativado meshconfig.googleapis.com
O Cloud Service Mesh usa a API Mesh Configuration para retransmitir dados de configuração da sua malha para Google Cloud. Além disso, a ativação da API Mesh Configuration permite-lhe aceder às páginas do Cloud Service Mesh na Google Cloud consola e usar a autoridade de certificação do Cloud Service Mesh. Não meshca.googleapis.com
Relacionado com a autoridade de certificação do Cloud Service Mesh usada pelo Cloud Service Mesh gerido. Não container.googleapis.com
Necessário para criar clusters do Google Kubernetes Engine (GKE). Não gkehub.googleapis.com
Necessário para gerir a malha como uma frota. Não monitoring.googleapis.com
Necessário para capturar telemetria para cargas de trabalho de malha. Não stackdriver.googleapis.com
Necessário para usar a IU dos Serviços. Não opsconfigmonitoring.googleapis.com
Necessário para usar a IU dos serviços para clusters fora doGoogle Cloud. Não connectgateway.googleapis.com
Necessário para que o plano de controlo do Cloud Service Mesh gerido possa aceder às cargas de trabalho da malha. Sim* trafficdirector.googleapis.com
Ativa um plano de controlo gerido altamente disponível e escalável. Sim* networkservices.googleapis.com
Ativa um plano de controlo gerido altamente disponível e escalável. Sim* networksecurity.googleapis.com
Ativa um plano de controlo gerido altamente disponível e escalá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
Crie um cluster do GKE no modo Autopilot.
gcloud
Criar um cluster registado como membro de uma frota:
gcloud container clusters create-auto asm-cluster \ --location="us-central1" \ --enable-fleet
Verifique se o cluster está registado na frota:
gcloud container fleet memberships list
O resultado é semelhante ao seguinte:
NAME: asm-cluster EXTERNAL_ID: LOCATION: us-central1
Tome nota do nome da associação, uma vez que precisa dele para configurar o Cloud Service Mesh.
Terraform
Para criar um cluster do GKE, pode usar o recurso google_container_cluster
. 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 os comandos básicos do Terraform.
Aprovisione o Cloud Service Mesh gerido
Aprovisiona o Cloud Service Mesh gerido através da funcionalidade servicemesh
na
associação de frota para o seu cluster.
gcloud
Ative a funcionalidade de frota do Cloud Service Mesh no projeto:
gcloud container fleet mesh enable
Ative a gestão automática da malha:
gcloud container fleet mesh update \ --management=automatic \ --memberships=MEMBERSHIP_NAME \ --location=us-central1
Substitua
MEMBERSHIP_NAME
pelo nome do membro indicado quando validou que o cluster está registado na frota.
Terraform
Para ativar a API Mesh, pode usar o recurso google_project_service
.
Usa os recursos google_gke_hub_feature
e google_gke_hub_feature_membership
para configurar o Cloud Service Mesh gerido no seu cluster.
Para saber como aplicar ou remover uma configuração do Terraform, consulte os comandos básicos do Terraform.
Verifique se o plano de controlo está ativo
Aguarde até que o controlPlaneManagement.state
esteja ACTIVE
. Esta ação pode demorar até 15 minutos.
watch -n 30 gcloud container fleet mesh describe
O resultado é semelhante ao seguinte:
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 secção dataPlaneManagement
permanece no estado PROVISIONING
até implementar o gateway de entrada, porque os clusters do Autopilot não aprovisionam nós até implementar uma carga de trabalho.
Implemente um gateway de entrada de malha
Nesta secção, implementa um gateway de entrada de malha para processar o tráfego recebido para a aplicação de exemplo. Um gateway de entrada é um balanceador de carga que opera no limite da malha, recebendo ligações HTTP/TCP de entrada ou saída.
Implementa a gateway num espaço de nomes dedicado e etiqueta a implementação para garantir que a gateway pode ser gerida em segurança e atualizada automaticamente pelo plano de controlo do Cloud Service Mesh.
Transfira as credenciais para poder aceder ao cluster:
gcloud container clusters get-credentials asm-cluster --location=us-central1
Crie um espaço de nomes para a implementação do gateway:
kubectl create namespace bank-gateways
Adicione uma etiqueta ao espaço de nomes para que o plano de controlo da malha de serviços na nuvem injete automaticamente a configuração da gateway na implementação.
kubectl label namespace bank-gateways istio-injection=enabled
Implemente a gateway de entrada no espaço de nomes:
Leme
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
git clone https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages kubectl apply -n bank-gateways \ -f ./anthos-service-mesh-packages/samples/gateways/istio-ingressgateway kubectl -n bank-gateways wait "deployment/istio-ingressgateway" \ --for=condition=available --timeout=240s
Certifique-se de que define pedidos de recursos adequados quando implementar num ambiente de produção. O GKE Autopilot só considera os valores de recursos definidos em
requests
e não emlimits
. O projeto Istio publica informações sobre o desempenho e a escalabilidade.
Implemente a aplicação de exemplo
Crie um espaço de nomes do Kubernetes para a implementação:
kubectl create namespace bank-sample
Adicione uma etiqueta ao espaço de nomes para que o Cloud Service Mesh injete automaticamente proxies sidecar nos pods de exemplo:
kubectl label namespace bank-sample istio-injection=enabled
Implemente a aplicação de exemplo:
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 até que a aplicação esteja pronta. Esta ação vai demorar vários minutos.
watch kubectl -n bank-sample get pods
Quando a aplicação estiver pronta, o resultado é semelhante ao seguinte:
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 recursos do Istio
Gateway
eVirtualService
para expor a aplicação atrás do gateway de entrada:kubectl apply -n bank-sample -f bank-of-anthos/extras/istio/frontend-ingress.yaml
Obtenha um link para a aplicação de exemplo:
INGRESS_HOST=$(kubectl -n bank-gateways get service istio-ingressgateway \ -o jsonpath='{.status.loadBalancer.ingress[0].ip}') echo "http://$INGRESS_HOST"
Num navegador, siga o link para abrir a aplicação de exemplo. Inicie sessão com o nome de utilizador e a palavra-passe predefinidos para ver a aplicação.
Aplique o TLS mútuo
Certifique-se de que o modo TLS mútuo (mTLS) STRICT está ativado. Aplique uma política
PeerAuthentication
predefinida para a malha no espaço de nomes istio-system.
Guarde 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
Pode substituir esta configuração criando recursos PeerAuthentication
em espaços de nomes específicos.
Explore os painéis de controlo do Cloud Service Mesh
Na Google Cloud consola, aceda a Cloud Service Mesh para ver os painéis de controlo da sua malha:
Selecione o projeto na lista pendente da barra de menu.
É apresentada uma tabela de vista geral com todos os microsserviços na sua malha e uma visualização gráfica das ligações entre os microsserviços. Para cada microsserviço, a tabela mostra três dos "sinais de ouro" da SRE:
- Tráfego: pedidos por segundo
- Taxa de erros: uma percentagem
- Latência – milissegundos
Estas métricas baseiam-se no tráfego real processado pelos microsserviços. O tráfego de teste constante é enviado automaticamente para o serviço
frontend
por um clienteloadgenerator
implementado como parte da aplicação de exemplo. O Cloud Service Mesh envia automaticamente métricas, registos e (opcionalmente) rastreios para o Google Cloud Observability.Clique no serviço
frontend
na tabela para ver um painel de controlo de vista geral do serviço. São apresentadas métricas adicionais para o serviço e uma visualização das ligações de entrada e saída. Também pode criar um objeto ao nível do serviço (SLO) para monitorização e alertas no serviço.
Verifique se o mTLS está ativado
Clique no link de segurança
no painel para ver uma vista geral da segurança do serviço frontend
.
A tabela e a visualização mostram um ícone de cadeado verde para cada uma das ligações de entrada e saída entre microsserviços. Este ícone indica que a ligação está a usar mTLS para autenticação e encriptação.