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 Copier lienLien copié sur presse-papiers!
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 Copier lienLien copié sur presse-papiers!
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
Exemple : Ressource référencée Secret
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
Exemple : ServiceBinding
ressource dans Specification API
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 Copier lienLien copié sur presse-papiers!
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
Exemple : Spécification conforme à l'API servicebinding.io
6.6.1.3. Déclarer des données contraignantes par le biais d'annotations CRD ou CR Copier lienLien copié sur presse-papiers!
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
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
Exemple : Exposer les données de liaison d'un objet ConfigMap
défini dans les annotations CR
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
6.6.1.4. Détection des données contraignantes par le biais des ressources détenues Copier lienLien copié sur presse-papiers!
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
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 Copier lienLien copié sur presse-papiers!
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>)?)"
service.binding(/<NAME>)?:
"<VALUE>|(path=<JSONPATH_TEMPLATE>(,objectType=<OBJECT_TYPE>)?(,elementType=<ELEMENT_TYPE>)?(,sourceKey=<SOURCE_KEY>)?(,sourceValue=<SOURCE_VALUE>)?)"
où :
|
Spécifie le nom sous lequel la valeur de liaison doit être exposée. Vous ne pouvez l'exclure que si le paramètre |
|
Spécifie la valeur constante exposée lorsqu'aucun |
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
.
Paramètres | Description | Valeur par défaut |
---|---|---|
| Modèle JSONPath composé d'expressions JSONPath entourées d'accolades {}. | N/A |
|
Indique si la valeur de l'élément référencé dans le paramètre
|
|
|
Indique si la valeur de l'élément indiqué dans le paramètre |
|
|
Spécifie la clé de la ressource Remarque :
| N/A |
|
Spécifie la clé dans la tranche de cartes. Remarque :
| N/A |
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
.
6.6.3. Définition du mappage des annotations comme étant facultatif Copier lienLien copié sur presse-papiers!
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
surtrue
:Exemple
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
Si vous attribuez la valeur
false
à l'indicateuroptional
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 estfalse
par défaut et échoue dans le mappage des annotations.
6.6.4. Exigences RBAC Copier lienLien copié sur presse-papiers!
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
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 Copier lienLien copié sur presse-papiers!
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.
6.6.5.1. Exposer une chaîne de caractères à partir d'une ressource Copier lienLien copié sur presse-papiers!
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
6.6.5.2. Exposition d'une valeur constante en tant qu'élément de liaison Copier lienLien copié sur presse-papiers!
Les exemples suivants montrent comment exposer une valeur constante à partir de la ressource personnalisée (CR) PostgresCluster
:
Exemple : Exposition d'une valeur constante
- 1
- La liaison
type
doit être exposée avec la valeurpostgresql
.
6.6.5.3. Exposer l'intégralité d'une carte de configuration ou d'un secret référencé à partir d'une ressource Copier lienLien copié sur presse-papiers!
Les exemples suivants montrent comment exposer un secret entier par le biais d'annotations :
Exemple : Exposer un secret entier par le biais d'annotations
Exemple : Le secret référencé de la ressource du service d'appui
6.6.5.4. Exposer une entrée spécifique d'une carte de configuration ou d'un secret référencé à partir d'une ressource Copier lienLien copié sur presse-papiers!
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
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
:
6.6.5.5. Exposer une valeur de définition de ressource Copier lienLien copié sur presse-papiers!
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
6.6.5.6. Exposer les entrées d'une collection avec la clé et la valeur de chaque entrée Copier lienLien copié sur presse-papiers!
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
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
/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
Exemple : Configuration à partir d'une ressource de service d'appui
L'exemple précédent vous aide à projeter toutes ces valeurs avec des clés telles que primary
, secondary
, etc.
6.6.5.7. Exposer les éléments d'une collection avec une clé par élément Copier lienLien copié sur presse-papiers!
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
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
/bindings/<binding-name>/tags_0 => knowledge
/bindings/<binding-name>/tags_1 => is
/bindings/<binding-name>/tags_2 => power
Exemple : Configuration à partir d'une ressource de service d'appui
spec: tags: - knowledge - is - power
spec:
tags:
- knowledge
- is
- power
6.6.5.8. Exposer les valeurs des entrées d'une collection avec une clé par valeur d'entrée Copier lienLien copié sur presse-papiers!
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
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
/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