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 bind Comando 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 sono myservice o example.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 prod Kubernetes 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:

È possibile aggiungere manualmente le credenziali di servizio al cluster completando i seguenti passaggi.

  1. Ottieni il nome dell'istanza del servizio che desideri aggiungere al tuo cluster.

    ibmcloud resource service-instances
    
  2. 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
    
  3. Copia la sezione " Credentials " e salvala in un file senza estensione chiamato " creds".

  4. 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 --key quando si esegue il comando service bind e 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 bind non supporta l'inserimento delle proprie credenziali di visualizzazione una tantum. Pertanto, se si desidera utilizzare il comando service bind, non specificare il parametro --key. Eseguendo il comando senza --key si 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 bind crea 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 --key per 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:

Per aggiungere un servizio IBM Cloud al tuo cluster:

  1. 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 myservice o example.com. Non sono consentiti spazi e caratteri di sottolineatura.
  2. Controlla il tipo di servizio che hai creato e prendi nota del nome (Name) dell'istanza del servizio.

    ibmcloud resource service-instances
    

    Output di esempio

    NAME                          Location   State    Type               Tags
    <iam_service_instance_name>   <region>   active   service_instance
    
  3. Identifica lo spazio dei nomi del cluster che desideri utilizzare per l'aggiunta del tuo servizio.

    kubectl get namespaces
    
  4. 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 --key per 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 --role per 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>
    
  5. Verifica le credenziali del servizio nel tuo segreto Kubernetes.

    1. 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.
      kubectl get secrets binding-<service_instance_name> --namespace=<namespace> -o yaml
      
      Output di esempio
      apiVersion: 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
      
    2. Decodifica il valore di bind.
      echo "<binding>" | base64 -D
      
      Output 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>::","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"}
      
    3. 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.
  6. 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:

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.

  1. 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 secrets
    

    Output di esempio

    NAME                              TYPE            DATA      AGE
    binding-<service_instance_name>   Opaque          1         3m
    
  2. 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.name e volumes.name
    Il nome del volume per montare il tuo pod.
    secret.defaultMode
    Le autorizzazioni di lettura e scrittura sul segreto. Utilizza 420 per impostare le autorizzazioni di sola lettura.
    secret.secretName
    Il nome del segreto di cui hai preso nota nel passo precedente.
  3. Crea il pod e monta il segreto come un volume.

    kubectl apply -f secret-test.yaml
    
  4. Verifica che il pod sia stato creato.

    kubectl get pods
    

    Output della CLI di esempio:

    NAME                           READY     STATUS    RESTARTS   AGE
    secret-test-1111454598-gfx32   1/1       Running   0          1m
    
  5. Accedere alle credenziali del servizio.

    1. Accedi al tuo pod.

      kubectl exec <pod_name> -it bash
      
    2. Vai al tuo percorso di montaggio del volume che hai definito in precedenza ed elenca i file in esso contenuti.

      cd <volume_mountpath> && ls
      

      Output di esempio

      binding
      

      Il file binding include le credenziali del servizio che hai archiviato nel segreto Kubernetes.

    3. Visualizza le credenziali del servizio. Le credenziali vengono archiviate come coppie chiave-valore in formato JSON.

      cat binding
      

      Output 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"}
      
    4. 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.

  1. 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 secrets
    

    Output di esempio

    NAME                              TYPE            DATA      AGE
    binding-<service_instance_name>   Opaque          1         3m
    
  2. 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 binding del tuo segreto.

    kubectl get secrets binding-<service_instance_name> --namespace=<namespace> -o yaml
    

    Output 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
    
  3. 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: binding
    
    containers.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.
  4. Crea il pod che fa riferimento alla chiave binding del tuo segreto come una variabile di ambiente.

    kubectl apply -f secret-test.yaml
    
  5. Verifica che il pod sia stato creato.

    kubectl get pods
    

    Output della CLI di esempio:

    NAME                           READY     STATUS    RESTARTS   AGE
    secret-test-1111454598-gfx32   1/1       Running   0          1m
    
  6. Verifica che la variabile di ambiente sia impostata correttamente.

    1. Accedi al tuo pod.
      kubectl exec <pod_name> -it bash
      
    2. Elenca tutte le variabili di ambiente nel pod.
      env
      
      Output di esempio
      BINDING={"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"}
      
  7. 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'))
    
  8. Facoltativo: come precauzione, aggiungi la gestione degli errori alla tua applicazione nel caso in cui la variabile di ambiente BINDING non 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.

  1. 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 --cluster
    

    Output di esempio

    OK
    Service   Instance GUID                          Key                                                                  Namespace   
    myservice 12345ab1-1234-1abc-a12b-12abc12a12ab   kube-a1a12abcd12a123abc1a12ab1a1234ab7.abcdefg0p1abcd123lgg.default   default  
    
  2. 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 Opaque
    

    Output di esempio

    binding-myservice   Opaque     1      3d23h
    
  3. 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.

  4. 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:
      1. Ottieni lo YAML del pod o della distribuzione.
        kubectl get pod <pod_name> -o yaml
        
        kubectl get deployment <deployment_name> -o yaml
        
      2. Copia il file YAML e, nella sezione spec.volumes, modifica il nome del segreto che vuoi utilizzare.
      3. Applica la modifica nel tuo cluster.
        kubectl apply -f pod.yaml
        
        kubectl apply -f deployment.yaml
        
      4. Verifica che venga creato un nuovo pod con la specifica di volume aggiornata.
        kubectl get pods
        
        kubectl describe pod <pod_name>
        
  5. Rimuovi il segreto.

    kubectl delete secret <secret_name> -n <namespace>
    
  6. Verifica che il tuo segreto venga rimosso.

    kubectl get secrets -n <namespace>
    
  7. Facoltativo. Rimuovi l'istanza del servizio IBM Cloud.

    ibmcloud resource service-instance-delete <service_name>