6.6. Exposer des données contraignantes à partir d'un service


Les développeurs d'applications ont besoin d'accéder aux services d'appui pour créer et connecter des charges de travail. La connexion des charges de travail aux services d'appui constitue toujours un défi, car chaque fournisseur de services exige une manière différente d'accéder à ses secrets et de les consommer dans une charge de travail.

L'opérateur de liaison de services permet aux développeurs d'applications de lier facilement des charges de travail avec des services d'appui gérés par l'opérateur, sans procédures manuelles pour configurer la connexion de liaison. Pour que le Service Binding Operator fournisse les données de liaison, vous devez, en tant que fournisseur d'opérateur ou utilisateur qui crée des services d'appui, exposer les données de liaison afin qu'elles soient automatiquement détectées par le Service Binding Operator. Ensuite, l'opérateur de liaison de services collecte automatiquement les données de liaison auprès du service d'appui et les partage avec une charge de travail afin de fournir une expérience cohérente et prévisible.

6.6.1. Méthodes d'exposition des données contraignantes

Cette section décrit les méthodes que vous pouvez utiliser pour exposer les données de liaison.

Assurez-vous de connaître et de comprendre les exigences et l'environnement de votre charge de travail, ainsi que la manière dont elle fonctionne avec les services fournis.

Les données contraignantes sont exposées dans les circonstances suivantes :

  • Le service de sauvegarde est disponible en tant que ressource de service provisionnée.

    Le service auquel vous souhaitez vous connecter est conforme à la spécification Service Binding. Vous devez créer une ressource Secret avec toutes les valeurs de données de liaison requises et la référencer dans la ressource personnalisée (CR) du service d'appui. La détection de toutes les valeurs de données de liaison est automatique.

  • Le service de sauvegarde n'est pas disponible en tant que ressource de service provisionné.

    Vous devez exposer les données de liaison à partir du service de soutien. En fonction des exigences de votre charge de travail et de votre environnement, vous pouvez choisir l'une des méthodes suivantes pour exposer les données de liaison :

    • Référence secrète directe
    • Déclaration des données de liaison par le biais de définitions de ressources personnalisées (CRD) ou d'annotations CR
    • Détection des données contraignantes par le biais des ressources détenues

6.6.1.1. Service fourni

Le service fourni représente un CR de service d'appui avec une référence à une ressource Secret placée dans le champ .status.binding.name du CR de service d'appui.

En tant que fournisseur d'opérateurs ou utilisateur qui crée des services d'appui, vous pouvez utiliser cette méthode pour vous conformer à la spécification Service Binding, en créant une ressource Secret et en la référençant dans la section .status.binding.name du CR du service d'appui. Cette ressource Secret doit fournir toutes les valeurs de données de liaison nécessaires pour qu'une charge de travail se connecte au service d'appui.

Les exemples suivants montrent une CR AccountService qui représente un service d'appui et une ressource Secret référencée à partir de la CR.

Exemple : AccountService CR

apiVersion: example.com/v1alpha1
kind: AccountService
name: prod-account-service
spec:
  ...
status:
  binding:
    name: hippo-pguser-hippo
Copy to Clipboard Toggle word wrap

Exemple : Ressource référencée Secret

apiVersion: v1
kind: Secret
metadata:
  name: hippo-pguser-hippo
data:
  password: "MTBz"
  user: "Z3Vlc3Q="
  ...
Copy to Clipboard Toggle word wrap

Lors de la création d'une ressource de liaison de service, vous pouvez directement donner les détails de la ressource AccountService dans la spécification ServiceBinding comme suit :

Exemple : ServiceBinding ressource

apiVersion: binding.operators.coreos.com/v1alpha1
kind: ServiceBinding
metadata:
  name: account-service
spec:
  ...
  services:
  - group: "example.com"
    version: v1alpha1
    kind: AccountService
    name: prod-account-service
  application:
    name: spring-petclinic
    group: apps
    version: v1
    resource: deployments
Copy to Clipboard Toggle word wrap

Exemple : ServiceBinding ressource dans Specification API

apiVersion: servicebinding.io/v1beta1
kind: ServiceBinding
metadata:
  name: account-service
spec:
  ...
  service:
    apiVersion: example.com/v1alpha1
    kind: AccountService
    name: prod-account-service
  workload:
    apiVersion: apps/v1
    kind: Deployment
    name: spring-petclinic
Copy to Clipboard Toggle word wrap

Cette méthode expose toutes les clés de la ressource hippo-pguser-hippo référencée Secret en tant que données de liaison à projeter dans la charge de travail.

6.6.1.2. Référence secrète directe

Vous pouvez utiliser cette méthode si toutes les valeurs de données de liaison requises sont disponibles dans une ressource Secret que vous pouvez référencer dans votre définition de liaison de service. Dans cette méthode, une ressource ServiceBinding fait directement référence à une ressource Secret pour se connecter à un service. Toutes les clés de la ressource Secret sont exposées en tant que données de liaison.

Exemple : Spécification avec l'API binding.operators.coreos.com

apiVersion: binding.operators.coreos.com/v1alpha1
kind: ServiceBinding
metadata:
  name: account-service
spec:
  ...
  services:
  - group: ""
    version: v1
    kind: Secret
    name: hippo-pguser-hippo
Copy to Clipboard Toggle word wrap

Exemple : Spécification conforme à l'API servicebinding.io

apiVersion: servicebinding.io/v1beta1
kind: ServiceBinding
metadata:
  name: account-service
spec:
  ...
  service:
    apiVersion: v1
    kind: Secret
    name: hippo-pguser-hippo
Copy to Clipboard Toggle word wrap

Vous pouvez utiliser cette méthode pour annoter les ressources du service d'appui afin d'exposer les données de liaison avec des annotations spécifiques. L'ajout d'annotations dans la section metadata modifie les CR et CRD des services d'appui. Service Binding Operator détecte les annotations ajoutées aux CR et CRD et crée ensuite une ressource Secret avec les valeurs extraites sur la base des annotations.

Les exemples suivants montrent les annotations qui sont ajoutées sous la section metadata et un objet ConfigMap référencé à partir d'une ressource :

Exemple : Exposer les données de liaison d'un objet Secret défini dans les annotations CR

apiVersion: postgres-operator.crunchydata.com/v1beta1
kind: PostgresCluster
metadata:
  name: hippo
  namespace: my-petclinic
  annotations:
    service.binding: 'path={.metadata.name}-pguser-{.metadata.name},objectType=Secret'
    ...
Copy to Clipboard Toggle word wrap

L'exemple précédent place le nom du nom secret dans le modèle {.metadata.name}-pguser-{.metadata.name} qui se résout en hippo-pguser-hippo. Le modèle peut contenir plusieurs expressions JSONPath.

Exemple : Objet référencé Secret à partir d'une ressource

apiVersion: v1
kind: Secret
metadata:
  name: hippo-pguser-hippo
data:
  password: "MTBz"
  user: "Z3Vlc3Q="
Copy to Clipboard Toggle word wrap

Exemple : Exposer les données de liaison d'un objet ConfigMap défini dans les annotations CR

apiVersion: postgres-operator.crunchydata.com/v1beta1
kind: PostgresCluster
metadata:
  name: hippo
  namespace: my-petclinic
  annotations:
    service.binding: 'path={.metadata.name}-config,objectType=ConfigMap'
    ...
Copy to Clipboard Toggle word wrap

L'exemple précédent place le nom de la carte de configuration dans le modèle {.metadata.name}-config qui se résout en hippo-config. Le modèle peut contenir plusieurs expressions JSONPath.

Exemple : Objet référencé ConfigMap à partir d'une ressource

apiVersion: v1
kind: ConfigMap
metadata:
  name: hippo-config
data:
  db_timeout: "10s"
  user: "hippo"
Copy to Clipboard Toggle word wrap

Vous pouvez utiliser cette méthode si votre service d'appui possède une ou plusieurs ressources Kubernetes telles que la route, le service, la carte de configuration ou le secret que vous pouvez utiliser pour détecter les données de liaison. Dans cette méthode, l'opérateur de liaison de service détecte les données de liaison à partir des ressources appartenant au service de soutien CR.

Les exemples suivants montrent que l'option de l'API detectBindingResources est définie sur true dans le CR ServiceBinding:

Exemple

apiVersion: binding.operators.coreos.com/v1alpha1
kind: ServiceBinding
metadata:
  name: spring-petclinic-detect-all
  namespace: my-petclinic
spec:
  detectBindingResources: true
  services:
    - group: postgres-operator.crunchydata.com
      version: v1beta1
      kind: PostgresCluster
      name: hippo
  application:
    name: spring-petclinic
    group: apps
    version: v1
    resource: deployments
Copy to Clipboard Toggle word wrap

Dans l'exemple précédent, PostgresCluster custom service resource possède une ou plusieurs ressources Kubernetes telles que route, service, config map ou secret.

L'opérateur de liaison de services détecte automatiquement les données de liaison exposées sur chacune des ressources possédées.

6.6.2. Modèle de données

Le modèle de données utilisé dans les annotations suit des conventions spécifiques.

Les annotations de liaison de service doivent utiliser la convention suivante :

service.binding(/<NAME>)?:
    "<VALUE>|(path=<JSONPATH_TEMPLATE>(,objectType=<OBJECT_TYPE>)?(,elementType=<ELEMENT_TYPE>)?(,sourceKey=<SOURCE_KEY>)?(,sourceValue=<SOURCE_VALUE>)?)"
Copy to Clipboard Toggle word wrap

où :

<NAME>

Spécifie le nom sous lequel la valeur de liaison doit être exposée. Vous ne pouvez l'exclure que si le paramètre objectType a pour valeur Secret ou ConfigMap.

<VALUE>

Spécifie la valeur constante exposée lorsqu'aucun path n'est défini.

Le modèle de données fournit des détails sur les valeurs autorisées et la sémantique des paramètres path, elementType, objectType, sourceKey, et sourceValue.

Expand
Tableau 6.4. Paramètres et leurs descriptions
ParamètresDescriptionValeur par défaut

path

Modèle JSONPath composé d'expressions JSONPath entourées d'accolades {}.

N/A

elementType

Indique si la valeur de l'élément référencé dans le paramètre path est conforme à l'un des types suivants :

  • string
  • sliceOfStrings
  • sliceOfMaps

string

objectType

Indique si la valeur de l'élément indiqué dans le paramètre path fait référence à une chaîne de caractères ConfigMap, Secret ou ordinaire dans l'espace de noms actuel.

Secretsi elementType n'est pas une chaîne.

sourceKey

Spécifie la clé de la ressource ConfigMap ou Secret à ajouter au secret de la reliure lors de la collecte des données de reliure.

Remarque :

  • Lorsqu'il est utilisé conjointement avec elementType=sliceOfMaps, le paramètre sourceKey spécifie la clé de la tranche de cartes dont la valeur est utilisée comme clé dans le secret de liaison.
  • Ce paramètre facultatif permet d'exposer une entrée spécifique de la ressource référencée Secret ou ConfigMap en tant que données de liaison.
  • Si elle n'est pas spécifiée, toutes les clés et valeurs de la ressource Secret ou ConfigMap sont exposées et ajoutées au secret de liaison.

N/A

sourceValue

Spécifie la clé dans la tranche de cartes.

Remarque :

  • La valeur de cette clé est utilisée comme base pour générer la valeur de l'entrée de la paire clé-valeur à ajouter au secret de liaison.
  • En outre, la valeur de sourceKey est utilisée comme clé de l'entrée pour la paire clé-valeur à ajouter au secret de liaison.
  • Elle n'est obligatoire que si elementType=sliceOfMaps.

N/A

Note

Les paramètres sourceKey et sourceValue ne sont applicables que si l'élément indiqué dans le paramètre path fait référence à une ressource ConfigMap ou Secret.

Les annotations peuvent contenir des champs facultatifs. Par exemple, un chemin vers les informations d'identification peut ne pas être présent si le point de terminaison du service ne nécessite pas d'authentification. Dans ce cas, un champ peut ne pas exister dans le chemin cible des annotations. Par conséquent, Service Binding Operator génère une erreur par défaut.

En tant que fournisseur de services, pour indiquer si vous avez besoin d'un mappage d'annotations, vous pouvez définir une valeur pour le drapeau optional dans vos annotations lors de l'activation des services. Le Service Binding Operator ne fournit le mappage des annotations que si le chemin cible est disponible. Lorsque le chemin cible n'est pas disponible, le Service Binding Operator ignore le mappage optionnel et poursuit la projection des mappages existants sans générer d'erreur.

Procédure

  • Pour rendre un champ des annotations facultatif, définissez la valeur de l'indicateur optional sur true:

    Exemple

    apiVersion: apps.example.org/v1beta1
    kind: Database
    metadata:
      name: my-db
      namespace: my-petclinic
      annotations:
        service.binding/username: path={.spec.name},optional=true
        ...
    Copy to Clipboard Toggle word wrap

Note
  • Si vous attribuez la valeur false à l'indicateur optional et que l'opérateur de liaison de services ne parvient pas à trouver le chemin cible, l'opérateur échoue dans le mappage des annotations.
  • Si l'indicateur optional n'a pas de valeur définie, l'opérateur de liaison de services considère que la valeur est false par défaut et échoue dans le mappage des annotations.

6.6.4. Exigences RBAC

Pour exposer les données de liaison du service d'appui à l'aide de l'opérateur de liaison de service, vous devez disposer de certaines autorisations de contrôle d'accès basé sur les rôles (RBAC). Spécifiez certains verbes dans le champ rules de la ressource ClusterRole pour accorder les autorisations RBAC pour les ressources du service d'appui. Lorsque vous définissez ces rules, vous permettez à l'opérateur de liaison de services de lire les données de liaison des ressources de service de soutien dans l'ensemble du cluster. Si les utilisateurs n'ont pas le droit de lire les données de liaison ou de modifier les ressources de l'application, le Service Binding Operator les empêche de lier les services à l'application. Le respect des exigences RBAC permet d'éviter une élévation inutile des autorisations pour l'utilisateur et empêche l'accès à des services ou à des applications non autorisés.

L'opérateur de liaison de services effectue des demandes auprès de l'API Kubernetes à l'aide d'un compte de service dédié. Par défaut, ce compte dispose d'autorisations pour lier des services à des charges de travail, toutes deux représentées par les objets Kubernetes ou OpenShift standard suivants :

  • Deployments
  • DaemonSets
  • ReplicaSets
  • StatefulSets
  • DeploymentConfigs

Le compte de service Operator est lié à un rôle de cluster agrégé, ce qui permet aux fournisseurs Operator ou aux administrateurs de cluster de lier des ressources de service personnalisées aux charges de travail. Pour accorder les permissions requises au sein d'un ClusterRole, marquez-le avec l'indicateur servicebinding.io/controller et définissez la valeur de l'indicateur à true. L'exemple suivant montre comment autoriser l'opérateur de liaison de service à get, watch, et list les ressources personnalisées (CR) de l'opérateur Crunchy PostgreSQL :

Exemple : Activer la liaison avec les instances de base de données PostgreSQL provisionnées par l'opérateur Crunchy PostgreSQL

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: postgrescluster-reader
  labels:
     servicebinding.io/controller: "true"
rules:
- apiGroups:
    - postgres-operator.crunchydata.com
  resources:
    - postgresclusters
  verbs:
    - get
    - watch
    - list
  ...
Copy to Clipboard Toggle word wrap

Ce rôle de cluster peut être déployé lors de l'installation du service de sauvegarde Operator.

6.6.5. Catégories de données contraignantes exposables

L'opérateur de liaison de service vous permet d'exposer les valeurs des données de liaison des ressources de service d'appui et des définitions de ressources personnalisées (CRD).

Cette section fournit des exemples montrant comment vous pouvez utiliser les différentes catégories de données exposables. Vous devez modifier ces exemples pour les adapter à votre environnement de travail et à vos besoins.

L'exemple suivant montre comment exposer la chaîne du champ metadata.name de la ressource personnalisée (CR) PostgresCluster en tant que nom d'utilisateur :

Exemple

apiVersion: postgres-operator.crunchydata.com/v1beta1
kind: PostgresCluster
metadata:
  name: hippo
  namespace: my-petclinic
  annotations:
    service.binding/username: path={.metadata.name}
    ...
Copy to Clipboard Toggle word wrap

Les exemples suivants montrent comment exposer une valeur constante à partir de la ressource personnalisée (CR) PostgresCluster:

Exemple : Exposition d'une valeur constante

apiVersion: postgres-operator.crunchydata.com/v1beta1
kind: PostgresCluster
metadata:
  name: hippo
  namespace: my-petclinic
  annotations:
    "service.binding/type": "postgresql" 
1
Copy to Clipboard Toggle word wrap

1
La liaison type doit être exposée avec la valeur postgresql.

Les exemples suivants montrent comment exposer un secret entier par le biais d'annotations :

Exemple : Exposer un secret entier par le biais d'annotations

apiVersion: postgres-operator.crunchydata.com/v1beta1
kind: PostgresCluster
metadata:
  name: hippo
  namespace: my-petclinic
  annotations:
    service.binding: 'path={.metadata.name}-pguser-{.metadata.name},objectType=Secret'
Copy to Clipboard Toggle word wrap

Exemple : Le secret référencé de la ressource du service d'appui

apiVersion: v1
kind: Secret
metadata:
  name: hippo-pguser-hippo
data:
  password: "MTBz"
  user: "Z3Vlc3Q="
Copy to Clipboard Toggle word wrap

Les exemples suivants montrent comment exposer une entrée spécifique d'une carte de configuration par le biais d'annotations :

Exemple : Exposer une entrée d'une carte de configuration par le biais d'annotations

apiVersion: postgres-operator.crunchydata.com/v1beta1
kind: PostgresCluster
metadata:
  name: hippo
  namespace: my-petclinic
  annotations:
    service.binding: 'path={.metadata.name}-config,objectType=ConfigMap,sourceKey=user'
Copy to Clipboard Toggle word wrap

Exemple : La carte de configuration référencée de la ressource de service d'appui

Les données de liaison doivent avoir une clé dont le nom est db_timeout et la valeur 10s:

apiVersion: v1
kind: ConfigMap
metadata:
  name: hippo-config
data:
  db_timeout: "10s"
  user: "hippo"
Copy to Clipboard Toggle word wrap

6.6.5.5. Exposer une valeur de définition de ressource

L'exemple suivant montre comment exposer une valeur de définition de ressource par le biais d'annotations :

Exemple : Exposer une valeur de définition de ressource par le biais d'annotations

apiVersion: postgres-operator.crunchydata.com/v1beta1
kind: PostgresCluster
metadata:
  name: hippo
  namespace: my-petclinic
  annotations:
    service.binding/username: path={.metadata.name}
    ...
Copy to Clipboard Toggle word wrap

L'exemple suivant montre comment exposer les entrées d'une collection avec la clé et la valeur de chaque entrée par le biais d'annotations :

Exemple : Exposer les entrées d'une collection par le biais d'annotations

apiVersion: postgres-operator.crunchydata.com/v1beta1
kind: PostgresCluster
metadata:
  name: hippo
  namespace: my-petclinic
  annotations:
    "service.binding/uri": "path={.status.connections},elementType=sliceOfMaps,sourceKey=type,sourceValue=url"
spec:
  ...
status:
  connections:
    - type: primary
      url: primary.example.com
    - type: secondary
      url: secondary.example.com
    - type: '404'
      url: black-hole.example.com
Copy to Clipboard Toggle word wrap

L'exemple suivant montre comment les entrées précédentes d'une collection d'annotations sont projetées dans l'application liée.

Exemple : Lier des fichiers de données

/bindings/<binding-name>/uri_primary => primary.example.com
/bindings/<binding-name>/uri_secondary => secondary.example.com
/bindings/<binding-name>/uri_404 => black-hole.example.com
Copy to Clipboard Toggle word wrap

Exemple : Configuration à partir d'une ressource de service d'appui

status:
  connections:
    - type: primary
      url: primary.example.com
    - type: secondary
      url: secondary.example.com
    - type: '404'
      url: black-hole.example.com
Copy to Clipboard Toggle word wrap

L'exemple précédent vous aide à projeter toutes ces valeurs avec des clés telles que primary, secondary, etc.

L'exemple suivant montre comment exposer les éléments d'une collection avec une clé par élément au moyen d'annotations :

Exemple : Exposer les éléments d'une collection par le biais d'annotations

apiVersion: postgres-operator.crunchydata.com/v1beta1
kind: PostgresCluster
metadata:
  name: hippo
  namespace: my-petclinic
  annotations:
    "service.binding/tags": "path={.spec.tags},elementType=sliceOfStrings"
spec:
    tags:
      - knowledge
      - is
      - power
Copy to Clipboard Toggle word wrap

L'exemple suivant montre comment les éléments précédents d'une collection d'annotations sont projetés dans l'application liée.

Exemple : Lier des fichiers de données

/bindings/<binding-name>/tags_0 => knowledge
/bindings/<binding-name>/tags_1 => is
/bindings/<binding-name>/tags_2 => power
Copy to Clipboard Toggle word wrap

Exemple : Configuration à partir d'une ressource de service d'appui

spec:
  tags:
  - knowledge
  - is
  - power
Copy to Clipboard Toggle word wrap

L'exemple suivant montre comment exposer les valeurs des entrées d'une collection avec une clé par valeur d'entrée par le biais d'annotations :

Exemple : Exposer les valeurs des entrées d'une collection par le biais d'annotations

apiVersion: postgres-operator.crunchydata.com/v1beta1
kind: PostgresCluster
metadata:
  name: hippo
  namespace: my-petclinic
  annotations:
    "service.binding/url": "path={.spec.connections},elementType=sliceOfStrings,sourceValue=url"
spec:
  connections:
    - type: primary
      url: primary.example.com
    - type: secondary
      url: secondary.example.com
    - type: '404'
      url: black-hole.example.com
Copy to Clipboard Toggle word wrap

L'exemple suivant montre comment les valeurs précédentes d'une collection dans les annotations sont projetées dans l'application liée.

Exemple : Lier des fichiers de données

/bindings/<binding-name>/url_0 => primary.example.com
/bindings/<binding-name>/url_1 => secondary.example.com
/bindings/<binding-name>/url_2 => black-hole.example.com
Copy to Clipboard Toggle word wrap

Retour au début
Red Hat logoGithubredditYoutubeTwitter

Apprendre

Essayez, achetez et vendez

Communautés

À propos de la documentation Red Hat

Nous aidons les utilisateurs de Red Hat à innover et à atteindre leurs objectifs grâce à nos produits et services avec un contenu auquel ils peuvent faire confiance. Découvrez nos récentes mises à jour.

Rendre l’open source plus inclusif

Red Hat s'engage à remplacer le langage problématique dans notre code, notre documentation et nos propriétés Web. Pour plus de détails, consultez le Blog Red Hat.

À propos de Red Hat

Nous proposons des solutions renforcées qui facilitent le travail des entreprises sur plusieurs plates-formes et environnements, du centre de données central à la périphérie du réseau.

Theme

© 2025 Red Hat