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

Nesta página, descrevemos como instalar as definições de recursos personalizados necessárias. para o gateway no seu cluster.

Limitações

  • Ter uma combinação de gateway clusters config-api e istio config-api no mesma frota não é compatível.
  • A descoberta de serviços de vários clusters e o balanceamento de carga não são compatíveis com clusters de config-api gateway.
  • Se um cluster for integrado usando a sinalização --management automatic atual o cluster começa a usar a API de configuração istio e não pode 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 pressupõe que você já criou um projeto do Google Cloud e kubectl instalado.

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

  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 seu nó:

    gcloud container node-pools update default-pool \
    --cluster=CLUSTER_NAME \
    --location=LOCATION \
    --workload-metadata=GKE_METADATA
    
  4. Registre seu 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

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

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