Vinculação de credenciais de serviço ao seu cluster

Inclua serviços da IBM Cloud para aprimorar seu cluster Kubernetes com recursos adicionais em áreas como Watson AI, dados, segurança e Internet das Coisas (IoT).

A partir de 04 de agosto de 2025, o site IBM Cloud está tornando a visualização única o comportamento padrão para todas as credenciais de recursos em novas instâncias de serviço. Em vez de usar a CLI do service bind para adicionar credenciais de serviço ao cluster, siga as etapas para adicionar manualmente as credenciais de serviço ao cluster. Para obter mais informações, consulte Credenciais únicas.

O que é ligação de serviços do IBM Cloud?
A ligação de serviços é uma maneira rápida de criar credenciais de serviço para um serviço da IBM Cloud usando seu terminal em serviço de nuvem pública e armazenando essas credenciais em um segredo do Kubernetes em seu cluster. Para ligar um serviço ao cluster, deve-se primeiro provisionar uma instância do serviço. Em seguida, você pode vincular serviços manualmente ao cluster ou usar o comando service bind CLI para criar as credenciais de serviço e o segredo Kubernetes.
Quais tipos de serviços podem ser ligados ao meu cluster?
Você pode vincular serviços que estão habilitados para IBM Cloud Identity and Access Management (IAM). Os serviços compatíveis com IAM oferecem um controle de acesso mais granular e podem ser gerenciados em um grupo de recursos do IBM Cloud. Para obter mais informações, consulte Gerenciando o acesso a recursos. Para localizar uma lista de serviços do IBM Cloud suportados, consulte o catálogo do IBM Cloud.
Como posso tornar meus segredos de cluster ainda mais seguros?
Peça ao seu administrador de cluster para ativar um provedor de serviços de gerenciamento de chave em seu cluster para criptografar segredos novos e existentes, como o segredo que armazena as credenciais de suas instâncias de serviço da IBM Cloud.
É possível usar todos os serviços IBM Cloud no meu cluster?
É possível usar a ligação de serviços somente para serviços que suportem chaves de serviço, para que as credenciais de serviço possam ser criadas e armazenadas automaticamente em um segredo do Kubernetes. Para saber como conectar o serviço a um aplicativo, consulte Conexão de serviços a aplicativos.
Os serviços que não suportam chaves de serviço geralmente fornecem uma API que pode ser usada no app. O método de ligação de serviços não configura automaticamente o acesso à API para seu app. Certifique-se de revisar a documentação da API de seu serviço e implementar nele a interface da API.
Posso vincular uma instância de serviço existente do IBM Cloud ao meu cluster?
Sim, você pode usar serviços que atendam aos requisitos de nomenclatura e reutilizar as credenciais de serviço ao vinculá-los ao cluster. Certifique-se de que o nome do serviço esteja no seguinte formato regex. [a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?). Os nomes permitidos de exemplo são myservice ou example.com. Caracteres que não são permitidos incluem espaços e sublinhados.
É possível ligar vários serviços IBM Cloud a vários clusters de uma vez só?
A ligação de serviço do IBM Cloud é em uma base por cluster, por serviço, e funciona criando um segredo do Kubernetes que seus pods podem montar.
Para vários clusters e serviços, é possível usar perfis confiáveis do IAM em seu lugar. No IAM, você cria um perfil confiável com políticas de acesso para os serviços IBM Cloud desejados. Em seguida, você vincula o perfil confiável a quantos clusters desejar, com base em condições como todos os namespaces do Kubernetes prod em clusters em um grupo de recursos. Por fim, seus pods montam o volume projetado da conta de serviço do Kubernetes para obter um token que pode ser trocado por um token do IAM que seus apps usam para autenticar com os serviços IBM Cloud.

Vincular manualmente as credenciais de serviço ao cluster

Antes de Iniciar:

Você pode adicionar manualmente as credenciais de serviço ao cluster seguindo as etapas a seguir.

  1. Obtenha o nome da instância do serviço que você deseja adicionar ao cluster.

    ibmcloud resource service-instances
    
  2. Crie uma chave de serviço. Para obter mais informações, consulte a referência do comando.

    ibmcloud resource service-key-create NAME [ROLE] --instance-name SERVICE_INSTANCE
    
  3. Copie a seção Credentials e salve-a em um arquivo sem extensão chamado creds.

  4. Crie um segredo Kubernetes que use o arquivo de credenciais que você criou.

    kubectl create secret generic my-secret --from-file=path/to/creds
    

Adição de serviços a clusters usando a CLI do service bind

Posso usar as credenciais de serviço existentes ao vincular?
Opcionalmente, você pode especificar o parâmetro --key ao executar o comando service bind e fornecer o nome de suas credenciais de serviço existentes. A associação de serviço IBM Cloud cria automaticamente um segredo Kubernetes com suas credenciais de serviço existentes.
E se minhas credenciais existentes forem credenciais de visualização única?
O comando service bind não é compatível com o fornecimento de suas próprias credenciais de visualização única. Portanto, se você quiser usar o comando service bind, não especifique o parâmetro --key. A execução do comando sem o endereço --key criará um novo conjunto de credenciais para você.
Se quiser usar credenciais que sejam de visualização única, você deverá vincular o serviço manualmente ao cluster. Essa opção permite que você use suas credenciais de visualização única existentes.
E se eu desejar usar credenciais de serviço que usam o terminal em serviço de nuvem privada?
Por padrão, o comando service bind cria credenciais de serviço com o ponto de extremidade do serviço de nuvem pública. Para usar o terminal em serviço de nuvem privada, deve-se criar manualmente credenciais de serviço para o seu serviço que usam o terminal em serviço de nuvem privada e, em seguida, usar a opção --key para especificar o nome das credenciais de serviço existentes. Se você planeja trazer suas próprias credenciais, certifique-se de que as credenciais existentes não sejam credenciais de visualização única. Para obter mais informações, consulte Credenciais únicas.
O seu serviço pode ainda não suportar terminais em serviço de nuvem privada. Se você tiver um cluster somente privado, deve-se usar credenciais de serviço que usam o terminal em serviço de nuvem privada ou abrir o endereço IP público e a porta para se conectar ao seu serviço.

Consulte as seções a seguir para ver as etapas de associação de credenciais de serviço ao cluster.

Use a ligação de serviços do IBM Cloud para criar automaticamente credenciais de serviço para seus serviços do IBM Cloud e armazená-las em um segredo do Kubernetes.

Se o seu serviço for compatível com pontos de extremidade de serviço de nuvem privada, você poderá criar manualmente as credenciais de serviço com o ponto de extremidade de serviço de nuvem privada e, em seguida, usar a opção --key para especificar o nome das credenciais.

Antes de Iniciar:

Para incluir um serviço do IBM Cloud em seu cluster:

  1. Crie uma instância do serviço da IBM Cloud.

    • Alguns serviços do IBM Cloud estão disponíveis somente em regiões selecionadas. Será possível ligar um serviço a seu cluster somente se o serviço estiver disponível na mesma região que seu cluster. Além disso, se você deseja criar uma instância de serviço na zona Washington DC, deve-se usar a CLI.
    • Para serviços ativados para o IAM: deve-se criar a instância de serviço no mesmo grupo de recursos que o cluster. Um serviço poderá ser criado em apenas um grupo de recursos que não poderá ser mudado posteriormente.
    • Certifique-se de que o nome do serviço esteja no formato myservice ou example.com Espaços e sublinhados não são permitidos.
  2. Verifique o tipo de serviço que você criou e anote o Nome da instância de serviço.

    ibmcloud resource service-instances
    

    Saída de exemplo

    NAME                          Location   State    Type               Tags
    <iam_service_instance_name>   <region>   active   service_instance
    
  3. Identifique o namespace de cluster que você deseja usar para incluir o seu serviço.

    kubectl get namespaces
    
  4. Ligue o serviço ao seu cluster para criar credenciais de serviço para o seu serviço que usam o terminal em serviço de nuvem pública e armazene as credenciais em um segredo do Kubernetes. Se você tiver credenciais de serviço existentes, use a opção --key para especificar o nome das credenciais. Para serviços habilitados para IAM, as credenciais são criadas automaticamente com a função de acesso ao serviço Writer, mas você pode usar a opção --role para especificar uma função de acesso ao serviço diferente. Se você usar a opção --key, não inclua a opção --role.

    Se você planeja trazer suas próprias credenciais, certifique-se de que as credenciais existentes não sejam credenciais de visualização única ou use a maneira recomendada de salvar manualmente as credenciais de serviço em seu cluster. Para obter mais informações, consulte Credenciais únicas.

    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 a criação das credenciais de serviço é bem-sucedida, um segredo de Kubernetes com o nome binding-<service_instance_name> é criado.

    Saída de exemplo

    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. Verifique as credenciais de serviço em seu segredo do Kubernetes.

    1. Obtenha os detalhes do segredo e anote o valor de binding. O valor de binding é codificado em Base64 e contém as credenciais para sua instância de serviço no formato JSON.
      kubectl get secrets binding-<service_instance_name> --namespace=<namespace> -o yaml
      
      Saída de exemplo
      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. Decodifique o valor de ligação.
      echo "<binding>" | base64 -D
      
      Saída de exemplo
      {"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. Opcional: compare as credenciais de serviço que você decodificou na etapa anterior com as credenciais de serviço localizadas para sua instância de serviço no painel do IBM Cloud.
  6. Agora que seu serviço está ligado a seu cluster, deve-se configurar seu app para acessar as credenciais de serviço no segredo do Kubernetes.

Acessando credenciais de serviço de seus apps

Para acessar uma instância de serviço do IBM Cloud por meio de seu app, deve-se tornar as credenciais de serviço que estão armazenadas no segredo do Kubernetes disponíveis para seu app.

As credenciais de uma instância de serviço são codificadas em base64 e armazenadas dentro de seu segredo no formato JSON. Para acessar os dados em seu segredo, escolha entre as opções a seguir:

Antes de Iniciar:

Montando o segredo como um volume para o seu pod

Quando você monta o segredo como um volume em seu pod, um arquivo denominado binding é armazenado no diretório de montagem do volume. O arquivo binding em formato JSON inclui todas as informações e credenciais necessárias para acessar o serviço do IBM Cloud.

  1. Liste os segredos disponíveis em seu cluster e anote o nome de seu segredo. Procure um segredo do tipo Opaco. Se existirem diversos segredos, entre em contato com o administrador de cluster para identificar o segredo do serviço correto.

    kubectl get secrets
    

    Saída de exemplo

    NAME                              TYPE            DATA      AGE
    binding-<service_instance_name>   Opaque          1         3m
    
  2. Crie um arquivo YAML para sua implementação do Kubernetes e monte o segredo como um volume em seu 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
    O caminho absoluto do diretório no qual o volume está montado dentro do contêiner.
    volumeMounts.name e volumes.name
    O nome do volume a ser montado no pod.
    secret.defaultMode
    As permissões de leitura e gravação no segredo. Use 420 para configurar permissões somente leitura.
    secret.secretName
    O nome do segredo que você anotou na etapa anterior.
  3. Crie o pod e monte o segredo como um volume.

    kubectl apply -f secret-test.yaml
    
  4. Verifique se o pod foi criado.

    kubectl get pods
    

    Exemplo de saída da CLI:

    NAME                           READY     STATUS    RESTARTS   AGE
    secret-test-1111454598-gfx32   1/1       Running   0          1m
    
  5. Acesse as credenciais de serviço.

    1. Efetue login em seu pod.

      kubectl exec <pod_name> -it bash
      
    2. Navegue para o caminho de montagem do volume que você definiu anteriormente e liste os arquivos em seu caminho de montagem do volume.

      cd <volume_mountpath> && ls
      

      Saída de exemplo

      binding
      

      O arquivo binding inclui as credenciais de serviço que você armazenou no segredo do Kubernetes.

    3. Visualize as credenciais de serviço. As credenciais são armazenadas como pares chave-valor em formato JSON.

      cat binding
      

      Saída de exemplo

      {"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. Configure seu app para analisar o conteúdo JSON e recuperar as informações necessárias para acessar seu serviço.

Referenciando o segredo nas variáveis de ambiente

É possível incluir as credenciais de serviço e outros pares chave-valor de seu segredo do Kubernetes como variáveis de ambiente para a sua implementação.

  1. Liste os segredos disponíveis em seu cluster e anote o nome de seu segredo. Procure um segredo do tipo Opaco. Se existirem diversos segredos, entre em contato com o administrador de cluster para identificar o segredo do serviço correto.

    kubectl get secrets
    

    Saída de exemplo

    NAME                              TYPE            DATA      AGE
    binding-<service_instance_name>   Opaque          1         3m
    
  2. Obtenha os detalhes do seu segredo para localizar potenciais pares chave-valor que é possível referenciar como variáveis de ambiente em seu pod. As credenciais de serviço são armazenadas na chave binding de seu segredo.

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

    Saída de exemplo

    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. Crie um arquivo YAML para a sua implementação do Kubernetes e especifique uma variável de ambiente que referencie a chave 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
    O nome de sua variável de ambiente.
    env.valueFrom.secretKeyRef.name
    O nome do segredo que você anotou na etapa anterior.
    env.valueFrom.secretKeyRef.key
    A chave que faz parte de seu segredo e que você deseja referenciar em sua variável de ambiente. Para referenciar as credenciais de serviço, deve-se utilizar a chave de ligação.
  4. Crie o pod que referencia a chave binding de seu segredo como uma variável de ambiente.

    kubectl apply -f secret-test.yaml
    
  5. Verifique se o pod foi criado.

    kubectl get pods
    

    Exemplo de saída da CLI:

    NAME                           READY     STATUS    RESTARTS   AGE
    secret-test-1111454598-gfx32   1/1       Running   0          1m
    
  6. Verifique se a variável de ambiente está configurada corretamente.

    1. Efetue login em seu pod.
      kubectl exec <pod_name> -it bash
      
    2. Liste todas as variáveis de ambiente no pod.
      env
      
      Saída de exemplo
      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. Configure seu app para ler a variável de ambiente e para analisar o conteúdo JSON para recuperar as informações que você precisa para acessar seu serviço.

    Código de exemplo em Python:

    if os.environ.get('BINDING'):
        credentials = json.loads(os.environ.get('BINDING'))
    
  8. Opcional: como uma precaução, inclua a manipulação de erros em seu app, caso a variável de ambiente BINDING não esteja configurada corretamente.

    Código de exemplo em Java:

    if (System.getenv("BINDING") == null) {
    throw new RuntimeException("Environment variable 'SECRET' is not set!");
    }
    

    Código de exemplo em Node.js:

    if (!process.env.BINDING) {
    console.error('ENVIRONMENT variable "BINDING" is not set!');
    process.exit(1);
    }
    

Removendo um serviço de um cluster

Se não quiser usar um serviço da IBM Cloud que você vinculou ao cluster, será possível remover manualmente os segredos de Kubernetes e os pods que acessam o segredo do cluster.

  1. Liste os serviços ligados ao seu cluster e anote o nome de seu serviço e o namespace ao qual o serviço está ligado.

    ibmcloud ks cluster service ls --cluster
    

    Saída de exemplo

    OK
    Service   Instance GUID                          Key                                                                  Namespace   
    myservice 12345ab1-1234-1abc-a12b-12abc12a12ab   kube-a1a12abcd12a123abc1a12ab1a1234ab7.abcdefg0p1abcd123lgg.default   default  
    
  2. Liste os segredos de Kubernetes no espaço de nomes ao qual o serviço é ligado e procure o segredo com um nome que siga o formato binding-<service_name>.

    kubectl get secrets -n <namespace> | grep Opaque
    

    Saída de exemplo

    binding-myservice   Opaque     1      3d23h
    
  3. Recupere todos os pods que acessam o segredo.

    kubectl get pods --all-namespaces -o=jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.volumes[*]}{.secret.secretName}{" "}{end}{end}' | grep "<secret_name>"
    

    Quando a saída da CLI está vazia, nenhum pod existe em seu cluster que monta o segredo.

  4. Se tiver pods que montam o segredo, remova o pod ou a implementação que gerencia o pod ou atualize o pod e o YAML de implementação para usar um segredo diferente como alternativa.

    • Para remover um pod ou implementação:
      kubectl delete pod <pod_name> -n <namespace>
      
      kubectl delete deployment <deployment_name> -n <namespace>
      
    • Para atualizar um pod ou implementação existente:
      1. Obtenha o arquivo YAML do pod ou da implementação.
        kubectl get pod <pod_name> -o yaml
        
        kubectl get deployment <deployment_name> -o yaml
        
      2. Copie o arquivo YAML e, na seção spec.volumes, mude o nome do segredo que deseja usar.
      3. Aplique a mudança em seu cluster.
        kubectl apply -f pod.yaml
        
        kubectl apply -f deployment.yaml
        
      4. Verifique se um novo pod foi criado com a especificação de volume atualizada.
        kubectl get pods
        
        kubectl describe pod <pod_name>
        
  5. Remova o segredo.

    kubectl delete secret <secret_name> -n <namespace>
    
  6. Verifique se seu segredo foi removido.

    kubectl get secrets -n <namespace>
    
  7. Opcional. Remova a instância de serviço do IBM Cloud.

    ibmcloud resource service-instance-delete <service_name>