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 bindCLI 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ãomyserviceouexample.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
prodem 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:
- Assegure-se de que você tenha as funções a seguir:
- Editor ou Administrador IBM Cloud Função de acesso à plataforma IAM para o cluster em que você deseja vincular um serviço.
- Writer ou Manager IBM Cloud Função de acesso ao serviço IAM para o namespace Kubernetes em que você deseja vincular o serviço.
- Efetue login na sua conta. If applicable, target the appropriate resource group. Configure o contexto para o seu cluster.
Você pode adicionar manualmente as credenciais de serviço ao cluster seguindo as etapas a seguir.
-
Obtenha o nome da instância do serviço que você deseja adicionar ao cluster.
ibmcloud resource service-instances -
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 -
Copie a seção
Credentialse salve-a em um arquivo sem extensão chamadocreds. -
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
--keyao executar o comandoservice binde 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 bindnão é compatível com o fornecimento de suas próprias credenciais de visualização única. Portanto, se você quiser usar o comandoservice bind, não especifique o parâmetro--key. A execução do comando sem o endereço--keycriará 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 bindcria 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--keypara 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:
- Assegure-se de que você tenha as funções a seguir:
- Editor ou Administrador IBM Cloud Função de acesso à plataforma IAM para o cluster em que você deseja vincular um serviço.
- Writer ou Manager IBM Cloud Função de acesso ao serviço IAM para o namespace Kubernetes em que você deseja vincular o serviço.
- Efetue login na sua conta. If applicable, target the appropriate resource group. Configure o contexto para o seu cluster.
Para incluir um serviço do IBM Cloud em seu cluster:
-
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
myserviceouexample.comEspaços e sublinhados não são permitidos.
-
Verifique o tipo de serviço que você criou e anote o Nome da instância de serviço.
ibmcloud resource service-instancesSaída de exemplo
NAME Location State Type Tags <iam_service_instance_name> <region> active service_instance -
Identifique o namespace de cluster que você deseja usar para incluir o seu serviço.
kubectl get namespaces -
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
--keypara 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--rolepara 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> -
Verifique as credenciais de serviço em seu segredo do Kubernetes.
- 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.
Saída de exemplokubectl 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 - Decodifique o valor de ligação.
Saída de exemploecho "<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"} - 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.
- 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.
-
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:
- Assegure-se de você tenha a função de acesso de serviço Gravador ou Gerenciador do IBM Cloud IAM para o namespace
kube-system. - Efetue login na sua conta. If applicable, target the appropriate resource group. Configure o contexto para o seu cluster.
- Inclua um serviço IBM Cloud em seu cluster .
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.
-
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 secretsSaída de exemplo
NAME TYPE DATA AGE binding-<service_instance_name> Opaque 1 3m -
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.nameevolumes.name- O nome do volume a ser montado no pod.
secret.defaultMode- As permissões de leitura e gravação no segredo. Use
420para configurar permissões somente leitura. secret.secretName- O nome do segredo que você anotou na etapa anterior.
-
Crie o pod e monte o segredo como um volume.
kubectl apply -f secret-test.yaml -
Verifique se o pod foi criado.
kubectl get podsExemplo de saída da CLI:
NAME READY STATUS RESTARTS AGE secret-test-1111454598-gfx32 1/1 Running 0 1m -
Acesse as credenciais de serviço.
-
Efetue login em seu pod.
kubectl exec <pod_name> -it bash -
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> && lsSaída de exemplo
bindingO arquivo
bindinginclui as credenciais de serviço que você armazenou no segredo do Kubernetes. -
Visualize as credenciais de serviço. As credenciais são armazenadas como pares chave-valor em formato JSON.
cat bindingSaí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"} -
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.
-
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 secretsSaída de exemplo
NAME TYPE DATA AGE binding-<service_instance_name> Opaque 1 3m -
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
bindingde seu segredo.kubectl get secrets binding-<service_instance_name> --namespace=<namespace> -o yamlSaí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 -
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: bindingcontainers.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.
-
Crie o pod que referencia a chave
bindingde seu segredo como uma variável de ambiente.kubectl apply -f secret-test.yaml -
Verifique se o pod foi criado.
kubectl get podsExemplo de saída da CLI:
NAME READY STATUS RESTARTS AGE secret-test-1111454598-gfx32 1/1 Running 0 1m -
Verifique se a variável de ambiente está configurada corretamente.
- Efetue login em seu pod.
kubectl exec <pod_name> -it bash - Liste todas as variáveis de ambiente no pod.
Saída de exemploenvBINDING={"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"}
- Efetue login em seu pod.
-
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')) -
Opcional: como uma precaução, inclua a manipulação de erros em seu app, caso a variável de ambiente
BINDINGnã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.
-
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 --clusterSaída de exemplo
OK Service Instance GUID Key Namespace myservice 12345ab1-1234-1abc-a12b-12abc12a12ab kube-a1a12abcd12a123abc1a12ab1a1234ab7.abcdefg0p1abcd123lgg.default default -
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 OpaqueSaída de exemplo
binding-myservice Opaque 1 3d23h -
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.
-
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:
- Obtenha o arquivo YAML do pod ou da implementação.
kubectl get pod <pod_name> -o yamlkubectl get deployment <deployment_name> -o yaml - Copie o arquivo YAML e, na seção
spec.volumes, mude o nome do segredo que deseja usar. - Aplique a mudança em seu cluster.
kubectl apply -f pod.yamlkubectl apply -f deployment.yaml - Verifique se um novo pod foi criado com a especificação de volume atualizada.
kubectl get podskubectl describe pod <pod_name>
- Obtenha o arquivo YAML do pod ou da implementação.
- Para remover um pod ou implementação:
-
Remova o segredo.
kubectl delete secret <secret_name> -n <namespace> -
Verifique se seu segredo foi removido.
kubectl get secrets -n <namespace> -
Opcional. Remova a instância de serviço do IBM Cloud.
ibmcloud resource service-instance-delete <service_name>