使用私钥
了解如何使用 Code Engine中的私钥。 在 Code Engine中,可以将信息作为键/值对存储在可由函数,作业或应用程序使用环境变量使用的私钥中。
什么是秘密,我为什么会使用它们?
在 Code Engine中,私钥 (和 configmap) 是键/值对的集合。 当映射到环境变量时,将设置 NAME=VALUE
关系,以使环境变量的名称对应于这些映射中每个条目的“键”,并且环境变量的值是该键的“值”。
私钥提供了一种方法,用于将敏感配置信息 (例如密码或 SSH 密钥) 包含到部署中。 通过引用私钥中的值,可以将敏感信息与部署分离,以保持应用程序,功能或作业可移植性。 有权访问您的项目的任何人也可以查看您的私钥; 请确保您知道可以与这些用户共享私钥信息。 私钥包含键/值对中的信息。
由于私钥和配置映射是类似的实体 (除了私钥更安全地存储),因此您与私钥和配置映射进行交互和使用的方式也类似。 要了解有关 configmap 的更多信息,请参阅 使用 configmap。
我可以在 Code Engine中创建哪种私钥?
Code Engine 支持各种私钥,并提供用于创建和使用私钥的选项。
下表概述了 Code Engine中受支持的私钥。
名称 | 描述 |
---|---|
基本认证 | 包含 username 和 password 密钥的私钥。访问需要基本 HTTP 身份验证的服务时,请使用基本身份验证机密。 |
通用 | 用于存储简单键/值对和 Code Engine 的私钥不会假定已定义的键/值对,也不会假定私钥的预期用途。 如果要定义自己的“键/值”对以访问服务,请使用通用密钥。 |
HMAC | 包含 access-key-id 和 secret_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 控制台创建可由函数,作业或应用程序用作环境变量的通用私钥。
开始之前,请 创建项目。
- 在项目处于 活动 状态后,在 Code Engine "项目" 页面上单击项目的名称。
- 在“组件”页面中,单击 私钥和配置映射。
- 从“私钥和配置映射”页面中,单击 创建 以创建私钥。
- 从“创建私钥或配置映射”页面,完成以下步骤:
- 选择 通用密钥,然后单击 下一步。
- 提供名称; 例如,
mysecret-generic
。 - 单击添加键值对。 为此私钥指定一个或多个“键/值”对。 例如,将一个键指定为值为
mysecret1
的secret1
,并将另一个键指定为值为target-secret
的secret2
。 您为密钥选择的名称不需要与环境变量的名称相同。 请注意,键的值是隐藏的,但如果需要,可以查看该值。 - 单击“创建”创建密文。
现在,您的私钥是从控制台创建的,请转至“私钥和配置映射”页面以查看已定义的私钥和配置映射的列表。 您可以应用过滤器来定制列表以满足您的需求。
从控制台创建 HMAC 密文
了解如何从 Code Engine 控制台创建 HMAC 秘密,函数、工作或应用程序可将其作为环境变量使用。 它们与需要验证但不支持 IBM Cloud® Identity and Access Management API 密钥的 S3-compatible 工具和库一起使用。
开始之前,请 创建项目。
- 在项目处于 活动 状态后,在 Code Engine "项目" 页面上单击项目的名称。
- 在“组件”页面中,单击 私钥和配置映射。
- 从“私钥和配置映射”页面中,单击 创建 以创建私钥。
- 从“创建私钥或配置映射”页面,完成以下步骤:
- 选择 HMAC 秘密,然后单击下一步。
- 提供名称; 例如,
mysecret-hmac
。 - 指定访问密钥 ID。
- 指定秘密访问密钥。 请注意,键的值是隐藏的,但如果需要,可以查看该值。
- 单击“创建”创建密文。
现在,您的私钥是从控制台创建的,请转至“私钥和配置映射”页面以查看已定义的私钥和配置映射的列表。 您可以应用过滤器来定制列表以满足您的需求。
有关 HMAC 秘密的更多信息,请参阅 IBM Cloud Object Storage- API 密钥与 HMAC。
从控制台创建注册表私钥
了解如何从 Code Engine 控制台创建注册表私钥,这些私钥可供函数,作业,应用程序或构建使用,以用于访问拉取或推送容器映像。
开始之前,请 创建项目。
- 在项目处于 活动 状态后,在 Code Engine "项目" 页面上单击项目的名称。
- 在“组件”页面中,单击 私钥和配置映射。
- 从“私钥和配置映射”页面中,单击 创建 以创建私钥。
- 从“创建私钥或配置映射”页面,完成以下步骤:
- 选择 注册表私钥,然后单击 下一步。
- 提供名称; 例如,
mysecret-registry
。 - 指定此私钥的目标注册表,例如 IBM Cloud Container Registry 或 Docker Hub。
- 指定注册表的位置。
- 指定用户名。 如果此私钥适用于 IBM Cloud Container Registry,那么用户名为
iamapikey
。 如果此私钥适用于 Docker Hub,那么它是您的 Docker 标识。 - 输入用户名的凭证。 对于 IBM Cloud Container Registry,请使用 IAM API 密钥。 对于 Docker Hub,可以使用 Docker Hub 密码或 访问令牌。 对于其他目标注册表,请指定用户名的密码或 API 密钥。
- 单击“创建”创建密文。
现在,您的私钥是从控制台创建的,请转至“私钥和配置映射”页面以查看已定义的私钥和配置映射的列表。 您可以应用过滤器来定制列表以满足您的需求。
有关使用映像注册表的更多信息,请参阅 访问容器注册表。
从控制台创建 SSH 私钥
了解如何从控制台创建 SSH 私钥,构建可以使用该私钥来访问专用源代码存储库。 SSH 私钥存储用于使用 SSH 密钥向服务进行认证的凭证,例如,向 Git 存储库 (例如,GitHub 或 GitLab) 进行认证。
开始之前,请 创建项目。
- 在项目处于 活动 状态后,在 Code Engine "项目" 页面上单击项目的名称。
- 在“组件”页面中,单击 私钥和配置映射。
- 从“私钥和配置映射”页面中,单击 创建 以创建私钥。
- 从“创建私钥或配置映射”页面,完成以下步骤:
- 选择 SSH 密钥,然后单击 下一步。
- 提供名称; 例如,
mysecret-ssh
。 - 为此私钥添加 SSH 专用密钥。
- 单击“创建”创建密文。
现在,您的私钥是从控制台创建的,请转至“私钥和配置映射”页面以查看已定义的私钥和配置映射的列表。 您可以应用过滤器来定制列表以满足您的需求。
使用专用代码存储库 (例如 Git 存储库) 时,请使用 SSH 密钥。 请参阅 访问专用代码存储库。
从控制台创建 TLS 私钥
了解如何在 Code Engine中使用定制域映射时从控制台创建可供应用程序使用的 TLS 私钥。 传输层安全性 (TLS) 私钥包含已签名的 TLS 证书,包括其所有中间证书以及来自认证中心 (CA) 的相应专用密钥。
开始之前,请 创建项目。
- 在项目处于 活动 状态后,在 Code Engine "项目" 页面上单击项目的名称。
- 在“组件”页面中,单击 私钥和配置映射。
- 从“私钥和配置映射”页面中,单击 创建 以创建私钥。
- 从“创建私钥或配置映射”页面,完成以下步骤:
- 选择 TLS 私钥,然后单击 下一步。
- 提供名称; 例如,
mysecret-tls
。 - 添加证书链及其专用密钥。 请注意,您可以将证书串联起来,每份证书都以新行开头。 您可以在文件中提供此信息。
- 单击“创建”创建密文。
现在,您的私钥是从控制台创建的,请转至“私钥和配置映射”页面以查看已定义的私钥和配置映射的列表。 您可以应用过滤器来定制列表以满足您的需求。
在 Code Engine中使用 定制域映射 时,请使用 TLS 私钥。
使用 CLI 创建秘密
了解如何使用 Code Engine CLI 创建可由应用程序,作业或功能作为环境变量使用的私钥。
准备工作
- 设置 Code Engine CLI 环境。
- 创建和使用项目。
从 CLI 版本 1.42.0 开始,在 CLI 中定义和处理秘密将统一到 secret
命令组。 请参阅 ibmcloud ce secret
命令。 使用 --format
选项指定秘密类别,如
basic_auth
, generic
, hmac
, ssh
, tls
或 registry
。 --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=mysec1
,sec2=mysec2
和sec3=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-id
和 secret_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 实例,并指定 username
和 password
的凭证。
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
请注意,此注册表密钥的 username
和 server
密钥的值已编码,并且 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
正在更新私钥
您可以更改现有密钥的“键/值”对。
从控制台更新秘密
您可以从控制台更新已定义的私钥的“键/值”对。
-
您可以通过下列其中一种方法从控制台更新已定义的私钥的“键/值”对。
- 转至项目的“私钥和配置映射”页面,并找到要更新的私钥。 单击要更新的私钥的名称以将其打开。
- 如果您的私钥由应用程序,作业或函数引用,请使用应用程序,作业或函数的 环境变量 选项卡上环境变量表中的链接。 这些链接可将您直接转至私钥。 或者,您还可以转至项目的“私钥和配置映射”页面,并找到要更新的私钥。 单击要更新的私钥的名称以将其打开。
-
单击 编辑 并对私钥进行更新。
-
单击 保存 以保存对私钥所作的更改。
如果更新后的私钥由作业,函数或应用程序引用,那么必须重新启动作业,函数或应用程序才能使新数据生效。
- 应用程序-从应用程序的页面中,单击 新建修订版,然后单击 保存并部署。 或者,您可以等待应用程序缩放到零,当应用程序向上扩展时,应用程序将使用更新后的私钥。
- 作业-从作业的页面中,单击 提交作业 以运行作业,或者可以重新运行作业。 此新作业运行使用更新后的私钥。
- 函数-从函数的页面中,单击 测试函数。 如果浏览器已打开 URL,请刷新浏览器。
使用 CLI 更新秘密
您可以使用 CLI 更新现有密钥及其“键/值”对。
-
要在定义的私钥中更改“键/值”对的值,请使用
secret update
命令。 让我们更新mysecret-registry
私钥以使用其他服务器。ibmcloud ce secret update --name mysecret-registry --format registry --server <new_server> --username <new_username> --password <password>
-
现在,您的私钥已更新,请使用
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
的私钥。
-
要从应用程序,作业和函数引用已定义的私钥,请 创建环境变量。 环境变量可以完全引用现有密钥,也可以引用现有密钥中的单个密钥。 当您完全引用私钥 (或 configmap) 时,可以选择指定
prefix
。 例如,如果从myapp
应用程序中完全引用mysecret
私钥并使用mysecret_
前缀,那么该私钥中的每个密钥都以mysecret_
作为前缀。 -
创建环境变量后,必须重新启动应用程序,作业和功能以使更改生效。 对于应用程序,保存并部署应用程序以使用您定义的环境变量更新应用程序。 对于作业,提交作业以使用定义的环境变量更新作业。
-
在应用程序,作业和功能状态更改为 就绪后,您可以测试应用程序或功能,也可以运行作业。 对于应用程序,单击 测试应用程序,然后在“测试应用程序”窗格中单击 发送请求。 要在网页中打开应用程序,请单击应用程序 URL。 在
myapp
示例中,由于为完全引用的mysecret
私钥指定了前缀,因此此私钥的所有密钥都被引用为环境变量并以mysecret_
作为前缀。 例如,这些环境变量显示为mysecret_secret1=mysecret1
和mysecret_secret2=mysecret2
。
要更新引用私钥的环境变量,请参阅 更新环境变量 和 更新环境变量的注意事项。
要除去引用私钥的环境变量,请参阅 删除环境变量。
例如,让我们将您在控制台中定义的先前定义的 mysecret
私钥与作业一起使用,并使用环境变量完全引用此私钥。
-
创建并运行作业。 对于此示例,创建使用
icr.io/codeengine/codeengine
映像的 Code Engine 作业,然后运行该作业。 向此样本作业发送请求时,该作业将读取TARGET
环境变量,该作业将打印Hello ${TARGET} from Code Engine
并打印环境变量列表。 如果TARGET
环境变量为空,那么将返回Hello World from Code Engine
。从“作业”页面,
- 创建作业; 例如,
myjob
。 - 指定
icr.io/codeengine/codeengine
作为图像引用。 - 单击“创建”创建任务。
如果要用于私钥的工作负载已在 Code Engine中定义,请转至“应用程序,作业或函数”页面,然后单击应用程序,作业或函数的名称以打开组件。
- 创建作业; 例如,
-
创建作业时,从“作业”页面中单击作业的名称以将其打开。
-
更新作业以将私钥添加为环境变量。 单击 环境变量 以打开选项卡,然后单击 添加 以添加环境变量。
-
从“添加环境变量”页面,
- 要使用先前定义的私钥,请选择 引用完整私钥。
- 从菜单中,选择所需的私钥的名称; 例如,
target-secret
。 - 单击 添加 以添加环境变量。
- 单击 保存 以保存对作业所作的更改。
-
要使用引用私钥的环境变量运行作业,请单击 提交作业。 对于此示例,
myjob
作业运行显示Hello Sunshine from Code Engine
的日志和打印环境变量,包括使用环境变量引用的任何私钥值。
使用 CLI 引用私钥
要将私钥与应用程序,作业和函数配合使用,您可以设置环境变量,以通过 CLI 完全引用私钥或引用私钥中的个别密钥。
使用 CLI 引用现有私钥
以下示例引用通用私钥,这是未指定 --format
选项时的缺省私钥。 使用 --format
选项来指定私钥类别,例如 basic_auth
,generic
,ssh
,tls
或 registry
。
要将私钥与工作负载配合使用,请在以下命令上指定 --env-from-secret
选项。
以下示例描述了如何使用 CLI 通过作业来引用现有通用密钥。
-
使用
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"
-
创建作业 并引用
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
-
运行
myjob
作业。ibmcloud ce jobrun submit --name myjobrun --job myjob
-
使用
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
-
显示
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
-
重新提交作业运行,并指定对此作业运行使用
myliteralsecret2
私钥。ibmcloud ce jobrun resubmit --jobrun myjobrun --name myjobrunresubmit --env-from-secret myliteralsecret2
使用完全引用私钥的环境变量更新作业,应用程序或函数以完全引用其他私钥时,完全引用将按设置顺序覆盖其他完全引用 (最后引用的集合将覆盖第一个集合)。
-
使用
jobrun get
命令可显示作业运行的详细信息,包括作业运行的实例。 请注意,作业运行同时引用myliteralsecret
和myliteralsecret2
私钥。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
-
显示
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
-
要在私钥中更改“键/值”对的值,请使用
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"
-
要使新数据生效,请再次运行作业。 重新提交作业运行,并指定对此作业运行使用
myliteralsecret
密钥。
ibmcloud ce jobrun resubmit --jobrun myjobrun --name myjobrunresubmit2 --env-from-secret myliteralsecret
- 显示
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 来引用尚未使用作业定义的私钥。
-
创建作业。 对于此示例,创建使用
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
-
使用
jobrun submit
命令来运行myjob
作业。 请注意,mynewliteralsecret
不存在。 通过将--no-wait
选项与jobrun submit
命令配合使用,将提交作业运行,并且不会等待此作业运行的实例完成。ibmcloud ce jobrun submit --name myjobrun1 --job myjob --env-from-secret mynewliteralsecret --force --no-wait
-
使用
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
-
创建私钥。
ibmcloud ce secret create --name mynewliteralsecret --from-literal "TARGET=Fun secret"
-
再次运行
myjobrun1
作业。ibmcloud ce jobrun resubmit --jobrun myjobrun1 --name myjobrunresubmit1
运行
ibmcloud ce jobrun get -n myjobrunresubmit1
命令以检查此作业运行的状态。 -
显示
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。
删除私钥
当您不再需要某个秘密时,可以将其删除。
从控制台删除私钥
- 要从控制台中删除私钥,
- 从 Code Engine "项目" 页面转至“私钥和配置映射”页面。
- 点击要删除的秘密,打开其页面。
- 从特定私钥的页面中,单击 操作> 删除私钥。
- 要从控制台中删除特定密钥的“键/值”对,
- 从 Code Engine "项目" 页面转至“私钥和配置映射”页面。
- 点击要更改的秘密,打开其页面。
- 从特定私钥的页面中,删除要除去的键/值对。
您还可以删除引用私钥和 ConfigMap 的已定义环境变量。 要从应用程序,作业或函数的 环境变量 选项卡中删除定义的环境变量,请删除要删除的环境变量。 删除定义的环境变量后,请确保单击 保存 以保存对应用程序,作业或功能所作的更改。 有关更多信息,请参阅 删除环境变量。
使用 CLI 删除私钥
要使用 CLI 删除私钥,请使用 secret delete
命令; 例如,
ibmcloud ce secret delete --name myliteralsecret -f
示例输出
Deleting secret myliteralsecret...
OK
您还可以从 CLI 删除引用私钥和 configmap 的环境变量。