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

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

Limitações

  • Não é suportada a existência de uma combinação de clusters gateway config-api e istio config-api na mesma frota.
  • A deteção de serviços e o equilíbrio de carga em vários clusters não são suportados para clusters config-api gateway.
  • Se um cluster for integrado através da flag --management automatic existente, o cluster começa a usar a API de configuração istio e não pode mudar para a API gateway.
  • Apenas são suportados FQDNs. Os diminutivos não são suportados.

Pré-requisitos

Como ponto de partida, este guia pressupõe que já criou um Google Cloud projeto 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.

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

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. 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 (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.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

    1. Gere uma entrada kubeconfig para o seu cluster:
    2. gcloud container clusters get-credentials CLUSTER_NAME --location LOCATION --project PROJECT_ID
      

    where:

    • CLUSTER_NAME é o nome do seu cluster
    • LOCATION é a localização do seu cluster
    • PROJECT_ID é o ID do projeto do seu cluster

    Crie e registe 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
      

      where:

      • CLUSTER_NAME é o nome do seu cluster
      • LOCATION é a localização do seu cluster
      • PROJECT_ID é o ID do projeto do seu cluster
    2. Ative a federação de identidades de cargas 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 seu nó:

      gcloud container node-pools update default-pool \
      --cluster=CLUSTER_NAME \
      --location=LOCATION \
      --workload-metadata=GKE_METADATA
      
    4. Registe o seu cluster numa frota:

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

      gcloud container hub memberships list --project=PROJECT_ID
      

      O resultado é semelhante ao seguinte:

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

    Configure as autorizações

    Tenha em atenção que os seguintes comandos concedem autorização a todos os utilizadores autenticados, mas pode usar a Workload Identity Federation para o GKE para conceder autorização apenas a contas selecionadas.

    1. Conceda a função de trafficdirector.client:

      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member "group:PROJECT_ID.svc.id.goog:/allAuthenticatedUsers/" \
          --role "roles/trafficdirector.client"
      
    2. Conceda a função de 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 seu projeto.

    3. Conceda a função de 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 seu projeto.

    Ative o Cloud Service Mesh

    1. Ative a funcionalidade 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 estado do recurso do Cloud Service Mesh:

      gcloud alpha container fleet mesh describe
      

    Instale definições de recursos personalizados

    Instale a definição de recursos personalizados (CRD) 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 -
    

    O resultado é semelhante ao seguinte:

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

    O que se segue?