在 Kubernetes Service 集群中设置 Secrets Manager
将 IBM Cloud Secrets Manager 与您的 IBM Cloud Kubernetes Service 集群集成后,您可以集中管理Ingress子域证书和其他密钥。
关于 Secrets Manager
通过 Secrets Manager,您可以使用单个服务来管理私钥,并控制有权访问私钥的人员。 不会在集群中自动供应 Secrets Manager 实例。 但是,可以跨多个集群使用单个 Secrets Manager 实例,并且单个集群可以具有多个实例。
我可以通过 Secrets Manager获得哪些功能?
借助 Secrets Manager,您可以:
- 创建包含 Ingress TLS 证书的托管型 Kubernetes 密钥。
- 使用您拥有的任何 Secrets Manager 实例的 CRN 来创建任何类型的 Kubernetes 私钥。
- 定期自动更新集群中的私钥。
- 从 IBM Cloud 控制台跟踪证书的到期日期。
- 通过为已核准的用户创建私钥组来控制有权访问私钥的人员。
请注意,若要自动更新密钥,您必须在集群中注册至少一个 Secrets Manager 实例。 如需了解更多信息,请参阅《 将您的 Secrets Manager 实例注册到集群 》。
Secrets Manager 常见问题解答
使用 Secrets Manager 时,请注意以下几点。
- Secrets Manager支持哪些类型的私钥?
- Secrets Manager 支持 IAM 凭证,密钥值私钥,用户凭证,任意私钥和 Kubernetes 私钥。 对于 Kubernetes 密钥,Secrets Manager 同时支持 TLS 和非 TLS (不透明)密钥类型。 使用 TLS secrets 时,您可以指定一个证书 CRN。 对于非 TLS 密钥,您可以指定多个字段来提取非证书密钥。 如果在创建密钥时未指定密钥类型,则默认应用 TLS。 有关受支持私钥的更多信息,请参阅 使用不同类型的私钥。
- 是否会自动更新存储在已注册的 Secrets Manager 实例中的私钥?
- 是。 如果您向集群注册了 Secrets Manager 实例,那么集群上的私钥将每天使用 Secrets Manager 中的值自动更新一次。 这些更新是使用相应 CRN 中的私钥值进行的。
- 如果我未创建和注册 Secrets Manager 实例,是否会自动更新私钥?
- 如果未向集群注册 Secrets Manager 实例,那么缺省 Ingress 私钥将继续每 90 天自动更新一次并应用于集群。 但是,不会自动更新您创建的任何用于 引用 缺省 Ingress 私钥的私钥。
- 示例方案: 您在
default名称空间中具有缺省 Ingress 证书。 运行ibmcloud ks ingress secret create命令并引用缺省 Ingress 证书的 CRN 以在istio-system名称空间中镜像该证书。 没有Secrets Manager实例中,默认的 Ingress 证书default命名空间自动更新。 但是,您有责任定期更新istio-system命名空间与kubectl命令或其他旋转方法。 - 我创建了引用缺省 Ingress 证书的私钥,但尚未创建和注册 Secrets Manager 实例。 如何管理我的私钥?
- 如果未注册 Secrets Manager 实例,那么 IBM Cloud Kubernetes Service 将仅自动更新缺省 Ingress 私钥。 您负责使用
kubectl命令或其他旋转方法来管理任何其他私钥。 如果您有任何引用缺省 Ingress 证书的私钥,那么应使用ibmcloud ks ingress secret rm将其除去。 ibmcloud ks ingress instanceCLI 命令与ibmcloud ks ingress secretCLI 命令之间有何区别?- 有两组 CLI 命令直接使用 IBM Cloud Kubernetes Service中的 Secrets Manager 实例:
ibmcloud ks ingress secret命令和ibmcloud ks ingress instance命令。ibmcloud ks ingress instance命令用于管理 Secrets Manager 实例。ibmcloud ks ingress secret命令用于管理存储在 Secrets Manager 实例或直接写入集群的私钥中的 Ingress 私钥。
设置 Secrets Manager 实例
请按照以下步骤在您的集群中配置 Secrets Manager。
启用服务到服务通信
将 Secrets Manager 与您的 IBM Cloud Kubernetes Service 集群集成需要进行服务间通信授权。 请执行以下步骤来设置授权。 如需了解更多信息,请参阅 《 Secrets Manager 的集成 》。
- 在 IBM Cloud 控制台中,点击 “管理” >“访问(IAM)”。
- 点击 “授权”。
- 单击创建。
- 在 “源服务”列表中,选择 Kubernetes Service。
- 选择用于限定对 所有资源的访问范围的选项。
- 在 “目标”服务列表中,选择 Secrets Manager。
- 选择用于限定对 所有资源的访问范围的选项。
- 在 服务访问权 部分中,检查 管理器 选项。
- 单击授权。
创建 Secrets Manager 实例
要在 CLI 或 UI 中创建一个 Secrets Manager 实例,请参阅 Secrets Manager 文档。 您的 Secrets Manager 实例可能需要几分钟才能完全配置完成。
创建 Secrets Manager 实例时,该实例不会直接在您的集群中进行配置。 在下一步中,您必须将新的 Secrets Manager 实例注册到您的集群中。
向集群注册 Secrets Manager 实例
请按照以下步骤将您的 Secrets Manager 实例注册到集群中。
-
获取 Secrets Manager 实例的 CRN。 在输出中,CRN 位于 ID 行中。
ibmcloud resource service-instance <instance_name>示例输出
Name: my-secrets-manager-instance ID: crn:v1:bluemix:public:secrets-manager:us-south:a/1aa111aa1a11111aaa1a1111aa1aa111:111a1111-11a1-111a-1111-1a1a1a1111a1: GUID: 111a1111-11a1-111a-1111-1a1a1a1111a1 Location: us-south Service Name: secrets-manager Service Plan Name: standard Resource Group Name: default State: active Type: service_instance Sub Type: Created at: 2022-06-08T12:46:45Z Created by: user@ibm.com Updated at: 2022-06-08T12:54:45Z -
向集群注册实例。 指定在上一步中找到的实例 CRN。
如果要向集群注册实例,并且 将其设置为缺省实例,请包含
--is-default选项。 否则,可以使用ibmcloud ks ingress instance default set命令设置缺省实例。ibmcloud ks ingress instance register --cluster CLUSTER_NAME_OR_ID --crn INSTANCE_CRN [--is-default] -
验证 Secrets Manager 实例是否已向集群注册。
ibmcloud ks ingress instance ls --cluster CLUSTER_NAME_OR_ID示例输出
Name Type Is Default Status Secret Group CRN my-secrets-manager-instance secrets-manager false created default crn:v1:bluemix:public:secrets-manager:us-south:a/1aa111aa1a11111aaa1a1111aa1aa111:111a1111-11a1-111a-1111-1a1a1a1111a1::
Secrets Manager 使用ibmcloud ks cluster create classic 或 ibmcloud ks cluster create vpc-gen2 命令创建集群时,可以指定一个xml-ph-0000@deepl.internal实例和一个密钥组。 使用 --sm-instance 选项向集群注册实例,使用 --sm-group 选项指定可访问集群上的私钥的私钥组。 请参阅“在创建集群时注册 Secrets Manager 实例”。
设置缺省 Secrets Manager 实例并重新生成私钥
当您设置一个默认的 Secrets Manager 实例时,所有新的Ingress子域证书都会存储在该实例中。
-
运行命令以设置新的缺省实例。 您可以选择指定允许访问实例中的私钥的 私钥组。
ibmcloud ks ingress instance default set --cluster CLUSTER_NAME_OR_ID --name INSTANCE_NAME --secret-group SECRET_GROUP_ID -
重新生成私钥。 由 IBM管理的任何私钥 (例如,缺省 Ingress 私钥) 都将上载到新的缺省实例。 这些私钥将自动更新,并且 CRN 将更改为引用 Secrets Manager 实例。
- 列出集群中的 nlb-dns 子域。
ibmcloud ks nlb-dns ls --cluster CLUSTER_NAME_OR_ID ``` 2. 对于集群中的每个子域,运行命令以重新生成 IBM管理的私钥。 这将更新这些私钥的 CRN,以引用新的缺省 Secrets Manager 实例的 CRN。 重新生成私钥的速率限制为每周 5 次。 请仔细遵循本文档中的步骤,因为重复这些步骤可能会导致您达到限制。 如果您未重新生成密钥,或者已达到上限,您的密钥将在下一个更新周期上传至您的 Secrets Manager 实例。 {: important} ```sh {: pre} ibmcloud ks nlb-dns secret regenerate --cluster CLUSTER_NAME_OR_ID --nlb-subdomain NLB_SUBDOMAIN ``` 3. 验证是否重新生成了缺省 Ingress 私钥。 在输出中,缺省 Ingress 私钥的 CRN 应包含 `secrets-manager`。 可能需要几分钟才能重新生成私钥。 在此过程中,输出中的 **状态** 列将显示 `regenerating`,并在重新生成完成时切换到 `created`。 {: note} ```sh {: pre} ibmcloud ks ingress secret ls --show-crn --cluster CLUSTER_NAME_OR_ID ``` 示例输出 ```sh {: screen} Name Namespace Expiry Domains Status Type CRN secret-11111aa1a1a11aa1111111-000 default 3 months from now secret-11111aa1a1a.us-s…domain.cloud created TLS crn:v1:bluemix:public:secrets-manager:us-south:a/1aa111aa1:secret:a111aa11-11a1 secret-22222aa2a2a22aa2222222-000 default 3 months from now secret-22222aa2a2a.us-s…domain.cloud created TLS crn:v1:bluemix:public:secrets-manager:us-south:a/2aa222aa2:secret:a222aa22-22a2 ```
通过私钥组控制对私钥的访问
借助 Secrets Manager,您可以使用密钥组来控制谁可以访问集群中的密钥。 可以将私钥组分配给 IAM 访问组,以便只有选择的用户或服务标识才能访问私钥组中的私钥。 有关更多信息,请参阅 组织私钥。
创建集群时注册 Secrets Manager 实例
如果您正在 创建一个新的经典型或 VPC 集群, 可以在创建过程中将现有的 Secrets Manager 实例和密钥组注册到该集群中。 集群中的密钥存储在 Secrets Manager 实例中,并应用于密钥组。
在创建集群时注册的 Secrets Manager 实例不会自动成为默认的 Secrets Manager 实例。 您仍必须 手动设置缺省实例。
如果使用 ibmcloud ks cluster create classic 或 ibmcloud ks cluster create vpc-gen2 在 CLI 中 创建集群,那么可以使用以下命令选项指定 Secrets Manager 实例或私钥组:
--sm-instance: 使用此选项通过指定实例 CRN 向集群注册 Secrets Manager 实例。 要查找 Secrets Manager 实例的CRN,请运行ibmcloud resource service-instance <name_of_instance>或在UI中导航到资源列表并单击实例。--sm-group: 使用此选项来指定密钥组的标识。 要查找密钥组标识,请运行ibmcloud secrets-manager secret-groups。
如果在 UI 中创建集群,请执行以下步骤以指定 Secrets Manager 实例或私钥组:
- 在集群创建页面的 集成 部分中,选择用于启用 Secrets Manager 的选项。
- 从 Secrets Manager 实例 下拉菜单中,选择要向集群注册的实例。 如果没有可用的实例,请 创建一个。
- 从 Secrets Manager 组 下拉菜单中,选择要应用的密钥组。
- 创建集群。
- 检查 Secrets Manager 实例是否已向集群注册。
- 当您的集群完全配置完成后,点击集群查看集群详情。 在 集成下,找到 Secrets Manager 标题,然后单击 管理。
- 在侧面板中,检查 已注册的 Secrets Manager 实例下是否列出了正确的实例。
- 要向集群注册其他实例,请单击 注册实例。