You need to enable JavaScript to run this app.
文档中心
容器服务

容器服务

复制全文
下载 pdf
配置管理
在容器中使用保密字典
复制全文
下载 pdf
在容器中使用保密字典
本文主要描述容器中使用保密字典(Secret)的场景及其相关操作步骤。​
背景信息​
企业应用在部署时往往需要使用数据库密码、API 密钥、TLS 证书等敏感信息。若将这些信息硬编码到镜像或工作负载 YAML 中,会带来严重的安全风险和环境耦合问题。Secret 通过将敏感数据与应用解耦,专门存储密码、密钥、证书等非明文配置,配合 Kubernetes 的 RBAC 与命名空间隔离机制实现更细粒度的访问控制。​
Secret 与配置项(ConfigMap)的定位类似,区别在于:Secret 专用于敏感数据,数据在 ETCD 中以 Base64 编码存储,ConfigMap 则用于存储非敏感的明文配置。​
创建 Secret 后,可以通过以下两种方式在容器中使用:​
​
使用方式​
说明​
适用场景​
环境变量注入​
​
将 Secret 中的键值对直接注入到容器的环境变量中。​
数据库密码、API Key、连接字符串等需在代码中通过环境变量读取的短敏感参数。​
数据卷挂载​
将 Secret 中的数据以文件形式挂载到容器指定目录,支持自动同步和热更新。​
TLS 证书、私钥、KubeConfig、完整凭证文件等以文件形式被应用读取的敏感数据。​
​
准备工作​
提前准备 Secret。详细操作,请参见 创建保密字典。为方便您验证 Secret 的使用结果,本文使用如下示例 Secret 文件demo-secret.yaml。​
​
apiVersion: v1​
kind: Secret​
metadata:​
name: demo-secret # Secret 名称,工作负载引用时使用此名称。​
namespace: default # Secret 命名空间,需与工作负载一致。​
type: Opaque # 一般密钥类型 Secret,存储任意用户自定义数据。​
data:​
# data 字段的 value 必须是 Base64 编码后的字符串。​
username: YWRtaW4= # 明文 admin 的 Base64 编码。​
password: MTIzNDU2 # 明文 123456 的 Base64 编码。​
stringData:​
# stringData 字段可直接填写明文,创建时由 Kubernetes 自动完成 Base64 编码。​
DB_HOST: mysql.default.svc.cluster.local​
DB_PORT: "3306"​
​
操作步骤​
场景一:环境变量注入​
下文以无状态负载(Deployment)为例,介绍如何使用 Secret 设置工作负载的环境变量。​
​
通过控制台配置
通过 kubectl 配置
​
  1. 单击左侧导航栏中的 集群。​
  1. 在集群列表页面,单击目标集群。​
  1. 选择 工作负载 > 无状态负载,单击 创建无状态负载。​
  1. 在 创建无状态负载 页面,部分参数按如下说明配置,其余参数按实际需求自定义配置。详细操作,请参见 创建无状态负载。​
  • 在 ②容器配置 步骤中,单击 环境变量 区域的+图标,添加环境变量,将前提条件中准备的 Secret 作为无状态负载的环境变量。​
  • ​​​
  1. 单击 确定,创建完成无状态负载。​
  1. 检查无状态负载创建结果并查看环境变量是否注入成功。​
  1. 在 无状态负载 页面找到刚创建的负载,单击名称进入 无状态负载详情页。​
  1. 在 无状态负载详情页,选择 实例列表 页签,查看无状态负载对应的 Pod 是否均处于 Running 状态。​
  1. 单击 Pod 名称进入 容器组详情页,然后单击页面右上角 控制台 登录 Pod 后执行如下命令验证环境变量是否注入成功。​
  • ​
    env | grep -E "username|password|DB_HOST|DB_PORT"​
    ​
  • 输出内容如下:​
  • ​
    username=admin​
    password=123456​
    DB_HOST=mysql.default.svc.cluster.local​
    DB_PORT=3306​
    ​
​
场景二:数据卷挂载​
下文以 Deployment 为例,介绍如何将 Secret 挂载为工作负载的数据卷。​
​
通过控制台配置
通过 kubectl 配置
​
  1. 单击左侧导航栏中的 集群。​
  1. 在集群列表页面,单击目标集群。​
  1. 选择 工作负载 > 无状态负载,单击 创建无状态负载。​
  1. 在 创建无状态负载 页面,部分参数按如下说明配置,其余参数按实际需求自定义配置。详细操作,请参见 创建无状态负载。​
  • 在 ②容器配置 步骤中,按如下说明配置 存储配置 区域的参数。​
  • 在 添加卷 中,单击+图标,将保密字典配置为存储卷。​
  • 在 挂载卷 中,单击+图标,挂载配置好的保密字典。​
  • ​​​
  1. 单击 确定,创建完成无状态负载。​
  1. 检查无状态负载创建结果并查看环境变量是否注入成功。​
  1. 在 无状态负载 页面找到刚创建的负载,单击名称进入 无状态负载详情页。​
  1. 在 无状态负载详情页,选择 实例列表 页签,查看无状态负载对应的 Pod 是否均处于 Running 状态。​
  1. 单击 Pod 名称进入 容器组详情页,然后单击页面右上角 控制台 登录 Pod 后执行如下命令验证保密字典是否挂载成功。​
  • ​
    ls /etc/secret/​
    ​
  • 输出内容包含DB_HOST、DB_PORT、password、username,即说明挂载成功。​
  1. 执行如下命令,验证保密字典内容是否正确。​
  • ​
    $ cat /etc/secret/password​
    ​
  • 输出password对应的值(如123456),说明保密字典内容正确。​
​
后续操作​
若您更新 Secret 后希望工作负载尽快生效,则按如下说明操作:​
  • 环境变量场景修改 Secret 后必须重启 Pod 才能生效。​
  • kubelet 默认同步周期约为 60 秒,最长可能延迟 1-2 分钟。如需立即生效,可重启 Pod。​
说明​
使用 subPath 挂载的文件不会自动更新,您需要手动重启 Pod。​
最近更新时间:2026.07.16 16:04:53
这个页面对您有帮助吗?
有用
有用
无用
无用