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:

  1. Ativar os serviços necessários da API do Google Cloud.
  2. Implantar um cluster do GKE.
  3. Configurar as permissões de IAM.
  4. Instalar as definições de recursos personalizados (CRDs) necessárias.
  5. Registrar o cluster em uma frota.
  6. [Opcional] Ativar os serviços de vários clusters (Descoberta de serviços em vários clusters).
  7. 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

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

  1. Crie um cluster do GKE chamado gke-1 na zona us-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 canal regular.
    • --enable-mesh-certificates: essa flag ativa o recurso mTLS automático do Cloud Service Mesh se ele estiver disponível no futuro.
  2. Consiga as credenciais do cluster:

    gcloud container clusters get-credentials gke-1 --zone=us-west1-a
    
  3. 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

Nesta implantação de demonstração, conceda o papel de cliente roles/trafficdirector.client do Cloud Service Mesh a todos os usuários autenticados, incluindo todas as contas de serviço, no cluster do GKE. Esse papel do IAM é necessário para autorizar os clientes do Cloud Service Mesh no plano de dados, como o Envoys, a 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.

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

  1. Instale as definições de recursos personalizados (CRDs) necessárias para usar a 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 -
    
  2. 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.

  1. Registre o cluster na frota:

    gcloud container hub memberships register gke-1 \
      --gke-cluster us-west1-a/gke-1 \
      --location global \
      --project=PROJECT_ID
    
  2. 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.

  1. Ative a descoberta de serviços de vários clusters:

    gcloud container hub multi-cluster-services enable \
      --project PROJECT_ID
    
  2. 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"
    
  3. 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.

  1. 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
    
  2. 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'
    
  3. Conceda os seguintes papéis de gerenciamento de identidade e acesso (IAM), exigidos pelo controlador da API Gateway:

    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: