Preparati per la configurazione con l'API GKE Gateway

Questa guida illustra come preparare l'ambiente per l'utilizzo dell'API Google Kubernetes Engine Gateway con Traffic Director. A livello generale, devi eseguire i seguenti passaggi:

  1. Abilita i servizi API Google Cloud richiesti.
  2. Eseguire il deployment di un cluster GKE.
  3. Configurare le autorizzazioni IAM.
  4. Installa le definizioni di risorse personalizzate (CRD) richieste.
  5. Registra il cluster in un parco risorse.
  6. [Facoltativo] Abilita i servizi multi-cluster (Multi-Cluster Service Discovery).
  7. Abilita il mesh di servizi.

Se non usi GKE, usa le API di routing dei servizi e crea una risorsa Mesh.

Prima di iniziare

Assicurati che i componenti del deployment soddisfino i seguenti requisiti:

  • GKE deve essere la versione 1.20 o successiva.
  • Sono supportati solo i piani dati con l'API xDS versione 3 e successive.
    • Versione minima di Envoy della versione 1.20.0
    • Versione minima del generatore di bootstrap gRPC della versione 0.14.0
  • I cluster GKE devono essere in modalità nativa VPC (IP alias).
  • I cluster Kubernetes autogestiti su Compute Engine, al contrario di GKE, non sono supportati.
  • Eventuali limitazioni aggiuntive elencate per la funzionalità gateway su GKE si applicano all'integrazione di Traffic Director con l'API GKE Gateway.
  • L'account di servizio per i nodi e i pod GKE deve disporre dell'autorizzazione per accedere all'API Traffic Director. Per ulteriori informazioni sulle autorizzazioni richieste, consulta Abilitazione dell'account di servizio per l'accesso all'API Traffic Director.
  • Si applicano limitazioni all'utilizzo delle risorse per progetto e alla quota di servizio di backend.

Abilita i servizi API Google Cloud richiesti

  1. Esegui questo comando per abilitare le API richieste, se non sono già abilitate nel tuo progetto:

    gcloud services enable --project=PROJECT_ID \
      container.googleapis.com \
      gkehub.googleapis.com \
      multiclusteringress.googleapis.com \
      trafficdirector.googleapis.com \
      networkservices.googleapis.com
    
  2. Se prevedi di includere più di un cluster nel parco risorse, abilita l'API multiclusterservicediscovery:

    gcloud services enable --project=PROJECT_ID \
       multiclusterservicediscovery.googleapis.com
    

Esegui il deployment di un cluster GKE

Utilizza queste istruzioni per eseguire il deployment di un cluster GKE.

  1. Crea un cluster GKE denominato gke-1 nella 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: questo flag crea un cluster nativo di VPC e rende instradabili gli indirizzi IP dei pod all'interno della rete VPC.
    • --workload-pool: questo flag consente al cluster di partecipare al pool di identità del carico di lavoro del progetto.
    • --scopes: questo flag specifica gli ambiti OAuth assegnati ai nodi del cluster.
    • --release-channel: questo flag indica il canale regular.
    • --enable-mesh-certificates: questo flag attiva la funzionalità mTLS automatica di Traffic Director se diventerà potenzialmente disponibile in futuro.
  2. Recupera le credenziali del cluster:

    gcloud container clusters get-credentials gke-1 --zone=us-west1-a
    
  3. Rinomina il contesto del cluster:

    kubectl config rename-context gke_PROJECT_ID_us-west1-a_gke-1 gke-1
    

Configura le autorizzazioni IAM per il piano dati

Per questo deployment dimostrativo, concederai il ruolo client di Traffic Director roles/trafficdirector.client a tutti gli utenti autenticati, inclusi tutti gli account di servizio, nel cluster GKE. Questo ruolo IAM è necessario per autorizzare i client Traffic Director nel piano dati, ad esempio Envoys, a ricevere la configurazione da Traffic Director.

Se non vuoi concedere il ruolo client a tutti gli utenti autenticati e preferisci limitare il ruolo agli account di servizio, consulta la guida all'identità dei carichi di lavoro di GKE per configurare un account di servizio Kubernetes specializzato con il ruolo roles/trafficdirector.client per i tuoi servizi.

  1. Concedi il ruolo client agli account di servizio:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member "group:PROJECT_ID.svc.id.goog:/allAuthenticatedUsers/" \
      --role "roles/trafficdirector.client"
    

Installa le definizioni di risorse personalizzate richieste

  1. Installa le definizioni di risorse personalizzate (CRD) richieste per utilizzare l'API Gateway con Traffic Director:

    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. Verifica che i CRD richiesti siano installati automaticamente nel cluster eseguendo questo comando:

    kubectl get crds
    

    Nell'output sono elencati i seguenti CRD e altri non correlati all'API Gateway, tutti con date di creazione diverse:

    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
    

Le risorse personalizzate tdmeshes.net.gke.io e tdgrpcroutes.net.gke.io sono state installate nel passaggio precedente.

I CRD che fanno parte del gruppo API net.gke.io sono specifici di GKE. Queste risorse non fanno parte dell'implementazione dell'API gateway del software open source, che si trova nel gruppo API networking.k8s.io.

Registra il cluster in un parco risorse

Dopo aver creato il cluster, devi registrarlo in un parco risorse. La registrazione del cluster in un parco risorse ti consente di abilitare in modo selettivo le funzionalità sul cluster registrato.

  1. Registra il cluster nel parco risorse:

    gcloud container hub memberships register gke-1 \
      --gke-cluster us-west1-a/gke-1 \
      --location global \
      --project=PROJECT_ID
    
  2. Conferma che il cluster sia registrato nel parco risorse:

    gcloud container hub memberships list --project=PROJECT_ID
    

    L'output è simile al seguente:

    NAME   EXTERNAL_ID
    gke-1  657e835d-3b6b-4bc5-9283-99d2da8c2e1b
    

(Facoltativo) Abilita Service Discovery a cluster multipli

La funzionalità Multi-Cluster Service Discovery consente di esportare i servizi locali del cluster in tutti i cluster registrati nel parco risorse. Questo passaggio è facoltativo se non prevedi di includere più di un cluster nel parco risorse.

  1. Abilita Service Discovery a cluster multipli:

    gcloud container hub multi-cluster-services enable \
      --project PROJECT_ID
    
  2. Concedi il ruolo Identity and Access Management (IAM) richiesto per Multi-Cluster Service Discovery:

    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. Verifica che l'opzione Multi-Cluster Service Discovery sia abilitata per il cluster registrato. La visualizzazione di tutti i cluster potrebbe richiedere diversi minuti:

    gcloud container hub multi-cluster-services describe --project=PROJECT_ID
    

    Dovresti vedere gli abbonamenti a gke-1, che sono simili alle seguenti:

    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'
    

Abilita il mesh di servizi GKE di Traffic Director

In questa sezione, configurerai il mesh di servizi.

  1. Abilita il mesh di servizi GKE di Traffic Director sul cluster che hai registrato nel tuo parco risorse:

    gcloud container hub ingress enable \
    --config-membership=projects/PROJECT_ID/locations/global/memberships/gke-1 \
      --project=PROJECT_ID
    
  2. Verifica che la funzione sia attivata:

    gcloud container hub ingress describe --project=PROJECT_ID
    

    Dovresti vedere un output simile al seguente:

    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. Concedi i seguenti ruoli IAM (Identity and Access Management), richiesti dal controller 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"
    

Passaggi successivi

Per configurare un deployment di esempio, leggi queste guide: