Legare le credenziali del servizio al cluster
Aggiungete IBM Cloud servizi per potenziare il vostro Kubernetes cluster con capacità aggiuntive in aree quali Watson AI, dati, sicurezza e Internet of Things ( IoT ).
A partire dal 04 agosto 2025, IBM Cloud renderà la visualizzazione una tantum il comportamento predefinito per tutte le credenziali delle risorse nelle nuove istanze di servizio. Invece di usare la CLI di service bind per aggiungere le credenziali di servizio al cluster, seguire i passaggi per aggiungere manualmente le credenziali di servizio al cluster. Per ulteriori informazioni, vedere Credenziali una tantum.
- Che cos'è il service binding di IBM Cloud?
- Il service binding è un modo rapido per creare credenziali di servizio per un servizio IBM Cloud utilizzando il suo endpoint di servizio cloud pubblico e memorizzando queste credenziali in un segreto Kubernetes nel cluster. Per eseguire il bind
di un servizio al tuo cluster, devi innanzitutto eseguire il provisioning di un'istanza del servizio. Quindi, puoi associare manualmente i servizi al tuo cluster oppure puoi utilizzare
service bindComando CLI per creare le credenziali del servizio e il segreto Kubernetes. - Quali tipi di servizi posso associare al mio cluster?
- È possibile eseguire il binding dei servizi abilitati per IBM Cloud Identity and Access Management (IAM). I servizi che supportano IAM offrono un controllo di accesso più granulare e possono essere gestiti in un gruppo di risorse IBM Cloud. Per ulteriori informazioni, vedi Gestione dell'accesso alle risorse. Per trovare un elenco dei servizi IBM Cloud supportati, vedi il catalogo IBM Cloud.
- Come posso rendere i segreti del mio cluster ancora più sicuri?
- Chiedere all'amministratore del cluster di abilitare un fornitore di servizi di gestione delle chiavi nel cluster per crittografare i segreti nuovi ed esistenti, come il segreto che memorizza le credenziali delle istanze del servizio IBM Cloud.
- Posso utilizzare tutti i servizi di IBM Cloud nel mio cluster?
- Puoi utilizzare il bind dei servizi solo per i servizi che supportano chiavi del servizio, cosicché le credenziali del servizio possano essere create e archiviate automaticamente in un segreto Kubernetes. Per sapere come collegare il servizio a un'applicazione, vedere Collegamento dei servizi alle applicazioni.
- I servizi che non supportano le chiavi di servizio di solito forniscono un'API che è possibile utilizzare nella propria applicazione. Il metodo di bind del servizio non configura automaticamente l'accesso API per la tua applicazione. Assicurati di rivedere la documentazione API del tuo servizio e implementare l'interfaccia API nella tua applicazione.
- È possibile associare un'istanza del servizio IBM Cloud esistente al mio cluster?
- Sì, è possibile utilizzare servizi che soddisfano i requisiti di denominazione e riutilizzare le credenziali del servizio quando lo si lega al cluster. Assicurarsi che il nome del servizio sia nel seguente formato regex.
[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?). Dei nomi consentiti di esempio sonomyserviceoexample.com. I caratteri non consentiti includono spazi e caratteri di sottolineatura. - Posso eseguire il bind di più servizi IBM Cloud a più cluster contemporaneamente?
- Il bind del servizio IBM Cloud è su una base per cluster e per servizio e funziona creando un segreto Kubernetes che i tuoi pod possono montare.
- Per più cluster e servizi, puoi invece utilizzare profili attendibili IAM. In IAM, crei un profilo attendibile con le politiche di accesso per i servizi IBM Cloud che desideri.
Quindi, colleghi il profilo attendibile con tutti i cluster che vuoi, in base alle condizioni come tutti gli spazi dei nomi
prodKubernetes nei cluster in un gruppo di risorse. Infine, i tuoi pod montano il volume proiettato dell'account del servizio Kubernetes per ottenere un token che può essere scambiato per un token IAM che le tue applicazioni utilizzano per autenticarsi con i servizi IBM Cloud.
Legare manualmente le credenziali del servizio al proprio cluster
Prima di cominciare:
- Assicurati di avere i seguenti ruoli:
- Editor o Amministratore IBM Cloud Ruolo di accesso alla piattaforma IAM per il cluster a cui si vuole associare un servizio.
- Writer o Manager IBM Cloud Ruolo di accesso al servizio IAM per lo spazio dei nomi di Kubernetes in cui si desidera eseguire il binding del servizio.
- Accedi al tuo account. Se applicabile, specifica il gruppo di risorse appropriato. Imposta il contesto per il tuo cluster.
È possibile aggiungere manualmente le credenziali di servizio al cluster completando i seguenti passaggi.
-
Ottieni il nome dell'istanza del servizio che desideri aggiungere al tuo cluster.
ibmcloud resource service-instances -
Crea una chiave di servizio. Per ulteriori informazioni, vedere la guida di riferimento ai comandi.
ibmcloud resource service-key-create NAME [ROLE] --instance-name SERVICE_INSTANCE -
Copia la sezione "
Credentials" e salvala in un file senza estensione chiamato "creds". -
Creare un segreto di tipo " Kubernetes " che utilizzi il file delle credenziali creato.
kubectl create secret generic my-secret --from-file=path/to/creds
Aggiunta di servizi ai cluster tramite la CLI di service bind
- È possibile utilizzare le credenziali di servizio esistenti durante il binding?
- È possibile specificare facoltativamente il parametro
--keyquando si esegue il comandoservice binde fornire il nome delle credenziali di servizio esistenti. IBM Cloud service binding crea automaticamente un segreto Kubernetes con le credenziali di servizio esistenti. - Cosa succede se le mie credenziali esistenti sono credenziali di visualizzazione una tantum?
- Il comando
service bindnon supporta l'inserimento delle proprie credenziali di visualizzazione una tantum. Pertanto, se si desidera utilizzare il comandoservice bind, non specificare il parametro--key. Eseguendo il comando senza--keysi creerà un nuovo set di credenziali. - Se si desidera utilizzare credenziali con visualizzazione monouso, è necessario associare manualmente il servizio al cluster. Questa opzione consente di utilizzare le credenziali di visualizzazione uniche esistenti.
- Cosa succede se si desidera utilizzare credenziali di servizio che utilizzano l'endpoint del servizio cloud privato?
- Per impostazione predefinita, il comando
service bindcrea le credenziali del servizio con l'endpoint del servizio cloud pubblico. Per utilizzare l'endpoint del servizio di cloud privato, è necessario creare manualmente le credenziali di servizio per il proprio servizio che utilizzano l'endpoint del servizio di cloud privato, quindi utilizzare l'opzione--keyper specificare il nome delle credenziali di servizio esistenti. Se si intende portare le proprie credenziali, assicurarsi che le credenziali esistenti non siano credenziali di visualizzazione uniche. Per ulteriori informazioni, vedere Credenziali una tantum. - Il vostro servizio potrebbe non supportare ancora gli endpoint dei servizi cloud privati. Se si dispone di un cluster solo privato, è necessario utilizzare le credenziali del servizio che utilizzano l'endpoint del servizio cloud privato, oppure aprire l'indirizzo IP e la porta pubblici per connettersi al servizio.
Per i passi da seguire per il binding delle credenziali di servizio al cluster, consultare le sezioni seguenti.
Utilizza il bind del servizio IBM Cloud per creare automaticamente credenziali del servizio per i tuoi servizi IBM Cloud e archiviarle in un segreto Kubernetes.
Se il servizio supporta gli endpoint del servizio cloud privato, è possibile creare manualmente le credenziali del servizio con l'endpoint del servizio cloud privato, quindi utilizzare l'opzione --key per specificare il nome delle
credenziali.
Prima di cominciare:
- Assicurati di avere i seguenti ruoli:
- Editor o Amministratore IBM Cloud Ruolo di accesso alla piattaforma IAM per il cluster a cui si vuole associare un servizio.
- Writer o Manager IBM Cloud Ruolo di accesso al servizio IAM per lo spazio dei nomi di Kubernetes in cui si desidera eseguire il binding del servizio.
- Accedi al tuo account. Se applicabile, specifica il gruppo di risorse appropriato. Imposta il contesto per il tuo cluster.
Per aggiungere un servizio IBM Cloud al tuo cluster:
-
Crea un'istanza del servizio IBM Cloud.
- Alcuni servizi IBM Cloud sono disponibili solo in determinate regioni. Puoi eseguire il bind di un servizio al tuo cluster solo se il servizio è disponibile nella stessa regione del tuo cluster. Inoltre, se vuoi creare un'istanza del servizio nella zona Washington DC, devi utilizzare la CLI.
- Per i servizi che supportano IAM: devi creare l'istanza del servizio nello stesso gruppo di risorse del tuo cluster. Un servizio può essere creato in un solo gruppo di risorse che non puoi modificare in seguito.
- Assicurarsi che il nome del servizio sia nel formato
myserviceoexample.com. Non sono consentiti spazi e caratteri di sottolineatura.
-
Controlla il tipo di servizio che hai creato e prendi nota del nome (Name) dell'istanza del servizio.
ibmcloud resource service-instancesOutput di esempio
NAME Location State Type Tags <iam_service_instance_name> <region> active service_instance -
Identifica lo spazio dei nomi del cluster che desideri utilizzare per l'aggiunta del tuo servizio.
kubectl get namespaces -
Legare il servizio al proprio cluster per creare le credenziali del servizio che utilizzano l'endpoint del servizio del cloud pubblico e memorizzare le credenziali in un segreto Kubernetes. Se si dispone di credenziali di servizio esistenti, utilizzare l'opzione
--keyper specificare il nome delle credenziali. Per i servizi abilitati IAM, le credenziali vengono create automaticamente con il ruolo di accesso al servizio Writer, ma è possibile utilizzare l'opzione--roleper specificare un ruolo di accesso al servizio diverso. Se si utilizza l'opzione--key, non includere l'opzione--role.Se si prevede di inserire le proprie credenziali, assicurarsi che le credenziali esistenti non siano credenziali di visualizzazione una tantum o utilizzare il metodo consigliato per salvare manualmente le credenziali del servizio nel cluster. Per ulteriori informazioni, vedere Credenziali una tantum.
ibmcloud ks cluster service bind --cluster <cluster_name_or_ID> --namespace <namespace> --service <service_instance_name> [--key <service_instance_key>] [--role <IAM_service_role>]Quando la creazione delle credenziali del servizio ha esito positivo, viene creato un segreto Kubernetes con il nome
binding-<service_instance_name>.Output di esempio
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> -
Verifica le credenziali del servizio nel tuo segreto Kubernetes.
- Ottieni i dettagli del segreto e prendi nota del valore binding. Il valore binding ha una codifica base64 e contiene le credenziali per la tua istanza del servizio in formato JSON.
Output di esempiokubectl 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 - Decodifica il valore di bind.
Output di esempioecho "<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"} - Facoltativo: confronta le credenziali del servizio che hai decodificato nel passo precedente con le credenziali del servizio che trovi per la tua istanza del servizio nel dashboard IBM Cloud.
- Ottieni i dettagli del segreto e prendi nota del valore binding. Il valore binding ha una codifica base64 e contiene le credenziali per la tua istanza del servizio in formato JSON.
-
Ora che è stato eseguito il bind del tuo servizio al tuo cluster, devi configurare la tua applicazione per accedere alle credenziali del servizio nel segreto Kubernetes.
Accesso alle credenziali del servizio dalle tue applicazioni
Per accedere ad un'istanza del servizio IBM Cloud dalla tua applicazione, devi rendere le credenziali del servizio archiviate nel segreto di Kubernetes disponibili per la tua applicazione.
Le credenziali di un'istanza del servizio hanno una codifica base64 e sono archiviate all'interno del tuo segreto in formato JSON. Per accedere ai dati nel tuo segreto, scegli tra le seguenti opzioni:
Prima di cominciare:
- Assicurarsi di avere il ruolo di accesso al servizio IAM Writer o Manager IBM Cloud per lo spazio dei nomi
kube-system. - Accedi al tuo account. Se applicabile, specifica il gruppo di risorse appropriato. Imposta il contesto per il tuo cluster.
- Aggiungi un servizio IBM Cloud al tuo cluster.
Montaggio del segreto come un volume al tuo pod
Quando monti un segreto come un volume al tuo pod, un file denominato binding viene archiviato nella directory di montaggio del volume. Il file binding in formato JSON include tutte le informazioni e le credenziali
di cui hai bisogno per accedere al servizio IBM Cloud.
-
Elenca i segreti disponibili nel tuo cluster e prendi nota del nome del tuo segreto. Cerca un segreto di tipo Opaque. Se sono presenti più segreti, contatta il tuo amministratore cluster per identificare il segreto del servizio corretto.
kubectl get secretsOutput di esempio
NAME TYPE DATA AGE binding-<service_instance_name> Opaque 1 3m -
Crea un file YAML per la tua distribuzione Kubernetes e monta il segreto come un volume al tuo 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- Il percorso assoluto della directory in cui viene montato il volume nel contenitore.
volumeMounts.nameevolumes.name- Il nome del volume per montare il tuo pod.
secret.defaultMode- Le autorizzazioni di lettura e scrittura sul segreto. Utilizza
420per impostare le autorizzazioni di sola lettura. secret.secretName- Il nome del segreto di cui hai preso nota nel passo precedente.
-
Crea il pod e monta il segreto come un volume.
kubectl apply -f secret-test.yaml -
Verifica che il pod sia stato creato.
kubectl get podsOutput della CLI di esempio:
NAME READY STATUS RESTARTS AGE secret-test-1111454598-gfx32 1/1 Running 0 1m -
Accedere alle credenziali del servizio.
-
Accedi al tuo pod.
kubectl exec <pod_name> -it bash -
Vai al tuo percorso di montaggio del volume che hai definito in precedenza ed elenca i file in esso contenuti.
cd <volume_mountpath> && lsOutput di esempio
bindingIl file
bindinginclude le credenziali del servizio che hai archiviato nel segreto Kubernetes. -
Visualizza le credenziali del servizio. Le credenziali vengono archiviate come coppie chiave-valore in formato JSON.
cat bindingOutput di esempio
{"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"} -
Configura la tua applicazione per analizzare il contenuto JSON e richiamare le informazioni di cui hai bisogno per accedere al tuo servizio.
-
Riferimento al segreto nelle variabili di ambiente
Puoi aggiungere le credenziali del servizio e altre coppie chiave-valore dal tuo segreto Kubernetes come variabili di ambiente alla tua distribuzione.
-
Elenca i segreti disponibili nel tuo cluster e prendi nota del nome del tuo segreto. Cerca un segreto di tipo Opaque. Se sono presenti più segreti, contatta il tuo amministratore cluster per identificare il segreto del servizio corretto.
kubectl get secretsOutput di esempio
NAME TYPE DATA AGE binding-<service_instance_name> Opaque 1 3m -
Ottieni i dettagli del tuo segreto per trovare le potenziali coppie chiave-valore a cui puoi fare riferimento come variabili di ambiente nel tuo pod. Le credenziali del servizio sono archiviate nella chiave
bindingdel tuo segreto.kubectl get secrets binding-<service_instance_name> --namespace=<namespace> -o yamlOutput di esempio
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 -
Crea un file YAML per la tua distribuzione Kubernetes e specifica una variabile di ambiente che fa riferimento alla chiave
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- Il nome della tua variabile di ambiente.
env.valueFrom.secretKeyRef.name- Il nome del segreto di cui hai preso nota nel passo precedente.
env.valueFrom.secretKeyRef.key- La chiave che fa parte del tuo segreto e a cui vuoi fare riferimento nella tua variabile di ambiente. Per fare riferimento alle credenziali del servizio, è necessario utilizzare la chiave di binding.
-
Crea il pod che fa riferimento alla chiave
bindingdel tuo segreto come una variabile di ambiente.kubectl apply -f secret-test.yaml -
Verifica che il pod sia stato creato.
kubectl get podsOutput della CLI di esempio:
NAME READY STATUS RESTARTS AGE secret-test-1111454598-gfx32 1/1 Running 0 1m -
Verifica che la variabile di ambiente sia impostata correttamente.
- Accedi al tuo pod.
kubectl exec <pod_name> -it bash - Elenca tutte le variabili di ambiente nel pod.
Output di esempioenvBINDING={"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"}
- Accedi al tuo pod.
-
Configura la tua applicazione per leggere la variabile di ambiente e per analizzare il contenuto JSON per richiamare le informazioni di cui hai bisogno per accedere al tuo servizio.
Codice di esempio in Python:
if os.environ.get('BINDING'): credentials = json.loads(os.environ.get('BINDING')) -
Facoltativo: come precauzione, aggiungi la gestione degli errori alla tua applicazione nel caso in cui la variabile di ambiente
BINDINGnon sia impostata correttamente.Codice di esempio in Java:
if (System.getenv("BINDING") == null) { throw new RuntimeException("Environment variable 'SECRET' is not set!"); }Codice di esempio in Node.js:
if (!process.env.BINDING) { console.error('ENVIRONMENT variable "BINDING" is not set!'); process.exit(1); }
Rimozione di un servizio da un cluster
Se non si vuole usare un servizio IBM Cloud legato al cluster, si può rimuovere manualmente il segreto Kubernetes e i pod che accedono al segreto dal cluster.
-
Elenca i servizi associati mediante bind al tuo cluster e prendi nota del nome del tuo servizio e dello spazio dei nomi a cui è associato mediante bind il servizio.
ibmcloud ks cluster service ls --clusterOutput di esempio
OK Service Instance GUID Key Namespace myservice 12345ab1-1234-1abc-a12b-12abc12a12ab kube-a1a12abcd12a123abc1a12ab1a1234ab7.abcdefg0p1abcd123lgg.default default -
Elencare i segreti Kubernetes nello spazio dei nomi a cui il servizio è legato e cercare il segreto con un nome che segue il formato
binding-<service_name>.kubectl get secrets -n <namespace> | grep OpaqueOutput di esempio
binding-myservice Opaque 1 3d23h -
Richiama tutti i pod che accedono al segreto.
kubectl get pods --all-namespaces -o=jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.volumes[*]}{.secret.secretName}{" "}{end}{end}' | grep "<secret_name>"Se il tuo output della CLI è vuoto, non esiste alcun pod nel tuo cluster che monta il segreto.
-
Se hai dei pod che montano il segreto, rimuovi il pod oppure la distribuzione che gestisce il pod oppure aggiorna il pod e lo YAML di distribuzione per utilizzare invece un segreto differente.
- Per rimuovere un pod o una distribuzione:
kubectl delete pod <pod_name> -n <namespace>kubectl delete deployment <deployment_name> -n <namespace> - Per aggiornare un pod o una distribuzione esistenti:
- Ottieni lo YAML del pod o della distribuzione.
kubectl get pod <pod_name> -o yamlkubectl get deployment <deployment_name> -o yaml - Copia il file YAML e, nella sezione
spec.volumes, modifica il nome del segreto che vuoi utilizzare. - Applica la modifica nel tuo cluster.
kubectl apply -f pod.yamlkubectl apply -f deployment.yaml - Verifica che venga creato un nuovo pod con la specifica di volume aggiornata.
kubectl get podskubectl describe pod <pod_name>
- Ottieni lo YAML del pod o della distribuzione.
- Per rimuovere un pod o una distribuzione:
-
Rimuovi il segreto.
kubectl delete secret <secret_name> -n <namespace> -
Verifica che il tuo segreto venga rimosso.
kubectl get secrets -n <namespace> -
Facoltativo. Rimuovi l'istanza del servizio IBM Cloud.
ibmcloud resource service-instance-delete <service_name>