Preparar a configuração da 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 há suporte para uma combinação de clusters de API de configuração gateway e istio na mesma frota.
  • A descoberta de serviços de vários clusters e o balanceamento de carga não são compatíveis com clusters de API de configuração gateway.
  • Se um cluster for integrado usando a flag --management automatic, ele começará a usar a API de configuração istio e não poderá mudar para a API gateway.
  • Há suporte apenas para FQDNs. Nomes curtos não são aceitos.

Pré-requisitos

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

Antes de começar

  1. Faça login na sua Google Cloud conta do. Se você começou a usar o Google Cloud, crie uma conta para avaliar o desempenho dos nossos produtos em situações reais. Clientes novos também recebem US $300 em créditos para executar, testar e implantar cargas de trabalho.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Kubernetes Engine, GKE Hub, and Cloud Service Mesh APIs, if any are not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

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

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Kubernetes Engine, GKE Hub, and Cloud Service Mesh APIs, if any are not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

  1. Gere uma entrada kubeconfig para o cluster:
  2. 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.

Criar e registrar um cluster do GKE

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

    em que:

    • CLUSTER_NAME é o nome do cluster.
    • LOCATION é o local do cluster.
    • PROJECT_ID é o ID do projeto do cluster.
  2. Ative a federação de identidade da carga de trabalho para o GKE:

    gcloud container clusters update CLUSTER_NAME \
    --location LOCATION \
    --workload-pool=PROJECT_ID.svc.id.goog
    
  3. Execute o servidor de metadados do GKE no nó:

    gcloud container node-pools update default-pool \
    --cluster=CLUSTER_NAME \
    --location=LOCATION \
    --workload-metadata=GKE_METADATA
    
  4. Registre o cluster em uma frota:

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

    gcloud container hub 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

Observe que os comandos a seguir concedem permissão a todos os usuários autenticados, mas é possível 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 o Cloud Service Mesh

  1. Ative o recurso de malha:

    gcloud container hub 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 do Cloud Service Mesh:

    gcloud alpha container fleet mesh describe
    

Instalar definições de recursos personalizados

Instale a definição de recurso personalizado (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