Lier les informations d'identification du service à votre cluster
Ajoutez des services IBM Cloud pour améliorer votre cluster Kubernetes en ajoutant des fonctionnalités supplémentaires dans des domaines tels que l'intelligence artificielle (AI) Watson, les données, la sécurité et Internet of Things (IoT).
À partir du 4 août 2025, IBM Cloud fait de l'affichage unique le comportement par défaut pour toutes les informations d'identification des ressources dans les nouvelles instances de service. Au lieu d'utiliser l'interface CLI
de service bind pour ajouter des informations d'identification de service à votre cluster, suivez les étapes pour ajouter manuellement des informations d'identification de service à votre cluster.
Pour plus d'informations, voir Références uniques.
- Qu'est-ce qu'une liaison de service IBM Cloud ?
- Une liaison de service est un moyen de créer rapidement des données d'identification de service pour un service IBM Cloud en utilisant son noeud final de service cloud public et de stocker ces données dans un secret Kubernetes dans votre cluster.
Pour lier un service à votre cluster, vous devez d'abord mettre à disposition une instance du service. Ensuite, vous pouvez soit lier les services manuellement à votre cluster, soit utiliser la commande CLI
service bindpour créer les informations d'identification du service et le secret Kubernetes. - Quels types de services puis-je lier à mon cluster ?
- Vous pouvez lier des services qui sont activés pour IBM Cloud Identity and Access Management (IAM). Les services activés par IAM offrent une contrôle d'accès plus fin et peuvent être gérés dans un groupe de ressources IBM Cloud. Pour plus d'informations, voir Gestion des accès aux ressources. Pour obtenir la liste des services IBM Cloud pris en charge, voir le catalogue IBM Cloud.
- Comment puis-je rendre mes secrets de cluster encore plus sûrs?
- Demandez à l'administrateur de votre cluster d'activer un fournisseur de service de gestion de clés dans votre cluster pour chiffrer les secrets nouveaux ou existants, par exemple le secret dans lequel sont stockées les données d'identification de vos instances de service IBM Cloud.
- Puis-je utiliser tous les services IBM Cloud sur mon cluster ?
- Vous pouvez utiliser une liaison de service uniquement pour vos services qui prennent en charge les clés de service de sorte que les données d'identification de service puissent être créées et stockées automatiquement dans un secret Kubernetes. Pour savoir comment connecter le service à une application, voir Connecter les services aux applications.
- Les services qui ne prennent pas en charge les clés de service fournissent généralement une API que vous pouvez utiliser dans votre application. La méthode de liaison de service ne configure pas automatiquement l'accès API pour votre application. Prenez soin d'examiner la documentation d'API de votre service et d'implémenter l'API dans votre application.
- Puis-je lier une instance de service IBM Cloud existante à mon cluster?
- Oui, vous pouvez utiliser des services qui répondent aux exigences de dénomination et réutiliser les informations d'identification du service lorsque vous les liez à votre cluster. Assurez-vous que le nom du service est dans le format suivant.
[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?). Les noms autorisés sontmyserviceouexample.com. Les caractères qui ne sont pas autorisés incluent des espaces et des traits de soulignement. - Puis-je lier plusieurs services IBM Cloud à plusieurs clusters à la fois ?
- La liaison de service IBM Cloud est effectuée par cluster et par service et fonctionne en créant un secret Kubernetes que vos pods peuvent monter.
- Pour plusieurs clusters et services, vous pouvez utiliser des profils sécurisés IAM à la place. Dans IAM, vous créez un profil sécurisé avec des règles d'accès pour les services
IBM Cloud souhaités. Vous pouvez ensuite lier le profil sécurisé à autant de clusters que vous le souhaitez en fonction de certaines conditions, telles que tous les espaces de noms
prodKubernetes sur les clusters d'un groupe de ressources. Les pods montent alors le volume projeté de compte de service Kubernetes pour obtenir un jeton qui peut être échangé contre un jeton IAM utilisé parvos applications pour s'authentifier auprès des services IBM Cloud.
Lier manuellement les identifiants des services à votre cluster
Avant de commencer :
- Vérifiez que vous disposez des rôles suivants :
- Éditeur ou Administrateur IBM Cloud Rôle d'accès à la plate-forme IAM pour le cluster où vous souhaitez lier un service.
- Writer ou Manager IBM Cloud Rôle d'accès au service IAM pour l'espace de noms Kubernetes dans lequel vous souhaitez lier le service.
- Connectez-vous à votre compte. Le cas échéant, ciblez le groupe de ressources approprié. Définissez le contexte de votre cluster.
Vous pouvez ajouter manuellement des identifiants de service à votre cluster en suivant les étapes suivantes.
-
Obtenez le nom d'instance du service que vous souhaitez ajouter à votre cluster.
ibmcloud resource service-instances -
Créer une clé de service. Pour plus d'informations, voir la référence de la commande.
ibmcloud resource service-key-create NAME [ROLE] --instance-name SERVICE_INSTANCE -
Copiez la section
Credentialset enregistrez-la dans un fichier sans extension appelécreds. -
Créez un secret d' Kubernetes s qui utilise le fichier d'informations d'identification que vous avez créé.
kubectl create secret generic my-secret --from-file=path/to/creds
Ajouter des services à des clusters en utilisant le CLI service bind
- Puis-je utiliser les informations d'identification du service existant lors de la liaison?
- Vous pouvez éventuellement spécifier le paramètre
--keylors de l'exécution de la commandeservice bindet fournir le nom de vos identifiants de service existants. La liaison de service IBM Cloud crée automatiquement un secret Kubernetes avec vos identifiants de service existants. - Que se passe-t-il si mes identifiants existants sont des identifiants à usage unique?
- La commande
service bindne permet pas d'apporter ses propres identifiants de visualisation à usage unique. Par conséquent, si vous souhaitez utiliser la commandeservice bind, ne spécifiez pas le paramètre--key. Si vous exécutez la commande sans--key, vous obtiendrez un nouvel ensemble d'informations d'identification. - Si vous souhaitez utiliser des informations d’identification à affichage unique, vous devez lier manuellement le service à votre cluster. Cette option vous permet d'utiliser vos identifiants de visualisation à usage unique existants.
- Puis-je utiliser les données d'identification de service qui utilisent le noeud final de service cloud privé ?
- Par défaut, la commande
service bindcrée des identifiants de service avec le point de terminaison du service de cloud public. Pour utiliser le noeud final de service cloud privé, vous devez créer manuellement des données d'identification de service pour votre service qui utilisent le noeud final de service cloud privé, puis utiliser l'indicateur--keypour spécifier le nom des données d'identification de service existantes. Si vous prévoyez d'apporter vos propres informations d'identification, assurez-vous que vos informations d'identification existantes sont des informations d'identification à usage unique ( pas ). Pour plus d'informations, voir Références uniques. - Il se peut que votre service ne prenne pas encore en charge des noeuds finaux de service de cloud privé. Si vous disposez d'un cluster privé uniquement, vous devez utiliser les données d'identification de service qui utilisent le noeud final de service cloud privé, ou ouvrir l'adresse IP publique et le port pour vous connecter à votre service.
Consultez les sections suivantes pour connaître les étapes à suivre pour lier les informations d'identification du service à votre cluster.
Utilisez une liaison de service IBM Cloud pour créer automatiquement des données d'identification de service pour vos services IBM Cloud et stockez ces données d'identification dans un secret Kubernetes.
Si votre service prend en charge les points d'extrémité de service de cloud privé, vous pouvez créer manuellement les informations d'identification du service avec le point d'extrémité de service de cloud privé, puis utiliser l'option --key pour spécifier le nom de vos informations d'identification.
Avant de commencer :
- Vérifiez que vous disposez des rôles suivants :
- Éditeur ou Administrateur IBM Cloud Rôle d'accès à la plate-forme IAM pour le cluster où vous souhaitez lier un service.
- Writer ou Manager IBM Cloud Rôle d'accès au service IAM pour l'espace de noms Kubernetes dans lequel vous souhaitez lier le service.
- Connectez-vous à votre compte. Le cas échéant, ciblez le groupe de ressources approprié. Définissez le contexte de votre cluster.
Pour ajouter un service IBM Cloud dans votre cluster :
-
Créez une instance du service IBM Cloud.
- Certains services IBM Cloud ne sont disponibles que dans des régions éligibles. Vous pouvez lier un service à votre cluster uniquement si ce service est disponible dans la même région que votre cluster. En outre, si vous souhaitez créer une instance de service dans la zone Washington DC, vous devez utiliser l'interface de ligne de commande.
- Pour les services activés par IAM : vous devez créer l'instance de service dans le même groupe de ressources que votre cluster. Un service peut être créé dans un seul groupe de ressources que vous ne pouvez plus modifier par la suite.
- Vérifiez que le nom de service est au format
myserviceouexample.com. Les espaces et les caractères de soulignement ne sont pas autorisés.
-
Vérifiez le type de service que vous avez créé et notez le nom de l'instance de service.
ibmcloud resource service-instancesExemple de sortie
NAME Location State Type Tags <iam_service_instance_name> <region> active service_instance -
Identifiez l'espace de noms du cluster que vous souhaitez utiliser pour ajouter votre service.
kubectl get namespaces -
Liez le service à votre cluster pour créer les données d'identification de service pour votre service qui utilisent le noeud final de service cloud public et stockez ces données d'identification dans un secret Kubernetes. Si vous disposez d'informations d'identification de service existantes, utilisez l'option
--keypour spécifier le nom des informations d'identification. Pour les services compatibles IAM, les informations d'identification sont automatiquement créées avec le rôle d'accès au service Writer, mais vous pouvez utiliser l'option--rolepour spécifier un rôle d'accès au service différent. Si vous utilisez l'option--key, n'incluez pas l'option--role.Si vous prévoyez d'apporter vos propres informations d'identification, assurez-vous que vos informations d'identification existantes sont des informations d'identification à usage unique pas ou utilisez la méthode recommandée pour enregistrer manuellement les informations d'identification du service dans votre cluster. Pour plus d'informations, voir Références uniques.
ibmcloud ks cluster service bind --cluster <cluster_name_or_ID> --namespace <namespace> --service <service_instance_name> [--key <service_instance_key>] [--role <IAM_service_role>]Lorsque la création des données d'identification de service aboutit, un secret Kubernetes portant le nom
binding-<service_instance_name>est créé.Exemple de sortie
ibmcloud ks cluster service bind --cluster mycluster --namespace mynamespace --service cleardb Binding service instance to namespace... OK Namespace: mynamespace Secret name: binding-<service_instance_name> -
Vérifiez les données d'identification du service dans votre secret Kubernetes.
- Obtenez les détails du secret et notez la valeur de binding. La valeur de binding est codée en base64 et contient les données d'identification pour votre instance de service au format JSON.
Exemple de sortiekubectl get secrets binding-<service_instance_name> --namespace=<namespace> -o yamlapiVersion: v1 data: binding: <binding> kind: Secret metadata: annotations: service-instance-id: 1111aaaa-a1aa-1aa1-1a11-111aa111aa11 service-key-id: 2b22bb2b-222b-2bb2-2b22-b22222bb2222 creationTimestamp: 2018-08-07T20:47:14Z name: binding-<service_instance_name> namespace: <namespace> resourceVersion: "6145900" selfLink: /api/v1/namespaces/default/secrets/binding-mycloudant uid: 33333c33-3c33-33c3-cc33-cc33333333c type: Opaque - Décodez la valeur de liaison.
Exemple de sortieecho "<binding>" | base64 -D{"apikey":"<API_key>","host":"<ID_string>-bluemix.cloudant.com","iam_apikey_description":"Auto generated apikey during resource-key operation for Instance - crn:v1:bluemix:public:cloudantnosqldb:us-south:a/<ID_string>::","iam_apikey_name":"auto-generated-apikey-<ID_string>","iam_role_crn":"crn:v1:bluemix:public:iam::::serviceRole:Writer","iam_serviceid_crn":"crn:v1:bluemix:public:iam-identity::a/1234567890brasge5htn2ec098::serviceid:ServiceId-<ID_string>","password":"<ID_string>","port":443,"url":"https://<ID_string>-bluemix.cloudant.com","username":"123b45da-9ce1-4c24-ab12-rinwnwub1294-bluemix"} - Facultatif : comparez les données d'identification du service que vous avez décodées à l'étape précédente aux données d'identification du service que vous trouvez pour votre instance de service dans le tableau de bord IBM Cloud.
- Obtenez les détails du secret et notez la valeur de binding. La valeur de binding est codée en base64 et contient les données d'identification pour votre instance de service au format JSON.
-
Votre service étant désormais lié à votre cluster, vous devez configurer votre application pour accéder aux données d'identification du service dans le secret Kubernetes.
Accès aux données d'identification à partir de vos applications
Pour accéder à une instance de service IBM Cloud à partir de votre application, vous devez rendre les données d'identification stockées dans le secret Kubernetes accessibles à votre application.
Les données d'identification d'une instance de service sont codées en base64 et stockées au format JSON dans votre secret. Pour accéder aux données figurant dans votre secret, choisissez l'une des options suivantes :
- Monter la valeur confidentielle sous forme de volume sur votre pod
- Référencer la valeur confidentielle dans les variables d'environnement
Avant de commencer :
- Assurez-vous que vous avez le rôle d'accès au service IAM Writer ou Manager IBM Cloud pour l'espace de noms
kube-system. - Connectez-vous à votre compte. Le cas échéant, ciblez le groupe de ressources approprié. Définissez le contexte de votre cluster.
- Ajoutez un service IBM Cloud à votre cluster.
Montage du secret sous forme de volume dans votre pod
Lorsque vous montez le secret sous forme de volume dans votre pod, un fichier nommé binding est stocké dans le répertoire de montage du volume. Le fichier binding au format JSON comprend toutes les informations et
les données d'identification dont vous avez besoin pour accéder au service IBM Cloud.
-
Répertoriez les secrets disponibles dans votre cluster et notez le nom de la vôtre. Recherchez un secret de type Opaque. S'il existe plusieurs secrets, contactez l'administrateur de votre cluster pour identifier le secret approprié.
kubectl get secretsExemple de sortie
NAME TYPE DATA AGE binding-<service_instance_name> Opaque 1 3m -
Créez un fichier YAML pour votre déploiement Kubernetes et montez le secret sous forme de volume sur votre pod.
apiVersion: apps/v1 kind: Deployment metadata: labels: app: secret-test name: secret-test namespace: <my_namespace> spec: selector: matchLabels: app: secret-test replicas: 1 template: metadata: labels: app: secret-test spec: containers: - image: icr.io/ibm/liberty:latest name: secret-test volumeMounts: - mountPath: <mount_path> name: <volume_name> volumes: - name: <volume_name> secret: defaultMode: 420 secretName: binding-<service_instance_name>volumeMounts.mountPath- Chemin absolu du répertoire où est monté le volume dans le conteneur.
volumeMounts.nameetvolumes.name- Nom du volume à monter sur votre pod.
secret.defaultMode- Droits d'accès en lecture et écriture au secret. Utilisez
420pour définir les droits en lecture seule. secret.secretName- Nom du secret que vous avez noté à l'étape précédente.
-
Créez le pod et montez le secret sous forme de volume.
kubectl apply -f secret-test.yaml -
Vérifiez que le pod a bien été créé.
kubectl get podsExemple de sortie d'interface de ligne de commande :
NAME READY STATUS RESTARTS AGE secret-test-1111454598-gfx32 1/1 Running 0 1m -
Accédez aux données d'identification pour le service.
-
Connectez-vous à votre pod.
kubectl exec <pod_name> -it bash -
Accédez au chemin de montage du volume que vous avez défini précédemment et répertoriez les fichiers figurant dans ce chemin.
cd <volume_mountpath> && lsExemple de sortie
bindingLe fichier
bindingcomprend les données d'identification pour le service que vous avez stockées dans le secret Kubernetes. -
Affichez les données d'identification du service. Ces données sont stockées sous forme de paires clé-valeur au format JSON.
cat bindingExemple de sortie
{"apikey":"<API_key>","host":"<ID_string>-bluemix.cloudant.com","iam_apikey_description":"Auto generated apikey during resource-key operation for Instance - crn:v1:bluemix:public:cloudantnosqldb:us-south:a/<ID_string>:<ID_string>::","iam_apikey_name":"auto-generated-apikey-<ID_string>","iam_role_crn":"crn:v1:bluemix:public:iam::::serviceRole:Writer","iam_serviceid_crn":"crn:v1:bluemix:public:iam-identity::a/<ID_string>::serviceid:ServiceId-<ID_string>","password":"<ID_string>","port":443,"url":"https://<ID_string>-bluemix.cloudant.com","username":"123b45da-9ce1-4c24-ab12-rinwnwub1294-bluemix"} -
Configurez votre application pour analyser le contenu JSON et extraire les informations dont vous avez besoin pour accéder à votre service.
-
Référencement du secret dans les variables d'environnement
Vous pouvez ajouter les données d'identification du service et d'autres paires clé-valeur figurant dans votre secret Kubernetes sous forme de variables d'environnement dans votre déploiement.
-
Répertoriez les secrets disponibles dans votre cluster et notez le nom de la vôtre. Recherchez un secret de type Opaque. S'il existe plusieurs secrets, contactez l'administrateur de votre cluster pour identifier le secret approprié.
kubectl get secretsExemple de sortie
NAME TYPE DATA AGE binding-<service_instance_name> Opaque 1 3m -
Obtenez les détails de votre secret pour rechercher les paires clé-valeur potentielles que vous pouvez référencer sous forme de variables d'environnement dans votre pod. Les données d'identification du service sont stockées dans la clé
bindingde votre secret.kubectl get secrets binding-<service_instance_name> --namespace=<namespace> -o yamlExemple de sortie
apiVersion: v1 data: binding: <binding> kind: Secret metadata: annotations: service-instance-id: 7123acde-c3ef-4ba2-8c52-439ac007fa70 service-key-id: 9h30dh8a-023f-4cf4-9d96-d12345ec7890 creationTimestamp: 2018-08-07T20:47:14Z name: binding-<service_instance_name> namespace: <namespace> resourceVersion: "6145900" selfLink: /api/v1/namespaces/default/secrets/binding-mycloudant uid: 12345a31-9a83-11e8-ba83-cd49014748f type: Opaque -
Créez un fichier YAML pour votre déploiement Kubernetes et indiquez une variable d'environnement qui référence la clé
binding.apiVersion: apps/v1 kind: Deployment metadata: labels: app: secret-test name: secret-test namespace: <my_namespace> spec: selector: matchLabels: app: secret-test template: metadata: labels: app: secret-test spec: containers: - image: icr.io/ibm/liberty:latest name: secret-test env: - name: BINDING valueFrom: secretKeyRef: name: binding-<service_instance_name> key: bindingcontainers.env.name- Nom de votre variable d'environnement.
env.valueFrom.secretKeyRef.name- Nom du secret que vous avez noté à l'étape précédente.
env.valueFrom.secretKeyRef.key- Clé faisant partie du secret que vous voulez référencer dans votre variable d'environnement. Pour faire référence aux données d'identification de service, vous devez utiliser la clé de liaison.
-
Créez le pod qui référence la clé
bindingde votre secret sous forme de variable d'environnement.kubectl apply -f secret-test.yaml -
Vérifiez que le pod a bien été créé.
kubectl get podsExemple de sortie d'interface de ligne de commande :
NAME READY STATUS RESTARTS AGE secret-test-1111454598-gfx32 1/1 Running 0 1m -
Vérifiez que la variable d'environnement est définie correctement.
- Connectez-vous à votre pod.
kubectl exec <pod_name> -it bash - Répertoriez toutes les variables d'environnement dans le pod.
Exemple de sortieenvBINDING={"apikey":"<API_key>","host":"<ID_string>-bluemix.cloudant.com","iam_apikey_description":"Auto generated apikey during resource-key operation for Instance - crn:v1:bluemix:public:cloudantnosqldb:us-south:a/<ID_string>::","iam_apikey_name":"auto-generated-apikey-<ID_string>","iam_role_crn":"crn:v1:bluemix:public:iam::::serviceRole:Writer","iam_serviceid_crn":"crn:v1:bluemix:public:iam-identity::a/1234567890brasge5htn2ec098::serviceid:ServiceId-<ID_string>","password":"<password>","port":443,"url":"https://<ID_string>-bluemix.cloudant.com","username":"<ID_string>-bluemix"}
- Connectez-vous à votre pod.
-
Configurez votre application pour lire la variable d'environnement et analyser le contenu JSON pour extraire les informations dont vous avez besoin pour accéder à votre service.
Exemple de code en Python :
if os.environ.get('BINDING'): credentials = json.loads(os.environ.get('BINDING')) -
Facultatif : par précaution, ajoutez le traitement d'erreurs à votre application au cas où la variable d'environnement
BINDINGne serait pas correctement définie.Exemple de code en Java :
if (System.getenv("BINDING") == null) { throw new RuntimeException("Environment variable 'SECRET' is not set!"); }Exemple de code en Node.js :
if (!process.env.BINDING) { console.error('ENVIRONMENT variable "BINDING" is not set!'); process.exit(1); }
Retrait d'un service d'un cluster
Si vous ne souhaitez pas utiliser un service IBM Cloud lié à votre cluster, vous pouvez supprimer manuellement le secret Kubernetes et les pods qui accèdent au secret à partir de votre cluster.
-
Répertoriez les services liés à votre cluster et notez le nom de votre service ainsi que l'espace de noms auquel il est lié.
ibmcloud ks cluster service ls --clusterExemple de sortie
OK Service Instance GUID Key Namespace myservice 12345ab1-1234-1abc-a12b-12abc12a12ab kube-a1a12abcd12a123abc1a12ab1a1234ab7.abcdefg0p1abcd123lgg.default default -
Répertoriez les secrets Kubernetes dans l'espace de nom auquel votre service est lié et recherchez le secret avec un nom ayant le format
binding-<service_name>.kubectl get secrets -n <namespace> | grep OpaqueExemple de sortie
binding-myservice Opaque 1 3d23h -
Extrayez tous les pods qui accèdent au secret.
kubectl get pods --all-namespaces -o=jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.volumes[*]}{.secret.secretName}{" "}{end}{end}' | grep "<secret_name>"Si votre sortie CLI est vide, votre cluster ne contient aucun pod qui monte le secret.
-
Si vous avez des pods qui montent le secret, retirez le pod ou le déploiement qui gère le pod, ou mettez à jour le fichier YAML de pod ou de déploiement pour utiliser un autre secret à la place.
- Pour retirer un pod ou un déploiement :
kubectl delete pod <pod_name> -n <namespace>kubectl delete deployment <deployment_name> -n <namespace> - Pour mettre à jour un pod ou un déploiement existant :
- Obtenez le fichier YAML de pod ou de déploiement.
kubectl get pod <pod_name> -o yamlkubectl get deployment <deployment_name> -o yaml - Copiez le fichier YAML et dans la section
spec.volumes, modifiez le nom du secret que vous souhaitez utiliser. - Appliquez la modification à votre cluster.
kubectl apply -f pod.yamlkubectl apply -f deployment.yaml - Vérifiez qu'un nouveau pod est créé avec la spécification de volume mise à jour.
kubectl get podskubectl describe pod <pod_name>
- Obtenez le fichier YAML de pod ou de déploiement.
- Pour retirer un pod ou un déploiement :
-
Supprimez le secret.
kubectl delete secret <secret_name> -n <namespace> -
Vérifiez que votre secret est retiré.
kubectl get secrets -n <namespace> -
Optionnel. Retirez l'instance de service IBM Cloud.
ibmcloud resource service-instance-delete <service_name>