Prepare-se para configurar a API Gateway para o Cloud Service Mesh

Esta página descreve como instalar as definições de recursos personalizados necessárias para o gateway no cluster.

Limitações

  • Não é possível ter uma mistura de clusters de config-api gateway e istio na mesma frota.
  • O balanceamento de carga e a descoberta de serviços de vários clusters não são compatíveis com clusters de config-api gateway.
  • Se um cluster for integrado usando a flag --management automatic atual, ele vai começar a usar a API de configuração istio e não poderá mudar para a API gateway.
  • Somente FQDNs são aceitos. Nomes curtos não são aceitos.

Pré-requisitos

Como ponto de partida, este guia presume que você já criou um projeto do Google Cloud e instalou o kubectl.

Antes de começar

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Kubernetes Engine, GKE Hub, and Cloud Service Mesh APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Kubernetes Engine, GKE Hub, and Cloud Service Mesh APIs.

    Enable the APIs

Criar e registrar um cluster do GKE

gcloud

Crie um cluster do GKE:

gcloud container clusters create CLUSTER_NAME \
--location=LOCATION \
--enable-ip-alias \
--scopes=https://www.googleapis.com/auth/cloud-platform \
--release-channel=regular \
--project=PROJECT_ID \
--gateway-api=standard \
--workload-pool=PROJECT_ID.svc.id.goog \
--workload-metadata=GKE_METADATA

em que:

  • CLUSTER_NAME é o nome do cluster.
  • LOCATION é o local do cluster
  • PROJECT_ID é o ID do projeto do cluster.

Console

  1. Acesse a página Google Kubernetes Engine no console do Google Cloud.

    Acessar o Google Kubernetes Engine

  2. Clique em Criar.

  3. Na seção Padrão, clique em Configurar.

  4. Na seção Princípios básicos do cluster, conclua o seguinte:

    1. Insira o Nome do cluster.
    2. Em Tipo de local, selecione uma região do Compute Engine para o cluster.
  5. No painel de navegação, clique em default-pool na seção Pools de nós e selecione Segurança.

  6. Na lista Escopos de acesso, selecione Definir acesso para cada API e configure Cloud Platform como Ativado.

  7. No painel de navegação, clique em Rede na seção Cluster.

  8. Na lista Cluster Networking, selecione Ativar API Gateway.

  9. No painel de navegação, clique em Segurança na seção Cluster.

  10. Na lista Segurança, selecione Ativar Identidade da carga de trabalho.

  11. Clique em Criar.

Depois que o cluster é criado,

  1. Registre o cluster em uma frota:

    gcloud container fleet memberships register CLUSTER_NAME \
    --gke-cluster LOCATION/CLUSTER_NAME \
    --project=PROJECT_ID
    
  2. Verifique se o cluster está registrado na frota:

    gcloud container fleet memberships list --project=PROJECT_ID
    

    A saída é semelhante a:

    NAME            EXTERNAL_ID                             LOCATION
    my-cluster      91980bb9-593c-4b36-9170-96445c9edd39    us-west1
    

Configurar permissões

Os comandos a seguir concedem permissão a todos os usuários autenticados, mas você pode usar a federação de identidade da carga de trabalho para GKE para conceder permissão apenas a contas selecionadas.

  1. Conceda o papel trafficdirector.client:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member "group:PROJECT_ID.svc.id.goog:/allAuthenticatedUsers/" \
        --role "roles/trafficdirector.client"
    
  2. Conceda o papel container.developer:

    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member "serviceAccount:service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \
    --role "roles/container.developer"
    

    em que PROJECT_NUMBER é o número do projeto.

  3. Conceda o papel compute.networkAdmin:

    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member "serviceAccount:service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \
    --role "roles/compute.networkAdmin"
    

    em que PROJECT_NUMBER é o número do projeto.

Ativar a Malha de Serviço do Cloud

  1. Ative o recurso de malha:

    gcloud container fleet mesh enable --project PROJECT_ID
    
  2. Atualize a malha para usar a API Gateway:

    gcloud alpha container fleet mesh update \
    --config-api gateway \
    --memberships CLUSTER_NAME \
    --project PROJECT_ID
    
  3. Verifique a atualização descrevendo o status do recurso da malha de serviço do Cloud:

    gcloud alpha container fleet mesh describe
    

Definir as novas assinaturas da frota para usar a API Gateway por padrão (opcional)

Como alternativa, crie configurações padrão no nível da frota para novos clusters do GKE registrados na frota durante a criação do cluster para serem configurados automaticamente com a API Gateway.

  1. Crie um arquivo YAML especificando o uso da API Gateway:

    echo "configapi: gateway" > mesh.yaml
    
  2. Atualize a malha:

    gcloud alpha container fleet mesh update --project FLEET_PROJECT_ID \
        --fleet-default-member-config mesh.yaml
    
  3. Crie um cluster e registre-o na frota em uma etapa para usar a configuração padrão:

    gcloud container clusters create CLUSTER_NAME \
        --project PROJECT_ID \
        --fleet-project FLEET_PROJECT_ID \
        --location=LOCATION \
    
  4. Ative a federação de identidade da carga de trabalho para o GKE e execute o servidor de metadados do GKE no seu nó.

Instalar definições de recursos personalizados

Gere uma entrada kubeconfig para o cluster:

gcloud container clusters get-credentials CLUSTER_NAME --location LOCATION --project PROJECT_ID

em que:

  • CLUSTER_NAME é o nome do cluster.
  • LOCATION é o local do cluster
  • PROJECT_ID é o ID do projeto do cluster.

Instale a definição de recurso personalizada (CRD) do GRPCRoute:

curl https://raw.githubusercontent.com/kubernetes-sigs/gateway-api/v1.1.0/config/crd/standard/gateway.networking.k8s.io_grpcroutes.yaml \
| kubectl apply -f -

A saída é semelhante a:

customresourcedefinition.apiextensions.k8s.io/grpcroutes.gateway.networking.k8s.io created

A seguir