Configura Service Directory per GKE

Questa pagina fornisce informazioni su come configurare Service Directory con Google Kubernetes Engine (GKE) e registrare automaticamente i cluster GKE con Service Directory. Puoi configurare Service Directory per GKE con cluster GKE Autopilot o cluster GKE Standard. Per informazioni sulle due modalità, consulta Scegliere una modalità operativa GKE.

Per saperne di più su Service Directory per GKE, consulta la panoramica di Service Directory per GKE.

Limitazioni

Service Directory per GKE presenta le seguenti limitazioni:

  • Puoi registrare i servizi solo utilizzando l'integrazione Service Directory-GKE. Devi registrare manualmente gli ingress, i gateway e altre risorse utilizzando l'API Service Directory.
  • Prima di poter sincronizzare i servizi in questi cluster con Service Directory, devi registrare i cluster GKE utilizzando i parchi risorse. Per informazioni dettagliate su come registrare i cluster GKE, consulta Registrare un cluster.
  • Tutte le risorse di Service Directory vengono registrate nel progetto del parco risorse, non nel progetto del cluster.
  • Non puoi modificare le entità di Service Directory registrate utilizzando questa integrazione. Devi apportare tutte le modifiche alle risorse del servizio GKE in modo che vengano propagate a Service Directory.

Prima di iniziare

  • Accedi al tuo Google Cloud account. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti senza costi per l'esecuzione, il test e il deployment dei carichi di lavoro.
  • 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

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

  • 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

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

  • Devi registrare il cluster GKE in un parco risorse. Per registrare il cluster GKE, segui le istruzioni riportate in Registrare un cluster.

Configurare il cluster GKE

Per configurare il cluster GKE, segui questi passaggi.

  • Abilita la funzionalità del parco risorse GKE di Service Directory.
  • Configura la policy di registrazione di Service Directory.
  • Esegui il deployment del servizio GKE.

Abilitare la funzionalità del parco risorse GKE di Service Directory

Per abilitare la funzionalità del parco risorse GKE di Service Directory, esegui il comando gcloud container hub.

gcloud

gcloud alpha container hub service-directory enable

Configurare la policy di registrazione di Service Directory per il servizio

La policy di registrazione definisce i tipi di servizi in GKE che vengono importati automaticamente da Service Directory. L'elenco seguente mostra le opzioni configurabili per questa policy:

  • resources: il tipo di risorse GKE importate. Puoi specificare più tipi di risorse. Le risorse sono identificate da Group e Kind. Per impostazione predefinita, Group è core. È disponibile solo Kind: service.
  • selector: un selettore di etichette GKE che corrisponde alle etichette key:value applicate alla risorsa GKE. Per impostazione predefinita, non vengono selezionate risorse.
  • annotationsToSync: le chiavi di annotazione della risorsa sincronizzate con Service Directory. Se questo elenco è vuoto, le risorse vengono sincronizzate con Service Directory senza annotazioni.

Ogni spazio dei nomi deve definire una singola policy. Questa policy deve avere name: "default". Il controller non consente né riconcilia altri nomi.

Configurare un ServiceDirectoryRegistrationPolicy.

Il seguente manifest descrive un ServiceDirectoryRegistrationPolicy:

apiVersion: networking.gke.io/v1alpha1
kind: ServiceDirectoryRegistrationPolicy
metadata:
    # Only the name "default" is allowed.
    name: default
    # The ServiceDirectoryRegistrationPolicy is a namespaced resource
    namespace: NAMESPACE
spec:
  resources:
    # Kind specifies the types of Kubernetes resources that can be synced into Service Directory.
    - kind: Service
      # Selector is a label selector for the resource types specified in Kind.
      selector:
        matchLabels:
          LABELS
      # annotationsToSync specifies the annotations that are matched and imported.
      # Any annotations that do not match this set of keys will not be imported into Service Directory.
      annotationsToSync:
      - ANNOTATIONS
      

Sostituisci quanto segue:

  • NAMESPACE: il nome dello spazio dei nomi. In uno spazio dei nomi può esistere un solo ServiceDirectoryRegistrationPolicy. Se in un singolo spazio dei nomi sono presenti più policy, GKE ne sceglie una come policy attiva e contrassegna le altre come inattive.
  • LABELS: il selettore di etichette, ad esempio sd-import: "true". Questo valore si applica alle risorse specificate nel tipo. Per impostazione predefinita, non vengono selezionate risorse.
  • ANNOTATIONS: un elenco di annotazioni che vengono abbinate e importate, ad esempio - cloud.google.com/load-balancer-type. Se una risorsa GKE selezionata ha una delle annotazioni nell' elenco, l'annotazione e i relativi valori vengono sincronizzati con Service Directory con la risorsa. Se questo elenco è vuoto, le risorse vengono sincronizzate con Service Directory senza annotazioni.

Salva il manifest come registration_policy.yaml.

Applicare il manifest al cluster

Per applicare il manifest al cluster, esegui il comando kubectl apply -f:

kubectl apply -f registration_policy.yaml

Eseguire il deployment del servizio GKE

Esegui il deployment del servizio e dell'applicazione del bilanciatore del carico di rete pass-through esterno regionale GKE nel cluster GKE della tua regione, ad esempio, se la tua regione è us-central1, esegui il deployment in un cluster GKE gke-us-central1.

In questo modo, il servizio GKE viene importato in Service Directory.

Crea un file YAML e applicalo come qualsiasi altra risorsa GKE. Ecco un manifest per un servizio di tipo LoadBalancer:

apiVersion: v1
kind: Service
metadata:
  name: hello-app-service
  labels:
    sd-import: "true"
  annotations:
    cloud.google.com/load-balancer-type: "Internal"
spec:
  type: LoadBalancer
  selector:
    app: hello
  ports:
  - name: tcp-port
    protocol: TCP
    port: 80
    targetPort: 8080

Ecco un manifest per un Deployment:

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: hello
  name: hello-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: hello
  template:
    metadata:
      labels:
        app: hello
    spec:
      containers:
      - image: gcr.io/google-samples/hello-app:1.0
        name: hello
        ports:
        - containerPort: 8080
          protocol: TCP

Per verificare, esegui la query di Service Directory per il tuo servizio utilizzando il gcloud service-directory services resolve comando:

gcloud

gcloud beta service-directory services resolve SERVICE_NAME \
  --location=LOCATION \
  --namespace=NAMESPACE

Sostituisci quanto segue:

  • SERVICE_NAME: il nome o l'identificatore completo del servizio, ad esempio hello-app-service
  • LOCATION: il nome della regione per il servizio, ad esempio us-central1
  • NAMESPACE: il nome dello spazio dei nomi per il servizio, ad esempio default

L'output mostra il tuo servizio ed è simile al seguente:

service:
  endpoints:
  - address: 10.140.0.5
    metadata:
      cloud.google.com/load-balancer-type: "Internal"
    name: projects/my-project/locations/us-central1/namespaces/default/services/hello-app-service/endpoints/my-cluster-12345
    port: 80
    network: projects/123456789/locations/global/networks/default
  name: projects/my-project/locations/us-central1/namespaces/default/services/hello-app-service

Fatturazione

Service Directory non addebita costi per le risorse create dall'integrazione GKE. Tuttavia, è previsto un costo per le chiamate API. Per i dettagli sui prezzi, consulta Prezzi di Service Directory.

Passaggi successivi