IBM Cloud Docs
使用私钥

使用私钥

了解如何使用 Code Engine中的私钥。 在 Code Engine中,可以将信息作为键/值对存储在可由函数,作业或应用程序使用环境变量使用的私钥中。

什么是秘密,我为什么会使用它们?

在 Code Engine中,私钥 (和 configmap) 是键/值对的集合。 当映射到环境变量时,将设置 NAME=VALUE 关系,以使环境变量的名称对应于这些映射中每个条目的“键”,并且环境变量的值是该键的“值”。

私钥提供了一种方法,用于将敏感配置信息 (例如密码或 SSH 密钥) 包含到部署中。 通过引用私钥中的值,可以将敏感信息与部署分离,以保持应用程序,功能或作业可移植性。 有权访问您的项目的任何人也可以查看您的私钥; 请确保您知道可以与这些用户共享私钥信息。 私钥包含键/值对中的信息。

由于私钥和配置映射是类似的实体 (除了私钥更安全地存储),因此您与私钥和配置映射进行交互和使用的方式也类似。 要了解有关 configmap 的更多信息,请参阅 使用 configmap

我可以在 Code Engine中创建哪种私钥?

Code Engine 支持各种私钥,并提供用于创建和使用私钥的选项。

下表概述了 Code Engine中受支持的私钥。

Code Engine中的秘密
名称 描述
基本认证 包含 usernamepassword 密钥的私钥。
访问需要基本 HTTP 身份验证的服务时,请使用基本身份验证机密。
通用 用于存储简单键/值对和 Code Engine 的私钥不会假定已定义的键/值对,也不会假定私钥的预期用途。
如果要定义自己的“键/值”对以访问服务,请使用通用密钥。
HMAC 包含 access-key-idsecret_access_key 密钥的秘密。
使用 HMAC 凭据可使用 S3-compatible 工具和库,这些工具和库需要身份验证,但不支持 IBM Cloud® Identity and Access Management API 密钥。
注册表 用于存储用于访问容器注册表的凭证的私钥。
当您使用 Code Engine 应用程序或作业来访问容器映像时,请使用注册表私钥。 或者,使用 Code Engine 来构建容器映像,并且注册表私钥由 Code Engine 用于访问注册表以存储构建的容器映像。
此私钥在 CLI 中也称为 Registry access secret
服务访问权 用于存储凭证以访问 IBM Cloud 服务实例的私钥。
在 Code Engine 中处理服务 绑定 时,请使用服务访问秘密。Code Engine 可以自动生成该秘密,也可以创建自己的自定义服务访问秘密。
SSH 存储凭证以使用 SSH 密钥向服务进行认证的私钥,例如,向 Git 存储库 (例如, GitHub 或 GitLab) 进行认证。
如果希望 Code Engine 为您构建容器映像,请使用 SSH 私钥。Code Engine 使用此私钥来访问代码存储库中的源代码。 例如,将此私钥用于构建运行以访问存储库中的源代码,例如 GitHub 或 GitLab。
此私钥还在 CLI 中用作 Git repository access secret,在控制台中用作 Code repo access
传输层安全性 (TLS) 包含已签名 TLS 证书 (包括其所有中间证书) 及其来自认证中心 (CA) 的相应专用密钥的私钥。
在 Code Engine中使用 定制域映射 时使用 TLS 私钥。

创建私钥

使用私钥为应用程序,作业或功能提供敏感信息。 私钥在“键/值”对中定义,并对存储在私钥中的数据进行编码。

从控制台创建私钥

了解如何从 Code Engine 控制台创建私钥。

了解如何从控制台创建以下类型的私钥。

从控制台创建通用私钥

了解如何从 Code Engine 控制台创建可由函数,作业或应用程序用作环境变量的通用私钥。

开始之前,请 创建项目

  1. 在项目处于 活动 状态后,在 Code Engine "项目" 页面上单击项目的名称。
  2. 在“组件”页面中,单击 私钥和配置映射
  3. 从“私钥和配置映射”页面中,单击 创建 以创建私钥。
  4. 从“创建私钥或配置映射”页面,完成以下步骤:
    1. 选择 通用密钥,然后单击 下一步
    2. 提供名称; 例如,mysecret-generic
    3. 单击添加键值对。 为此私钥指定一个或多个“键/值”对。 例如,将一个键指定为值为 mysecret1secret1,并将另一个键指定为值为 target-secretsecret2。 您为密钥选择的名称不需要与环境变量的名称相同。 请注意,键的值是隐藏的,但如果需要,可以查看该值。
    4. 单击“创建”创建密文。

现在,您的私钥是从控制台创建的,请转至“私钥和配置映射”页面以查看已定义的私钥和配置映射的列表。 您可以应用过滤器来定制列表以满足您的需求。

从控制台创建 HMAC 密文

了解如何从 Code Engine 控制台创建 HMAC 秘密,函数、工作或应用程序可将其作为环境变量使用。 它们与需要验证但不支持 IBM Cloud® Identity and Access Management API 密钥的 S3-compatible 工具和库一起使用。

开始之前,请 创建项目

  1. 在项目处于 活动 状态后,在 Code Engine "项目" 页面上单击项目的名称。
  2. 在“组件”页面中,单击 私钥和配置映射
  3. 从“私钥和配置映射”页面中,单击 创建 以创建私钥。
  4. 从“创建私钥或配置映射”页面,完成以下步骤:
    1. 选择 HMAC 秘密,然后单击下一步
    2. 提供名称; 例如,mysecret-hmac
    3. 指定访问密钥 ID。
    4. 指定秘密访问密钥。 请注意,键的值是隐藏的,但如果需要,可以查看该值。
    5. 单击“创建”创建密文。

现在,您的私钥是从控制台创建的,请转至“私钥和配置映射”页面以查看已定义的私钥和配置映射的列表。 您可以应用过滤器来定制列表以满足您的需求。

有关 HMAC 秘密的更多信息,请参阅 IBM Cloud Object Storage- API 密钥与 HMAC

从控制台创建注册表私钥

了解如何从 Code Engine 控制台创建注册表私钥,这些私钥可供函数,作业,应用程序或构建使用,以用于访问拉取或推送容器映像。

开始之前,请 创建项目

  1. 在项目处于 活动 状态后,在 Code Engine "项目" 页面上单击项目的名称。
  2. 在“组件”页面中,单击 私钥和配置映射
  3. 从“私钥和配置映射”页面中,单击 创建 以创建私钥。
  4. 从“创建私钥或配置映射”页面,完成以下步骤:
    1. 选择 注册表私钥,然后单击 下一步
    2. 提供名称; 例如,mysecret-registry
    3. 指定此私钥的目标注册表,例如 IBM Cloud Container Registry 或 Docker Hub。
    4. 指定注册表的位置。
    5. 指定用户名。 如果此私钥适用于 IBM Cloud Container Registry,那么用户名为 iamapikey。 如果此私钥适用于 Docker Hub,那么它是您的 Docker 标识。
    6. 输入用户名的凭证。 对于 IBM Cloud Container Registry,请使用 IAM API 密钥。 对于 Docker Hub,可以使用 Docker Hub 密码或 访问令牌。 对于其他目标注册表,请指定用户名的密码或 API 密钥。
    7. 单击“创建”创建密文。

现在,您的私钥是从控制台创建的,请转至“私钥和配置映射”页面以查看已定义的私钥和配置映射的列表。 您可以应用过滤器来定制列表以满足您的需求。

有关使用映像注册表的更多信息,请参阅 访问容器注册表

从控制台创建 SSH 私钥

了解如何从控制台创建 SSH 私钥,构建可以使用该私钥来访问专用源代码存储库。 SSH 私钥存储用于使用 SSH 密钥向服务进行认证的凭证,例如,向 Git 存储库 (例如,GitHub 或 GitLab) 进行认证。

开始之前,请 创建项目

  1. 在项目处于 活动 状态后,在 Code Engine "项目" 页面上单击项目的名称。
  2. 在“组件”页面中,单击 私钥和配置映射
  3. 从“私钥和配置映射”页面中,单击 创建 以创建私钥。
  4. 从“创建私钥或配置映射”页面,完成以下步骤:
    1. 选择 SSH 密钥,然后单击 下一步
    2. 提供名称; 例如,mysecret-ssh
    3. 为此私钥添加 SSH 专用密钥。
    4. 单击“创建”创建密文。

现在,您的私钥是从控制台创建的,请转至“私钥和配置映射”页面以查看已定义的私钥和配置映射的列表。 您可以应用过滤器来定制列表以满足您的需求。

使用专用代码存储库 (例如 Git 存储库) 时,请使用 SSH 密钥。 请参阅 访问专用代码存储库

从控制台创建 TLS 私钥

了解如何在 Code Engine中使用定制域映射时从控制台创建可供应用程序使用的 TLS 私钥。 传输层安全性 (TLS) 私钥包含已签名的 TLS 证书,包括其所有中间证书以及来自认证中心 (CA) 的相应专用密钥。

开始之前,请 创建项目

  1. 在项目处于 活动 状态后,在 Code Engine "项目" 页面上单击项目的名称。
  2. 在“组件”页面中,单击 私钥和配置映射
  3. 从“私钥和配置映射”页面中,单击 创建 以创建私钥。
  4. 从“创建私钥或配置映射”页面,完成以下步骤:
    1. 选择 TLS 私钥,然后单击 下一步
    2. 提供名称; 例如,mysecret-tls
    3. 添加证书链及其专用密钥。 请注意,您可以将证书串联起来,每份证书都以新行开头。 您可以在文件中提供此信息。
    4. 单击“创建”创建密文。

现在,您的私钥是从控制台创建的,请转至“私钥和配置映射”页面以查看已定义的私钥和配置映射的列表。 您可以应用过滤器来定制列表以满足您的需求。

在 Code Engine中使用 定制域映射 时,请使用 TLS 私钥。

使用 CLI 创建秘密

了解如何使用 Code Engine CLI 创建可由应用程序,作业或功能作为环境变量使用的私钥。

准备工作

从 CLI 版本 1.42.0 开始,在 CLI 中定义和处理秘密将统一到 secret 命令组。 请参阅 ibmcloud ce secret 命令。 使用 --format 选项指定秘密类别,如 basic_auth, generic, hmac, ssh, tlsregistry--format 选项的默认值是 generic

通过使用 secret create 命令,可以创建和管理各种密钥格式。 有关各种私钥格式的描述,请参阅 我可以在 Code Engine中创建哪种私钥?

了解如何使用 CLI 创建以下类型的私钥,

使用 CLI 创建基本认证密钥

基本身份验证密钥包含用户名和密码密钥,用于访问需要基本 HTTP 身份验证的服务。 以下示例使用 myusername 的凭证创建基本认证密钥,并且在本地工作站上的文件中提供了关联的密码

ibmcloud ce secret create --name mysecret-basicauth --format basic_auth --username myusername --password-from-file ./password.txt

要显示此私钥的详细信息,

ibmcloud ce secret get --name mysecret-basicauth

示例输出

Getting secret 'mysecret-basicauth'...
OK

Name:          mysecret-basicauth
ID:            abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Format:        basic_auth
Project Name:  myproject
Project ID:    01234567-abcd-abcd-abcd-abcdabcd1111
Age:           66s
Created:       2021-03-10T18:44:18-05:00

Data:    
---
password: REDACTED
username: bXl1c2VybmFtZQ==

请注意,已对此基本认证私钥的密钥 username 的值进行编码,并且已编辑 password 的值。 要将私钥数据显示为已解码,请将 --decode 选项与 secret get 命令配合使用。

使用 CLI 创建通用私钥

通用私钥存储简单的“键/值”对,而 Code Engine 不会对已定义的“键/值”对进行假定,也不会对私钥的预期用途进行假定。

您可以通过下列其中一种方法使用 secret create 命令来创建通用私钥。 缺省情况下,当未指定 --format 选项时,将创建通用私钥。

  • 使用 KEY=VALUE 格式的 --from-literal 选项直接从命令行创建私钥。 例如

    ibmcloud ce secret create --name myliteralsecret --from-literal "TARGET=My literal secret"
    
  • 通过使用 --from-file 选项指向文件来创建私钥。 通过使用此选项,文件的所有内容都将成为键/值对的值。 对于此示例,请使用名为 secrets.txt 的文件,其中包含 my little secret1

    • 以下示例将 --from-file KEY=FILE 格式与 secret create 命令配合使用:

      ibmcloud ce secret create --name mysecretmsg1 --from-file TARGET=secrets.txt
      
    • 以下示例命令将 --from-file FILE 格式与 secret create 命令配合使用。 在此示例中,TARGET (无扩展名) 是文件的名称,与作业已知的环境变量的名称相同。

      ibmcloud ce secret create --name mysecretmsg2  --from-file TARGET
      
  • 通过使用 --from-env-file 选项来创建私钥,以指向包含与格式 KEY=VALUE 匹配的一行或多行的文件。 指定文件中的每行都将添加为键/值对。 将忽略指定文件中的任何空行或以 # 开头的行。 对于此示例,请使用名为 secrets_multi.txt 的文件,其中包含键/值对: sec1=mysec1sec2=mysec2sec3=mysec3

    ibmcloud ce secret create --name mysecretmulti --from-env-file secrets_multi.txt
    

如果要从文件创建 (或更新) 通用私钥,请使用具有以下格式之一的 --from-file 选项: --from-file FILE--from-file KEY=FILE 在 Code Engine中,使用 --from-file 选项指定私钥值时,文件中的 所有 内容都是键/值对的值。 使用选项格式 --from-file KEY=FILE 时,KEY 是作业,函数或应用程序已知的环境变量的名称。 使用选项格式 --from-file FILE 时,FILE 是作业,函数或应用程序已知的环境变量的名称。 如果文件包含一个或多个“键/值”对,请使用 --from-env-file 选项为指定文件中的每个“键/值”对添加环境变量。 将忽略指定文件中的任何空行或以 # 开头的行。

要显示通用私钥 myliteralsecret 的详细信息,

ibmcloud ce secret get --name myliteralsecret

示例输出

Getting secret 'myliteralsecret'...
OK

Name:          myliteralsecret
ID:            abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Format:        generic
Project Name:  myproject
Project ID:    01234567-abcd-abcd-abcd-abcdabcd1111
Age:           66s
Created:       2023-03-07 21:06:34 +0000 UTC  

Data:    
---
TARGET: TXkgbGl0ZXJhbCBzZWNyZXQ=

请注意,此通用密钥的密钥 TARGET 的值已编码。 要将私钥数据显示为已解码,请将 --decode 选项与 secret get 命令配合使用。

使用 CLI 创建 HMAC 密文

HMAC 密文包含 access-key-idsecret_access_key 密钥,与 S3-compatible 工具和库一起使用,这些工具和库需要身份验证,但不支持 IBM Cloud® Identity and Access Management API 密钥。 请参阅 IBM Cloud Object Storage- API 密钥与 HMAC, 了解何时使用 IBM Cloud® Identity and Access Management API 密钥或 HMAC 凭据。 下面的示例创建了一个带有样本凭据的 HMAC 密文,在提示时提供。

ibmcloud ce secret create --name mysecret-hmac --format hmac --access-key-id-prompt --secret-access-key-prompt

要显示此私钥的详细信息,

ibmcloud ce secret get --name mysecret-hmac

示例输出

Getting secret 'mysecret-hmac'...
OK

Name:          mysecret-hmac
ID:            abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Format:        hmac_auth
Project Name:  myproject
Project ID:    01234567-abcd-abcd-abcd-abcdabcd1111
Age:           86s
Created:       2025-05-15T12:41:15-05:00

Data:
---
access_key_id: MWEyYjNjNGQ1ZTZmMWEyYjNjNGQ1ZTZmMWEyYjNjNGQK
secret_access_key: REDACTED

请注意,该 HMAC 密钥 access_key_id 的值已被编码,而 secret_access_key 的值已被编辑。 要将私钥数据显示为已解码,请将 --decode 选项与 secret get 命令配合使用。

使用 CLI 创建注册表私钥

注册表私钥存储用于访问容器注册表的凭证。

以下示例创建名为 mysecret-registry 的注册表私钥,以访问 us.icr.io 注册表服务器上的 IBM Cloud Container Registry 实例,并指定 usernamepassword 的凭证。

ibmcloud ce secret create --name mysecret-registry --format registry --server us.icr.io --username iamapikey --password API_KEY

要显示此私钥的详细信息,

ibmcloud ce secret get --name mysecret-registry

示例输出

Getting secret 'mysecret-registry'...
OK

Name:          mysecret-registry
ID:            abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Format:        registry
Project Name:  myproject
Project ID:    01234567-abcd-abcd-abcd-abcdabcd1111
Age:           66s
Created:       2023-03-07 20:00:45 +0000 UTC  

Data:    
---
email: ""
password: REDACTED
server: dXMuaWNyLmlv
username: aWFtYXBpa2V5

请注意,此注册表密钥的 usernameserver 密钥的值已编码,并且 password 的值已编辑。 要将私钥数据显示为已解码,请将 --decode 选项与 secret get 命令配合使用。

使用 CLI 创建 SSH 密钥

SSH 密钥存储用于使用 SSH 密钥向服务进行认证的凭证; 例如,向 Git 存储库 (例如 GitHub 或 GitLab) 进行认证。

以下示例创建名为 mysecret-ssh 的 SSH 密钥,以通过使用位于 /<filepath>/.ssh/<key_name> 的未加密 SSH 专用密钥文件 (其中 <filepath> 是本地工作站上的路径) 进行认证来访问 known_hosts 文件中包含的主机。 此命令需要名称和密钥路径,并且还允许其他可选参数,例如已知主机文件的路径。

ibmcloud ce secret create --name mysecret-ssh --format ssh --key-path ~/.ssh/<key_name> --known-hosts-path  ~/.ssh/known_hosts

要显示此私钥的详细信息,

ibmcloud ce secret get --name mysecret-ssh

示例输出

Getting secret 'mysecret-ssh'...
OK

Name:          mysecret-ssh'
ID:            abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Format:        ssh
Project Name:  myproject
Project ID:    01234567-abcd-abcd-abcd-abcdabcd1111
Age:           66s
Created:       2023-03-07 19:19:59 +0000 UTC  

Data:    
---
known_hosts: fDF8bGh0ekpiSFVXdXRxZWg1NUlrWTk4RjdOdjJZPXxsUmhZd0txVmIwd3dSV2xzcjEySFdoWURUTG89IHNzaC1yc2EgQUFBQUIzTnphQzF5YzJFQUFBQUJJd0FBQVFFQXEyQTdoUkdtZG5tOXRVRGJPOUlEU3dCSzZUYlFhK1BYWVBDUHk2cmJUclR0dzdQSGtjY0tycHAweVZocDVIZEVJY0tyNnBMbFZEQmZPTFg5UVVzeUNPVjB3emZqSUpObEdFWXNkbExKaXpIaGJuMm1VanZTQUhRcVpFVFlQODFlRnpMUU5uUEh0NEVWVlVoN1ZmREVTVTg0S2V6bUQ1UWxXcFhMbXZVMzEveU1mK1NlOHhoSFR2S1NDWklGSW1Xd29HNm1iVW9XZjluenBJb2FTakIrd2VxcVVVbXBhYWFzWFZhbDcySitVWDJCKzJSUFczUmNUMGVPelFncWxKTDNSS3JUSnZkc2pFM0pFQXZHcTNsR0hTWlh5MjhHM3NrdWEyU21WaS93NHlDRTZnYk9EcW5UV2xnNyt3QzYwNHlkR1hBOFZKaVM1YXA0M0pYaVVGRkFhUT09CnwxfEpUSjI4MCt0RkFSMGcxZ3VrZW56U3ZBYm5sQT18RDlSUWppenZlR3UxS0FnNjhNeisrUHM3RmZrPSBlY2RzYS1zaGEyLW5pc3RwMjU2IEFBQUFFMlZqWkhOaExYTm9ZVEl0Ym1semRIQXlOVFlBQUFBSWJtbHpkSEF5TlRZQUFBQkJCRW1LU0VOalFFZXpPbXhrWk15N29wS2d3RkI5bmt0NVlScllNak51RzVOODd1UmdnNkNMcmJvNXdBZFQveTZ2MG1LVjBVMncwV1oyWUIvKytUcG9ja2c9CnwxfDhIOXpNb0VORklZVDNPeVZYWlQrY25wb0srND18dVdhVThFV1FPc0ttSDMzREVVd0xnNUtiUk44PSBzc2gtZWQyNTUxOSBBQUFBQzNOemFDMWxaREkxTlRFNUFBQUFJT01xcW5rVnpybTBTZEc2VU9vcUtMc2FiZ0g1Qzlva1dpMGRoMmw5R0tKbAo=
ssh-privatekey: REDACTED

请注意,此 SSH 密钥的 known_hosts 密钥的值已编码,并且已编辑 ssh-privatekey 的值。 要将私钥数据显示为已解码,请将 --decode 选项与 secret get 命令配合使用。

使用 CLI 创建 TLS 私钥

传输层安全性 (TLS) 私钥包含已签名的 TLS 证书,包括其所有中间证书以及来自认证中心 (CA) 的相应专用密钥。 使用定制域映射时使用 TLS 私钥。

以下示例创建名为 mysecret-tls 的 TLS 私钥。 对应于定制域的证书链包含在文件 certificate.txt 中,匹配的专用密钥文件包含在文件 privatekey.txt 中。 在此示例中,这两个文件都位于本地工作站的根目录中。

ibmcloud ce secret create --name mysecret-tls  --format tls  --cert-chain-file certificate.txt --private-key-file privatekey.txt

要显示此私钥的详细信息,

ibmcloud ce secret get --name mysecret-tls

示例输出

Getting secret 'mysecret-tls'...
OK

Name:          mysecret-tls'
ID:            abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Format:        tls
Project Name:  myproject
Project ID:    01234567-abcd-abcd-abcd-abcdabcd1111
Age:           66s
Created:       2023-03-07 16:14:46 +0000 UTC  

Data:    
---
tls.crt: REDACTED
tls.key: REDACTED

使用 CLI 列出私钥

创建私钥后,使用 secret list 命令列出项目中的所有私钥。 例如

ibmcloud ce secret list

示例输出

Listing secrets...
OK

Name                          Format          Data  Age  
ce-auto-icr-private-us-south  registry        4     333d  
ce-auto-private-icr-us-south  registry        4     335d  
myregistry-seccmd             registry        4     3h31m  
mysecret-basicauth            basic_auth      2     7m37s  
mysecret-generic              generic         1     7m7s  
mysecret-genericfromfile      generic         2     2m29s  
mysecret-hmac                 hmac_auth       2     21m
mysecret-registry             registry        4     111s  
mysecret-ssh                  ssh_auth        2     42m  
mysecret-tls                  tls             2     3h47m

正在更新私钥

您可以更改现有密钥的“键/值”对。

从控制台更新秘密

您可以从控制台更新已定义的私钥的“键/值”对。

  1. 您可以通过下列其中一种方法从控制台更新已定义的私钥的“键/值”对。

    • 转至项目的“私钥和配置映射”页面,并找到要更新的私钥。 单击要更新的私钥的名称以将其打开。
    • 如果您的私钥由应用程序,作业或函数引用,请使用应用程序,作业或函数的 环境变量 选项卡上环境变量表中的链接。 这些链接可将您直接转至私钥。 或者,您还可以转至项目的“私钥和配置映射”页面,并找到要更新的私钥。 单击要更新的私钥的名称以将其打开。
  2. 单击 编辑 并对私钥进行更新。

  3. 单击 保存 以保存对私钥所作的更改。

如果更新后的私钥由作业,函数或应用程序引用,那么必须重新启动作业,函数或应用程序才能使新数据生效。

  • 应用程序-从应用程序的页面中,单击 新建修订版,然后单击 保存并部署。 或者,您可以等待应用程序缩放到零,当应用程序向上扩展时,应用程序将使用更新后的私钥。
  • 作业-从作业的页面中,单击 提交作业 以运行作业,或者可以重新运行作业。 此新作业运行使用更新后的私钥。
  • 函数-从函数的页面中,单击 测试函数。 如果浏览器已打开 URL,请刷新浏览器。

使用 CLI 更新秘密

您可以使用 CLI 更新现有密钥及其“键/值”对。

  1. 要在定义的私钥中更改“键/值”对的值,请使用 secret update 命令。 让我们更新 mysecret-registry 私钥以使用其他服务器。

    ibmcloud ce secret update --name mysecret-registry --format registry --server <new_server> --username <new_username> --password <password>
    
  2. 现在,您的私钥已更新,请使用 secret get 命令来显示有关特定私钥的详细信息。 如果需要,请使用 --decode 选项将私钥数据显示为已解码。 例如

    ibmcloud ce secret get --name mysecret-registry --decode
    

    示例输出

    Getting generic secret 'mysecret-registry'...
    OK
    
    Name:          mysecret-registry
    ID:            abcdefgh-abcd-abcd-abcd-c88e2775388e
    Project Name:  myproject
    Project ID:    01234567-abcd-abcd-abcd-abcdabcd1111
    Age:           21m
    Created:       2023-03-07 20:00:45 +0000 UTC  
    
    Data:    
    ---
    email: ""
    password: REDACTED
    server: newserver
    username: newuser
    

引用私钥

您的作业,函数或应用程序可以使用环境变量来使用存储在私钥中的信息。

从控制台引用私钥

您可以使用控制台为应用程序,作业和功能创建环境变量,这些环境变量完全引用私钥或引用私钥中的个别密钥。

在可以引用私钥之前,它必须存在。 请参阅 创建私钥(create a secret)。 对于此示例,请使用 TARGET=Sunshine 的“键/值”对创建名为 target-secret 的私钥。

  1. 要从应用程序,作业和函数引用已定义的私钥,请 创建环境变量。 环境变量可以完全引用现有密钥,也可以引用现有密钥中的单个密钥。 当您完全引用私钥 (或 configmap) 时,可以选择指定 prefix。 例如,如果从 myapp 应用程序中完全引用 mysecret 私钥并使用 mysecret_ 前缀,那么该私钥中的每个密钥都以 mysecret_ 作为前缀。

  2. 创建环境变量后,必须重新启动应用程序,作业和功能以使更改生效。 对于应用程序,保存并部署应用程序以使用您定义的环境变量更新应用程序。 对于作业,提交作业以使用定义的环境变量更新作业。

  3. 在应用程序,作业和功能状态更改为 就绪后,您可以测试应用程序或功能,也可以运行作业。 对于应用程序,单击 测试应用程序,然后在“测试应用程序”窗格中单击 发送请求。 要在网页中打开应用程序,请单击应用程序 URL。 在 myapp 示例中,由于为完全引用的 mysecret 私钥指定了前缀,因此此私钥的所有密钥都被引用为环境变量并以 mysecret_ 作为前缀。 例如,这些环境变量显示为 mysecret_secret1=mysecret1mysecret_secret2=mysecret2

要更新引用私钥的环境变量,请参阅 更新环境变量更新环境变量的注意事项

要除去引用私钥的环境变量,请参阅 删除环境变量

例如,让我们将您在控制台中定义的先前定义的 mysecret 私钥与作业一起使用,并使用环境变量完全引用此私钥。

  1. 创建并运行作业。 对于此示例,创建使用 icr.io/codeengine/codeengine 映像的 Code Engine 作业,然后运行该作业。 向此样本作业发送请求时,该作业将读取 TARGET 环境变量,该作业将打印 Hello ${TARGET} from Code Engine 并打印环境变量列表。 如果 TARGET 环境变量为空,那么将返回 Hello World from Code Engine

    从“作业”页面,

    1. 创建作业; 例如,myjob
    2. 指定 icr.io/codeengine/codeengine 作为图像引用。
    3. 单击“创建”创建任务。

    如果要用于私钥的工作负载已在 Code Engine中定义,请转至“应用程序,作业或函数”页面,然后单击应用程序,作业或函数的名称以打开组件。

  2. 创建作业时,从“作业”页面中单击作业的名称以将其打开。

  3. 更新作业以将私钥添加为环境变量。 单击 环境变量 以打开选项卡,然后单击 添加 以添加环境变量。

  4. 从“添加环境变量”页面,

    1. 要使用先前定义的私钥,请选择 引用完整私钥
    2. 从菜单中,选择所需的私钥的名称; 例如,target-secret
    3. 单击 添加 以添加环境变量。
    4. 单击 保存 以保存对作业所作的更改。
  5. 要使用引用私钥的环境变量运行作业,请单击 提交作业。 对于此示例,myjob 作业运行显示 Hello Sunshine from Code Engine 的日志和打印环境变量,包括使用环境变量引用的任何私钥值。

使用 CLI 引用私钥

要将私钥与应用程序,作业和函数配合使用,您可以设置环境变量,以通过 CLI 完全引用私钥或引用私钥中的个别密钥。

使用 CLI 引用现有私钥

以下示例引用通用私钥,这是未指定 --format 选项时的缺省私钥。 使用 --format 选项来指定私钥类别,例如 basic_authgenericsshtlsregistry

要将私钥与工作负载配合使用,请在以下命令上指定 --env-from-secret 选项。

以下示例描述了如何使用 CLI 通过作业来引用现有通用密钥。

  1. 使用 secret create 命令为此方案创建以下两个通用私钥。 缺省情况下,当未指定 --format 选项时,将创建通用私钥。

    ibmcloud ce secret create --name myliteralsecret --from-literal "TARGET=My big literal secret"
    
    ibmcloud ce secret create --name myliteralsecret2 --from-literal "TARGET=My little literal secret"
    
  2. 创建作业 并引用 myliteralsecret 私钥。 对于此示例,创建使用 icr.io/codeengine/codeengine 映像的 Code Engine 作业,然后运行该作业。 向此样本作业发送请求时,该作业将读取 TARGET 环境变量,该作业将打印 Hello ${TARGET} from Code Engine 并打印环境变量列表。 如果 TARGET 环境变量为空,那么将返回 Hello World from Code Engine

    ibmcloud ce job create --name myjob --image icr.io/codeengine/codeengine --array-indices 2-3 --env-from-secret myliteralsecret
    
  3. 运行 myjob 作业。

    ibmcloud ce jobrun submit --name myjobrun --job myjob
    
  4. 使用 jobrun get 命令可显示作业运行的详细信息,包括作业运行的实例。

    ibmcloud ce jobrun get --name myjobrun
    

    示例输出

    Getting jobrun 'myjobrun'...
    Getting instances of jobrun 'myjobrun'...
    Getting events of jobrun 'myjobrun'...
    Run 'ibmcloud ce jobrun events -n myjobrun' to get the system events of the job run instances.
    Run 'ibmcloud ce jobrun logs -f -n myjobrun' to follow the logs of the job run instances.
    OK
    
    Name:               myjobrun
    [...]
    Job Ref:                myjob
    Environment Variables:
        Type                   Name          Value
        Secret full reference  myliteralsecret
    Image:                  icr.io/codeengine/codeengine
    Resource Allocation:
        CPU:                1
        Ephemeral Storage:  4G
        Memory:             4G
    
    Runtime:
        Mode:                  task
        Array Indices:         2-3
        Array Size:            2
        JOP_ARRAY_SIZE Value:  2
        Max Execution Time:    7200
        Retry Limit:           3
    
    Status:
        Completed:          9s
        Instance Statuses:
            Succeeded:  2
        Conditions:
            Type      Status  Last Probe  Last Transition
            Pending   True    13s         13s
            Running   True    9s          9s
            Complete  True    9s          9s
    
    Events:
        Type    Reason     Age                Source                Messages
        Normal  Updated    10s (x4 over 14s)  batch-job-controller  Updated JobRun "myjobrun"
        Normal  Completed  10s                batch-job-controller  JobRun completed successfully
    
    Instances:
        Name          Running  Status     Restarts  Age
        myjobrun-2-0  0/1      Succeeded  0         14s
        myjobrun-3-0  0/1      Succeeded  0         14s
    
  5. 显示 myjobrun 作业运行的日志。 您可以显示作业运行的所有实例的日志,也可以显示作业运行的特定实例的日志。 这次,显示作业运行的所有实例的日志。 日志将显示 Hello my big literal secret!,这是通过将环境变量与私钥配合使用来指定的。 请注意,对于使用 icr.io/codeengine/codeengine 映像定义的此作业,作业运行的输出将打印环境变量,包括使用环境变量引用的任何私钥值。

    ibmcloud ce jobrun logs --jobrun myjobrun
    

    示例输出

    Getting logs for all instances of job run 'myjobrun'...
    Getting jobrun 'myjobrun'...
    Getting instances of jobrun 'myjobrun'...
    OK
    
    myjobrun-2-0/myjob:
    Hello from helloworld! I'm a batch job! Index: 2
    
    Hello My big literal secret from:
    . ___  __  ____  ____
    ./ __)/  \(    \(  __)
    ( (__(  O )) D ( ) _)
    .\___)\__/(____/(____)
    .____  __ _   ___  __  __ _  ____
    (  __)(  ( \ / __)(  )(  ( \(  __)
    .) _) /    /( (_ \ )( /    / ) _)
    (____)\_)__) \___/(__)\_)__)(____)
    
    Some Env Vars:
    --------------
    HOME=/root
    HOSTNAME=myjobrun-2-0
    JOB_INDEX=2
    KUBERNETES_PORT=tcp://172.21.0.1:443
    KUBERNETES_PORT_443_TCP=tcp://172.21.0.1:443
    KUBERNETES_PORT_443_TCP_ADDR=172.21.0.1
    KUBERNETES_PORT_443_TCP_PORT=443
    KUBERNETES_PORT_443_TCP_PROTO=tcp
    KUBERNETES_SERVICE_HOST=172.21.0.1
    KUBERNETES_SERVICE_PORT=443
    KUBERNETES_SERVICE_PORT_HTTPS=443
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    PWD=/
    SHLVL=1
    TARGET=My big literal secret
    
    myjobrun-3-0/myjob:
    Hello from helloworld! I'm a batch job! Index: 3
    
    Hello My big literal secret from:
    . ___  __  ____  ____
    ./ __)/  \(    \(  __)
    ( (__(  O )) D ( ) _)
    .\___)\__/(____/(____)
    .____  __ _   ___  __  __ _  ____
    (  __)(  ( \ / __)(  )(  ( \(  __)
    .) _) /    /( (_ \ )( /    / ) _)
    (____)\_)__) \___/(__)\_)__)(____)
    
    Some Env Vars:
    --------------
    HOME=/root
    HOSTNAME=myjobrun-3-0
    JOB_INDEX=3
    KUBERNETES_PORT=tcp://172.21.0.1:443
    KUBERNETES_PORT_443_TCP=tcp://172.21.0.1:443
    KUBERNETES_PORT_443_TCP_ADDR=172.21.0.1
    KUBERNETES_PORT_443_TCP_PORT=443
    KUBERNETES_PORT_443_TCP_PROTO=tcp
    KUBERNETES_SERVICE_HOST=172.21.0.1
    KUBERNETES_SERVICE_PORT=443
    KUBERNETES_SERVICE_PORT_HTTPS=443
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    PWD=/
    SHLVL=1
    TARGET=My big literal secret
    
  6. 重新提交作业运行,并指定对此作业运行使用 myliteralsecret2 私钥。

    ibmcloud ce jobrun resubmit  --jobrun myjobrun  --name myjobrunresubmit  --env-from-secret myliteralsecret2
    

    使用完全引用私钥的环境变量更新作业,应用程序或函数以完全引用其他私钥时,完全引用将按设置顺序覆盖其他完全引用 (最后引用的集合将覆盖第一个集合)。

  7. 使用 jobrun get 命令可显示作业运行的详细信息,包括作业运行的实例。 请注意,作业运行同时引用 myliteralsecretmyliteralsecret2 私钥。

    ibmcloud ce jobrun get --name myjobrunresubmit
    

    示例输出

    Getting jobrun 'myjobrunresubmit'...
    Getting instances of jobrun 'myjobrunresubmit'...
    Getting events of jobrun 'myjobrunresubmit'...
    [...]
    
    Name:          myjobrunresubmit
    ID:            79f01367-932b-4a76-be18-b1e68790a85b
    Project Name:  myproject
    Project ID:    841f0f38-420d-4388-b5d8-f230657d7dc6
    Age:           14s
    Created:       2021-06-15T21:15:37-04:00
    
    Job Ref:                myjob
        Environment Variables:
        Type                   Name              Value
        Secret full reference  myliteralsecret
        Secret full reference  myliteralsecret2
    Image:                  icr.io/codeengine/codeengine
        Resource Allocation:
        CPU:                1
        Ephemeral Storage:  4G
        Memory:             4G
    
    Runtime:
        Mode:                  task
        Array Indices:         2-3
        Array Size:            2
        JOP_ARRAY_SIZE Value:  2
        Max Execution Time:    7200
        Retry Limit:           3
    
    Status:
        Completed:          11s
        Instance Statuses:
            Succeeded:  2
        Conditions:
            Type      Status  Last Probe  Last Transition
            Pending   True    14s         14s
            Running   True    12s         12s
            Complete  True    11s         11s
    
    Events:
        Type    Reason     Age                Source                Messages
        Normal  Updated    13s (x4 over 16s)  batch-job-controller  Updated JobRun "myjobrunresubmit"
        Normal  Completed  13s                batch-job-controller  JobRun completed successfully
    
    Instances:
        Name                  Running  Status     Restarts  Age
        myjobrunresubmit-2-0  0/1      Succeeded  0         16s
        myjobrunresubmit-3-0  0/1      Succeeded  0         16s
    
  8. 显示 myjobrunresubmit 作业运行实例的作业运行日志。 这次,显示 myjobrunresubmit-3-0 实例的日志。 日志显示 Hello My little literal secret!,这是在 myliteralsecret2 私钥中指定的值。 使用 jobrun get 命令可显示作业运行的详细信息,包括作业运行的运行实例。

    ibmcloud ce jobrun logs --instance myjobrunresubmit-3-0
    

    示例输出

    Getting logs for job run instance 'myjobrunresubmit-3-0'...
    OK
    
    myjobrunresubmit-3-0/myjob:
    Hello from helloworld! I'm a batch job! Index: 3
    
    Hello My little literal secret from:
    . ___  __  ____  ____
    ./ __)/  \(    \(  __)
    ( (__(  O )) D ( ) _)
    .\___)\__/(____/(____)
    .____  __ _   ___  __  __ _  ____
    (  __)(  ( \ / __)(  )(  ( \(  __)
    .) _) /    /( (_ \ )( /    / ) _)
    (____)\_)__) \___/(__)\_)__)(____)
    
    Some Env Vars:
    --------------
    HOME=/root
    HOSTNAME=myjobrunresubmit-3-0
    JOB_INDEX=3
    KUBERNETES_PORT=tcp://172.21.0.1:443
    KUBERNETES_PORT_443_TCP=tcp://172.21.0.1:443
    KUBERNETES_PORT_443_TCP_ADDR=172.21.0.1
    KUBERNETES_PORT_443_TCP_PORT=443
    KUBERNETES_PORT_443_TCP_PROTO=tcp
    KUBERNETES_SERVICE_HOST=172.21.0.1
    KUBERNETES_SERVICE_PORT=443
    KUBERNETES_SERVICE_PORT_HTTPS=443
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    PWD=/
    SHLVL=1
    TARGET=My little literal secret
    
  9. 要在私钥中更改“键/值”对的值,请使用 secret update 命令。 让我们更新 myliteralsecret 私钥以将 TARGET 密钥的值从 My big literal secret 更改为 My new big literal secret

    ibmcloud ce secret update --name myliteralsecret --from-literal "TARGET=My new big literal secret"
    
  10. 要使新数据生效,请再次运行作业。 重新提交作业运行,并指定对此作业运行使用 myliteralsecret 密钥。

ibmcloud ce jobrun resubmit  --jobrun myjobrun  --name myjobrunresubmit2 --env-from-secret myliteralsecret
  1. 显示 myjobrunresubmit2 作业运行的日志。 此时,作业日志将显示 Hello My new big literal secret!,这是已更新的 myliteralsecret 私钥中的值。 可以使用 jobrun get 命令来显示作业运行的详细信息,包括作业运行的运行实例。 显示作业运行的任何正在运行的实例的日志。
ibmcloud ce jobrun logs --instance myjobrunresubmit2-2-0

示例输出

Getting logs for job run instance 'myjobrunresubmit2-2-0'...
OK

myjobrunresubmit2-2-0/myjob:
Hello from helloworld! I'm a batch job! Index: 2

Hello My new big literal secret from:
. ___  __  ____  ____
./ __)/  \(    \(  __)
( (__(  O )) D ( ) _)
.\___)\__/(____/(____)
.____  __ _   ___  __  __ _  ____
(  __)(  ( \ / __)(  )(  ( \(  __)
.) _) /    /( (_ \ )( /    / ) _)
(____)\_)__) \___/(__)\_)__)(____)

Some Env Vars:
--------------
HOME=/root
HOSTNAME=myjobrunresubmit2-2-0
JOB_INDEX=2
KUBERNETES_PORT=tcp://172.21.0.1:443
KUBERNETES_PORT_443_TCP=tcp://172.21.0.1:443
KUBERNETES_PORT_443_TCP_ADDR=172.21.0.1
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_SERVICE_HOST=172.21.0.1
KUBERNETES_SERVICE_PORT=443
KUBERNETES_SERVICE_PORT_HTTPS=443
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/
SHLVL=1
TARGET=My new big literal secret

总之,您已完成基本场景,通过引用现有完整私钥并更新私钥中的密钥来演示如何将私钥与作业配合使用。

引用尚未使用 CLI 定义的私钥

如果某个私钥在被引用之前不存在,那么应用程序将不会成功部署,并且在创建所引用的私钥之前,作业或功能将不会成功运行。

如果您正在使用应用程序,作业或函数,并且尚未定义所引用的私钥,请使用 --force 选项来避免验证所引用的私钥是否存在。 --force 选项可以与以下命令配合使用。

--force 选项与这些命令配合使用时,用于创建,更新或运行应用程序,作业或功能的操作将完成。 但是,在引用的私钥存在之前,应用程序,作业或函数将不会成功运行。 如果将 --no-wait 选项以及 --force 选项添加到命令中,那么系统将完成操作,并且不会等待应用程序,作业或功能成功运行。

以下示例描述如何使用 CLI 来引用尚未使用作业定义的私钥。

  1. 创建作业。 对于此示例,创建使用 icr.io/codeengine/codeengine 映像的 Code Engine 作业,然后运行该作业。 向此样本作业发送请求时,该作业将读取 TARGET 环境变量,该作业将打印 Hello ${TARGET} from Code Engine 并打印环境变量列表。 如果 TARGET 环境变量为空,那么将返回 Hello World from Code Engine

    ibmcloud ce job create --name myjob --image icr.io/codeengine/codeengine
    
  2. 使用 jobrun submit 命令来运行 myjob 作业。 请注意,mynewliteralsecret 不存在。 通过将 --no-wait 选项与 jobrun submit 命令配合使用,将提交作业运行,并且不会等待此作业运行的实例完成。

    ibmcloud ce jobrun submit --name myjobrun1 --job myjob --env-from-secret mynewliteralsecret --force --no-wait
    
  3. 使用 jobrun get 命令可显示作业运行的详细信息,包括环境变量信息。 请注意,作业运行处于 pending 状态。

    ibmcloud ce jobrun get --name myjobrun1
    

    示例输出

    Getting jobrun 'myjobrun1'...
    Getting instances of jobrun 'myjobrun1'...
    Getting events of jobrun 'myjobrun1'...
    [...]
    
    Name:          myjobrun1
    [...]
    
    Job Ref:                myjob
    Environment Variables:
        Type                   Name                Value
        Secret full reference  mynewliteralsecret
    Image:                  icr.io/codeengine/codeengine
    Resource Allocation:
        CPU:                1
        Ephemeral Storage:  400M
        Memory:             4G
    
    Runtime:
        Mode:                  task
        Array Indices:         0
        Array Size:            1
        JOP_ARRAY_SIZE Value:  1
        Max Execution Time:    7200
        Retry Limit:           3
    
    Status:
        Instance Statuses:
            Pending:  1
        Conditions:
            Type     Status  Last Probe  Last Transition
            Pending  True    100s        100s
    
    Events:
        Type    Reason   Age                   Source                Messages
        Normal  Updated  108s (x5 over 2m29s)  batch-job-controller  Updated JobRun "myjobrun1"
    
    Instances:
        Name           Running  Status   Restarts  Age
        myjobrun1-0-0  0/1      Pending  0         2m29s
    
  4. 创建私钥。

    ibmcloud ce secret create --name mynewliteralsecret --from-literal "TARGET=Fun secret"
    
  5. 再次运行 myjobrun1 作业。

    ibmcloud ce jobrun resubmit --jobrun myjobrun1 --name myjobrunresubmit1
    

    运行 ibmcloud ce jobrun get -n myjobrunresubmit1 命令以检查此作业运行的状态。

  6. 显示 myjobrunresubmit1 作业运行的日志。 日志显示 Hello Fun secret from Code Engine,这将确认作业运行引用了 myliteralsecret 私钥。

    ibmcloud ce jobrun logs --jobrun myjobrunresubmit1
    

    示例输出

    Getting logs for all instances of job run 'myjobrunresubmit1'...
    Getting jobrun 'myjobrunresubmit1'...
    Getting instances of jobrun 'myjobrunresubmit1'...
    OK
    
    myjobrunresubmit1-0-0/myjob:
    Hello from helloworld! I'm a batch job! Index: 0
    
    Hello Fun secret from:
    . ___  __  ____  ____
    ./ __)/  \(    \(  __)
    ( (__(  O )) D ( ) _)
    .\___)\__/(____/(____)
    .____  __ _   ___  __  __ _  ____
    (  __)(  ( \ / __)(  )(  ( \(  __)
    .) _) /    /( (_ \ )( /    / ) _)
    (____)\_)__) \___/(__)\_)__)(____)
    
    Some Env Vars:
    --------------
    HOME=/root
    HOSTNAME=myjobrunresubmit1-0-0
    JOB_INDEX=0
    KUBERNETES_PORT=tcp://172.21.0.1:443
    KUBERNETES_PORT_443_TCP=tcp://172.21.0.1:443
    KUBERNETES_PORT_443_TCP_ADDR=172.21.0.1
    KUBERNETES_PORT_443_TCP_PORT=443
    KUBERNETES_PORT_443_TCP_PROTO=tcp
    KUBERNETES_SERVICE_HOST=172.21.0.1
    KUBERNETES_SERVICE_PORT=443
    KUBERNETES_SERVICE_PORT_HTTPS=443
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    PWD=/
    SHLVL=1
    TARGET=Fun secret
    

有关将完整私钥和 configmap 作为环境变量引用,覆盖引用以及在 CLI 中除去引用的更多详细方案,请参阅 引用私钥和 configmap

删除私钥

当您不再需要某个秘密时,可以将其删除。

从控制台删除私钥

  1. 要从控制台中删除私钥,
    1. Code Engine "项目" 页面转至“私钥和配置映射”页面。
    2. 点击要删除的秘密,打开其页面。
    3. 从特定私钥的页面中,单击 操作> 删除私钥
  2. 要从控制台中删除特定密钥的“键/值”对,
    1. Code Engine "项目" 页面转至“私钥和配置映射”页面。
    2. 点击要更改的秘密,打开其页面。
    3. 从特定私钥的页面中,删除要除去的键/值对。

您还可以删除引用私钥和 ConfigMap 的已定义环境变量。 要从应用程序,作业或函数的 环境变量 选项卡中删除定义的环境变量,请删除要删除的环境变量。 删除定义的环境变量后,请确保单击 保存 以保存对应用程序,作业或功能所作的更改。 有关更多信息,请参阅 删除环境变量

使用 CLI 删除私钥

要使用 CLI 删除私钥,请使用 secret delete 命令; 例如,

ibmcloud ce secret delete --name myliteralsecret -f

示例输出

Deleting secret myliteralsecret...
OK

您还可以从 CLI 删除引用私钥和 configmap 的环境变量