管理和使用保密字典(K8s Secret)

保密字典是Kubernetes中一种用于保管敏感信息如密钥和证书的资源。为了防止这些信息被泄露到镜像或部署配置中,推荐您使用保密字典。保密字典是在命名空间级别进行管理的。一旦设置了保密字典,您可以在创建应用或部署版本时,把敏感配置直接注入容器,而无需再次向镜像内部添加。当Secret的内容有所更改,仅需要重新部署相关的应用,即可更新配置并使其生效。

背景信息

Serverless 应用引擎 SAE(Serverless App Engine)环境中,ConfigMap和Secret是两种用来存储配置信息的资源,它们都允许将配置与容器镜像分离,便于应用配置的管理。不过,它们之间的适用场景有所不同。

  • ConfigMap通常被用于存储常规配置项,如配置文件内容、命令行参数和其他非机密数据。它们能够以文件挂载、环境变量或命令行参数的方式注入到Pod内,使您能够轻松地更新应用设置而无需重建容器镜像。

  • Secret主要用于保存敏感数据,例如密码、证书和SSH密钥等。与ConfigMap类似,Secret可以作为文件挂载或者以环境变量的形式提供给Pod的容器。为了降低泄露的危险,Kubernetes对Secret中的数据进行了加密,并在内存中安全地处理。

前提条件

已创建命名空间

限制条件

此功能只适用于微服务应用。

注意事项

  • SAE的镜像部署,默认为免密拉取镜像。如果部署时使用保密字典,则原有免密拉取镜像不再生效。如果需要免密拉取镜像,请先重新部署,并取消选择保密字典。

  • 修改后的保密字典新版本仅对应用新实例(如手动新扩容或自动弹性的新实例)生效,对存量实例不生效。为保证应用所有实例保密字典版本的最终一致性,请您在修改保密字典后手动重启或部署应用。

  • 如果您需要删除保密字典,且已有应用在使用该保密字典,请先在关联的应用中解除该保密字典,然后再进行删除该保密字典,以免影响这些应用的正常运行。

  • 如果您的配置项信息无需加密,则无需使用保密字典功能。您可以使用SAE的配置项功能来管理配置信息。具体操作,请参见管理和使用配置项(K8s ConfigMap)

创建保密字典

  1. 登录SAE控制台

  2. 在左侧导航栏,单击命名空间,在顶部菜单栏选择目标地域,然后单击目标命名空间名称。

  3. 在左侧导航栏,单击保密字典

  4. 保密字典页面,单击创建

  5. 在弹出的创建面板,根据需求选择不同的保密字典类型并根据下表说明完成参数配置,然后单击确定

    说明

    在创建保密字典时,您可以根据需要存放的信息选择不同的类型:

    • Opaque类型:Opaque是默认的Secret类型,适用于存储各类没有特定格式的敏感信息,如密码或API密钥。当您需要存储一些自定义格式的敏感信息时,Opaque类型提供了灵活性,让您可以以键值对的形式自由地保存所需的数据。

    • TLS证书类型:这种类型专门用于存储TLS证书相关的数据,当您的服务需要启用HTTPS访问时,可以使用这种类型的Secret来保存和管理TLS证书,以确保在SAE环境中的Pod中使用,确保数据传输的安全性。

    • 私有镜像仓库登录密钥类型:这种类型适用于存储访问私有容器镜像仓库的凭证,使得Kubernetes在拉取私有镜像时能够进行身份验证。如果您的应用使用的容器镜像存储在私有仓库中,您需要提供凭证才能访问这些镜像。在这种情况下,该类型的Secret用于存储仓库用户名和密码或访问令牌,确保SAE在部署应用时能够拉取到私有镜像。

    Opaque类型

    配置项

    说明

    名称

    自定义保密字典名称。

    类型

    选择Opaque类型。

    键值对

    • 对数据值进行Base64编码:默认选中,SAE会对明文数据进行Base64编码。

    • 键值对:敏感信息的Key和Value。

    说明

    单击+添加,可以定义多个键值对。

    TLS证书类型

    配置项

    说明

    名称

    自定义保密字典名称。

    类型

    选择TLS证书类型。

    Cert

    TLS证书的公钥。

    Key

    TLS证书的私钥。

    私有镜像仓库登录密钥类型

    配置项

    说明

    名称

    自定义保密字典名称。

    类型

    选择私有镜像仓库登录密钥类型。

    镜像仓库地址

    镜像仓库地址:请填写敏感信息所在的镜像仓库对应的VPC内网域名,例如:******-vpc.cn-beijing.aliyuncs.com。关于如何获取,请参见镜像仓库

    用户名

    镜像仓库的用户名。

    密码

    镜像仓库的密码。

    创建的保密字典将显示在保密字典页面,您可以在保密字典列表的操作列进行编辑复制删除等操作。

通过保密字典拉取镜像

如果想要通过保密字典拉取镜像,您需要先创建私有镜像仓库登录密钥类型的保密字典。本文仅介绍配置保密字典的关键信息。关于配置项的更多信息,请参见在SAE控制台使用WAR包部署Java应用任务模板管理

说明

本文仅介绍关键步骤。

在创建应用过程中配置保密字典

该功能可以在创建应用时设置,也可以在更新应用时设置。

  1. 登录SAE控制台

  2. 在左侧导航栏,单击应用管理 > 微服务应用,然后在顶部菜单栏选择目标地域。

  3. 应用列表页面,单击创建应用

  4. 选择应用部署方式选择镜像部署,然后单击设置镜像

  5. 在弹出的设置镜像面板,根据以下说明完成参数配置,然后单击确定

    1. 选择技术栈语言,Java和PHP语言可以选择环境版本。如Java语言的环境选择为Open JDK 8。

    2. 单击其他阿里云账号私有镜像

    3. 其他阿里云账号私有镜像页签,选择镜像服务版本镜像服务个人版镜像服务企业版

      • 如果您选择的是镜像服务个人版,将镜像类型选择静态用户名和密码,然后填写存储镜像仓库用户名和密码的保密字典完整镜像仓库地址

      • 如果您选择的是镜像服务企业版,将镜像类型选择静态用户名和密码,然后填写企业版实例ID存储镜像仓库用户名和密码的保密字典完整镜像仓库地址

  6. 按照页面提示完成其他参数设置,然后单击下一步:高级设置

  7. 高级设置页面,完成高级参数配置。具体操作,请参见高级配置

  8. 单击创建应用

在创建任务模板过程中配置保密字典

  1. 登录SAE控制台

  2. 在左侧导航栏,单击任务模板列表,然后再顶部菜单栏选择目标地域。

  3. 任务模板列表页面,单击创建任务模板

  4. 在任务基本信息页面,按照页面说明完成参数配置,然后单击下一步:部署配置

  5. 在部署配置页面,按照以下完成参数配置。

    1. 选择技术栈语言,Java和PHP语言可以选择环境版本。如Java语言的环境选择为Open JDK 8。

    2. 单击其他阿里云账号私有镜像

    3. 其他阿里云账号私有镜像页签,选择镜像服务版本镜像服务个人版镜像服务企业版

      • 如果您选择的是镜像服务个人版,将镜像类型选择静态用户名和密码,然后填写存储镜像仓库用户名和密码的保密字典完整镜像仓库地址

      • 如果您选择的是镜像服务企业版,将镜像类型选择静态用户名和密码,然后填写企业版实例ID存储镜像仓库用户名和密码的保密字典完整镜像仓库地址

  6. 根据页面提示完成其他参数配置,然后单击下一步:任务设置

  7. 根据页面提示完成参数设置,然后单击下一步:确认规格

  8. 确认规格页面,仔细确认配置信息,然后单击确认创建

    创建完成后,在任务模板列表页面,查看已创建的任务信息。