Configurer Service Directory pour GKE

Cette page explique comment configurer l'annuaire des services avec Google Kubernetes Engine (GKE) et enregistrer automatiquement vos clusters GKE dans l'annuaire des services. Vous pouvez configurer l'annuaire des services pour GKE avec des clusters GKE Autopilot ou GKE Standard. Pour en savoir plus sur les deux modes, consultez la section Choisir un mode de fonctionnement GKE.

Pour en savoir plus sur l'annuaire des services pour GKE, consultez la présentation de l'annuaire des services pour GKE.

Limites

L'annuaire des services pour GKE présente les limites suivantes :

  • Vous ne pouvez enregistrer des services qu'à l'aide de l'intégration Annuaire des services-GKE. Vous devez enregistrer manuellement les entrées, les passerelles et d'autres ressources à l'aide de l'API Annuaire des services.
  • Vous devez enregistrer vos clusters GKE à l'aide de Fleets avant de pouvoir synchroniser les services de ces clusters avec l'annuaire des services. Pour savoir comment enregistrer vos clusters GKE, consultez la section Enregistrer un cluster.
  • Toutes les ressources de l'annuaire des services sont enregistrées dans le projet de la Fleet, et non dans le projet du cluster.
  • Vous ne pouvez pas modifier les entités de l'annuaire des services enregistrées à l'aide de cette intégration. Vous devez apporter toutes les modifications aux ressources de service GKE elles-mêmes afin qu'elles soient propagées à l'annuaire des services.

Avant de commencer

  • Connectez-vous à votre Google Cloud compte. Si vous n'avez jamais utilisé Google Cloud, créez un compte pour évaluer les performances de nos produits dans des scénarios réels. Les nouveaux clients bénéficient également de 300 $ de crédits sans frais pour exécuter, tester et déployer des charges de travail.
  • 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.

  • Vous devez enregistrer votre cluster GKE dans une Fleet. Pour enregistrer votre cluster GKE, suivez les instructions de la section Enregistrer un cluster.

Configurer le cluster GKE

Pour configurer le cluster GKE, procédez comme suit.

  • Activez la fonctionnalité de Fleet GKE de l'annuaire des services.
  • Configurez la règle d'enregistrement de l'annuaire des services.
  • Déployez le service GKE.

Activer la fonctionnalité de Fleet GKE de l'annuaire des services

Pour activer la fonctionnalité de Fleet GKE de l'annuaire des services, exécutez la gcloud container hub commande.

gcloud

gcloud alpha container hub service-directory enable

Configurer la règle d'enregistrement de l'annuaire des services pour le service

La règle d'enregistrement définit les types de services de GKE qui sont automatiquement importés par l'annuaire des services. La liste suivante présente les options configurables pour cette règle :

  • resources: type de ressources GKE importées. Vous pouvez spécifier plusieurs types de ressources. Les ressources sont identifiées par Group et Kind. Par défaut, la valeur de Group est core. Seule la valeur Kind: service est disponible.
  • selector: sélecteur de libellés GKE qui correspond aux libellés clé:valeur appliqués à la ressource GKE. Par défaut, aucune ressource n'est sélectionnée.
  • annotationsToSync: clés d'annotation de la ressource synchronisées avec l'annuaire des services. Si cette liste est vide, les ressources sont synchronisées avec l'annuaire des services sans annotations.

Chaque espace de noms doit définir une seule règle. Cette règle doit avoir la valeur name: "default". Le contrôleur n'autorise ni ne réconcilie d'autres noms.

Configurer une ServiceDirectoryRegistrationPolicy

Le fichier manifeste suivant décrit une 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
      

Remplacez les éléments suivants :

  • NAMESPACE : nom de l'espace de noms. Il ne peut y avoir que un seul ServiceDirectoryRegistrationPolicy dans un espace de noms. S'il existe plusieurs règles dans un même espace de noms, GKE en choisit une comme règle active et marque les autres comme inactives.
  • LABELS : sélecteur de libellés, par exemple sd-import: "true". Cette valeur s'applique aux ressources spécifiées dans le type. Par défaut, aucune ressource n'est sélectionnée.
  • ANNOTATIONS : liste des annotations qui sont mises en correspondance et importées, par exemple - cloud.google.com/load-balancer-type. Si une ressource GKE sélectionnée comporte l'une des annotations de la liste, l'annotation et ses valeurs sont synchronisées avec l'annuaire des services avec la ressource. Si cette liste est vide, les ressources sont synchronisées avec l'annuaire des services sans annotations.

Enregistrez le fichier manifeste sous le nom registration_policy.yaml.

Appliquer le fichier manifeste à votre cluster

Pour appliquer le fichier manifeste à votre cluster, exécutez la commande kubectl apply -f :

kubectl apply -f registration_policy.yaml

Déployer le service GKE

Déployez le service et l'application d'équilibreur de charge réseau passthrough externe régional GKE dans le cluster GKE de votre région. Par exemple, si votre région est us-central1, déployez-le dans un cluster GKE gke-us-central1.

Cela importe votre service GKE dans l'annuaire des services.

Créez un fichier YAML et appliquez-le comme n'importe quelle autre ressource GKE. Voici le fichier manifeste d'un service de type 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

Voici le fichier manifeste d'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

Pour vérifier, exécutez la requête de l'annuaire des services pour votre service à l'aide de la gcloud service-directory services resolve commande :

gcloud

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

Remplacez les éléments suivants :

  • SERVICE_NAME: nom ou identifiant complet du service, par exemple hello-app-service
  • LOCATION: nom de la région du service, par exemple us-central1
  • NAMESPACE: nom de l'espace de noms du service, par exemple default

Le résultat affiche votre service et ressemble à ce qui suit :

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

Facturation

L'annuaire des services ne facture pas les ressources créées par l'intégration GKE. Toutefois, les appels d'API sont facturés. Pour en savoir plus sur les tarifs, consultez la page Tarifs de l'annuaire des services.

Étape suivante