保密字典是Kubernetes中一种用于保管敏感信息如密钥和证书的资源。为了防止这些信息被泄露到镜像或部署配置中,推荐您使用保密字典。保密字典是在命名空间级别进行管理的。一旦设置了保密字典,您可以在创建应用或部署版本时,把敏感配置直接注入容器,而无需再次向镜像内部添加。当Secret的内容有所更改,仅需要重新部署相关的应用,即可更新配置并使其生效。
背景信息
在Serverless 应用引擎 SAE(Serverless App Engine)环境中,ConfigMap和Secret是两种用来存储配置信息的资源,它们都允许将配置与容器镜像分离,便于应用配置的管理。不过,它们之间的适用场景有所不同。
ConfigMap通常被用于存储常规配置项,如配置文件内容、命令行参数和其他非机密数据。它们能够以文件挂载、环境变量或命令行参数的方式注入到Pod内,使您能够轻松地更新应用设置而无需重建容器镜像。
Secret主要用于保存敏感数据,例如密码、证书和SSH密钥等。与ConfigMap类似,Secret可以作为文件挂载或者以环境变量的形式提供给Pod的容器。为了降低泄露的危险,Kubernetes对Secret中的数据进行了加密,并在内存中安全地处理。
前提条件
限制条件
此功能只适用于微服务应用。
注意事项
SAE的镜像部署,默认为免密拉取镜像。如果部署时使用保密字典,则原有免密拉取镜像不再生效。如果需要免密拉取镜像,请先重新部署,并取消选择保密字典。
修改后的保密字典新版本仅对应用新实例(如手动新扩容或自动弹性的新实例)生效,对存量实例不生效。为保证应用所有实例保密字典版本的最终一致性,请您在修改保密字典后手动重启或部署应用。
如果您需要删除保密字典,且已有应用在使用该保密字典,请先在关联的应用中解除该保密字典,然后再进行删除该保密字典,以免影响这些应用的正常运行。
如果您的配置项信息无需加密,则无需使用保密字典功能。您可以使用SAE的配置项功能来管理配置信息。具体操作,请参见管理和使用配置项(K8s ConfigMap)。
创建保密字典
登录SAE控制台。
在左侧导航栏,单击命名空间,在顶部菜单栏选择目标地域,然后单击目标命名空间名称。
在左侧导航栏,单击保密字典。
在保密字典页面,单击创建。
在弹出的创建面板,根据需求选择不同的保密字典类型并根据下表说明完成参数配置,然后单击确定。
说明在创建保密字典时,您可以根据需要存放的信息选择不同的类型:
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应用和任务模板管理。
本文仅介绍关键步骤。
在创建应用过程中配置保密字典
该功能可以在创建应用时设置,也可以在更新应用时设置。
登录SAE控制台。
在左侧导航栏,单击
,然后在顶部菜单栏选择目标地域。在应用列表页面,单击创建应用。
选择应用部署方式为选择镜像部署,然后单击设置镜像。
在弹出的设置镜像面板,根据以下说明完成参数配置,然后单击确定。
选择技术栈语言,Java和PHP语言可以选择环境版本。如Java语言的环境选择为Open JDK 8。
单击其他阿里云账号私有镜像。
在其他阿里云账号私有镜像页签,选择镜像服务版本为镜像服务个人版或镜像服务企业版。
如果您选择的是镜像服务个人版,将镜像类型选择为静态用户名和密码,然后填写存储镜像仓库用户名和密码的保密字典和完整镜像仓库地址。
如果您选择的是镜像服务企业版,将镜像类型选择为静态用户名和密码,然后填写企业版实例ID、存储镜像仓库用户名和密码的保密字典和完整镜像仓库地址。
按照页面提示完成其他参数设置,然后单击下一步:高级设置。
在高级设置页面,完成高级参数配置。具体操作,请参见高级配置。
单击创建应用。
在创建任务模板过程中配置保密字典
登录SAE控制台。
在左侧导航栏,单击任务模板列表,然后再顶部菜单栏选择目标地域。
在任务模板列表页面,单击创建任务模板。
在任务基本信息页面,按照页面说明完成参数配置,然后单击下一步:部署配置。
在部署配置页面,按照以下完成参数配置。
选择技术栈语言,Java和PHP语言可以选择环境版本。如Java语言的环境选择为Open JDK 8。
单击其他阿里云账号私有镜像。
在其他阿里云账号私有镜像页签,选择镜像服务版本为镜像服务个人版或镜像服务企业版。
如果您选择的是镜像服务个人版,将镜像类型选择为静态用户名和密码,然后填写存储镜像仓库用户名和密码的保密字典和完整镜像仓库地址。
如果您选择的是镜像服务企业版,将镜像类型选择为静态用户名和密码,然后填写企业版实例ID、存储镜像仓库用户名和密码的保密字典和完整镜像仓库地址。
根据页面提示完成其他参数配置,然后单击下一步:任务设置。
根据页面提示完成参数设置,然后单击下一步:确认规格。
在确认规格页面,仔细确认配置信息,然后单击确认创建。
创建完成后,在任务模板列表页面,查看已创建的任务信息。