Prepare-se para configurar com a API GKE Gateway
A configuração descrita neste documento tem suporte para clientes de pré-lançamento, mas não é recomendada para novos usuários do Cloud Service Mesh. Para mais informações, consulte a Visão geral do Cloud Service Mesh.
Este guia mostra como preparar o ambiente para usar a API Gateway do Google Kubernetes Engine com o Cloud Service Mesh. Em geral, você precisa realizar as seguintes etapas:
- Ativar os serviços necessários da API do Google Cloud.
- Implantar um cluster do GKE.
- Configurar as permissões de IAM.
- Instalar as definições de recursos personalizados (CRDs) necessárias.
- Registrar o cluster em uma frota.
- [Opcional] Ativar os serviços de vários clusters (Descoberta de serviços em vários clusters).
- Ativar a malha de serviço.
Se você não estiver usando o GKE, use as
APIs de roteamento de serviço
e crie um recurso Mesh
.
Antes de começar
Verifique se os componentes da implantação atendem a estes requisitos:
- O GKE precisa ser a versão 1.20 ou mais recente.
- Somente planos de dados com a
API xDS versão 3
e versões mais recentes são compatíveis.
- Versão mínima do Envoy 1.20.0
- Versão mínima do gerador de inicialização do gRPC: v0.14.0
- Os clusters do GKE precisam estar no modo nativo de VPC (IP do alias).
- Os clusters autogerenciados do Kubernetes no Compute Engine, ao contrário do GKE, não são compatíveis.
- Todas as outras restrições listadas para a funcionalidade de gateway no GKE se aplicam à integração do Cloud Service Mesh com a API GKE Gateway.
- A conta de serviço dos nós e pods do GKE precisa ter permissão para acessar a API Traffic Director. Para mais informações sobre as permissões necessárias, consulte Como ativar a conta de serviço para acessar a API Traffic Director.
- O uso de recursos por projeto e as limitações de cota do serviço de back-end se aplicam.
Ative os serviços necessários da API do Google Cloud
Execute o seguinte comando para ativar as APIs necessárias, se elas ainda não estiverem ativadas no seu projeto:
gcloud services enable --project=PROJECT_ID \ container.googleapis.com \ gkehub.googleapis.com \ multiclusteringress.googleapis.com \ trafficdirector.googleapis.com \ networkservices.googleapis.com
Se você planeja incluir mais de um cluster na frota, ative a API
multiclusterservicediscovery
:gcloud services enable --project=PROJECT_ID \ multiclusterservicediscovery.googleapis.com
implante um Cluster do GKE
Use estas instruções para implantar um cluster do GKE.
Crie um cluster do GKE chamado
gke-1
na zonaus-west1-a
:gcloud container clusters create gke-1 \ --zone=us-west1-a \ --enable-ip-alias \ --workload-pool=PROJECT_ID.svc.id.goog \ --scopes=https://www.googleapis.com/auth/cloud-platform \ --enable-mesh-certificates \ --release-channel=regular \ --project=PROJECT_ID
--enable-ip-alias
: essa sinalização cria um cluster nativo de VPC e torna os endereços IP dos pods roteáveis na rede VPC.--workload-pool
: esta sinalização permite que o cluster participe do pool de identidades da carga de trabalho do projeto.--scopes
: essa sinalização especifica os escopos do OAuth atribuídos aos nós do cluster.--release-channel
: essa sinalização designa o canalregular
.--enable-mesh-certificates
: essa sinalização ativa o mTLS automático se ele for disponibilizado no futuro.
Consiga as credenciais do cluster:
gcloud container clusters get-credentials gke-1 --zone=us-west1-a
Renomeie o contexto do cluster:
kubectl config rename-context gke_PROJECT_ID_us-west1-a_gke-1 gke-1
Configure as permissões do IAM para o plano de dados
Para esta implantação de demonstração, você concede o papel de cliente do Cloud Service Mesh
roles/trafficdirector.client
para todos os usuários autenticados, incluindo todos os serviços
no cluster do GKE. Esse papel do IAM tem
necessárias para autorizar clientes do Cloud Service Mesh no plano de dados, como
Envoys, para receber a configuração do Cloud Service Mesh.
Se você não quiser conceder o papel do cliente a todos os usuários autenticados e preferir restringir o papel a contas de serviço, consulte o guia de identidade da carga de trabalho do GKE para configurar um conta de serviço especializada do Kubernetes com o papel
roles/trafficdirector.client
para seus serviços.
Conceda o papel
client
às contas de serviço:gcloud projects add-iam-policy-binding PROJECT_ID \ --member "group:PROJECT_ID.svc.id.goog:/allAuthenticatedUsers/" \ --role "roles/trafficdirector.client"
Instalar as definições de recurso personalizadas necessárias
Instale as definições de recursos personalizados (CRDs) necessárias para usar o API Gateway com o Cloud Service Mesh:
kubectl apply -k "github.com/kubernetes-sigs/gateway-api/config/crd/experimental?ref=v0.6.0"
kubectl kustomize "https://github.com/GoogleCloudPlatform/gke-networking-recipes.git/gateway-api/config/mesh/crd" \ | kubectl apply -f -
Verifique se as CRDs necessárias estão instaladas automaticamente no cluster executando o seguinte comando:
kubectl get crds
A resposta lista os CRDs a seguir e outros não relacionados à API Gateway, todos com datas de criação diferentes:
NAME CREATED AT gatewayclasses.gateway.networking.k8s.io 2023-08-08T05:29:03Z gateways.gateway.networking.k8s.io 2023-08-08T05:29:03Z grpcroutes.gateway.networking.k8s.io 2023-08-08T05:29:03Z httproutes.gateway.networking.k8s.io 2023-08-08T05:29:03Z referencegrants.gateway.networking.k8s.io 2023-08-08T05:29:04Z tcproutes.gateway.networking.k8s.io 2023-08-08T05:29:04Z tdgrpcroutes.net.gke.io 2023-08-08T05:29:23Z tdmeshes.net.gke.io 2023-08-08T05:29:23Z tlsroutes.gateway.networking.k8s.io 2023-08-08T05:29:05Z udproutes.gateway.networking.k8s.io 2023-08-08T05:29:05Z
Os recursos personalizados tdmeshes.net.gke.io
e tdgrpcroutes.net.gke.io
são instalados na etapa anterior.
As CRDs que fazem parte do grupo de APIs net.gke.io
são
específicas do GKE. Esses recursos não fazem parte da implementação da API OSS Gateway, que está no grupo de APIs networking.k8s.io
.
Registrar o cluster em uma frota
Após a criação do cluster, você precisa registrá-lo em uma frota. Registrar seu cluster em uma frota permite ativar seletivamente os recursos no cluster registrado.
Registre o cluster na frota:
gcloud container hub memberships register gke-1 \ --gke-cluster us-west1-a/gke-1 \ --location global \ --project=PROJECT_ID
Confirme se o cluster está registrado com a frota:
gcloud container hub memberships list --project=PROJECT_ID
O resultado será assim:
NAME EXTERNAL_ID gke-1 657e835d-3b6b-4bc5-9283-99d2da8c2e1b
(Opcional) Ative a descoberta de serviços de vários clusters
O recurso "Descoberta de serviços de vários clusters" permite exportar serviços locais de clusters para todos os clusters registrados na frota. Essa etapa é opcional se você não planeja incluir mais de um cluster na sua frota.
Ative a descoberta de serviços de vários clusters:
gcloud container hub multi-cluster-services enable \ --project PROJECT_ID
Conceda o papel Identity and Access Management (IAM) necessário para a descoberta de serviços de vários clusters:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:PROJECT_ID.svc.id.goog[gke-mcs/gke-mcs-importer]" \ --role "roles/compute.networkViewer"
Confirme se a descoberta de serviços de vários clusters está ativada para o cluster registrado. Pode levar alguns minutos para que todos os clusters sejam exibidos:
gcloud container hub multi-cluster-services describe --project=PROJECT_ID
Você verá as assinaturas de
gke-1
, semelhantes às seguintes:createTime: '2021-04-02T19:34:57.832055223Z' membershipStates projects/PROJECT_NUM/locations/global/memberships/gke-1: state: code: OK description: Firewall successfully updated updateTime: '2021-05-27T11:03:07.770208064Z' name: projects/PROJECT_NUM/locations/global/features/multiclusterservicediscovery resourceState: state: ACTIVE spec: {} updateTime: '2021-04-02T19:34:58.983512446Z'
Ativar a malha de serviço do GKE do Cloud Service Mesh
Nesta seção, você ativará a malha de serviço.
Ative a malha de serviço do GKE do Cloud Service Mesh no cluster que você registrou com sua frota:
gcloud container hub ingress enable \ --config-membership=projects/PROJECT_ID/locations/global/memberships/gke-1 \ --project=PROJECT_ID
Confirme se o recurso está ativado:
gcloud container hub ingress describe --project=PROJECT_ID
A resposta será semelhante a esta:
createTime: '2021-05-26T13:27:37.460383111Z' membershipStates: projects/PROJECT_NUM/locations/global/memberships/gke-1: state: code: OK updateTime: '2021-05-27T15:08:19.397896080Z' resourceState: state: ACTIVE spec: multiclusteringress: configMembership: projects/PROJECT_ID/locations/global/memberships/gke-1 state: state: code: OK description: Ready to use updateTime: '2021-05-26T13:27:37.899549111Z' updateTime: '2021-05-27T15:08:19.397895711Z'
Conceda os seguintes papéis de gerenciamento de identidade e acesso (IAM), exigidos pelo controlador da API Gateway:
- roles/container.developer: esse papel permite que o controlador gerencie recursos do Kubernetes no cluster.
- roles/compute.networkAdmin: esse papel permite que o controlador gerencie as configurações da malha de serviço do Cloud Service Mesh.
export PROJECT_NUMBER=$(gcloud projects describe PROJECT_ID --format="value (projectNumber)") gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-multiclusteringress.iam.gserviceaccount.com" \ --role "roles/container.developer"
gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-multiclusteringress.iam.gserviceaccount.com" \ --role "roles/compute.networkAdmin"
A seguir
Para configurar um exemplo de implantação, leia estes guias:
- Como configurar uma malha de serviço de arquivo secundário do Envoy
- Como configurar uma malha de serviço gRPC sem proxy
- Como configurar uma malha de serviço de vários clusters