创建密钥对象是什么
密钥对象用来存放需要控制读取范围的内容:口令、令牌、证书与私钥、镜像仓库凭据。按用途分为几类创建方式:通用的键值类、证书类、镜像仓库类,创建出来的对象类型不同,被使用的方式也不同。它与配置对象的关键差别是内容不进入容器日志与描述信息,且读取权限可以单独控制。
它并不等于加密
内容在对象里只是编码存放,不是加密存放:有读取权限的主体就能还原出明文。真正的保护来自访问控制、加密存储配置以及避免把内容写进命令行与代码仓库。创建时尤其要注意,直接在命令里写口令会留在命令历史与进程信息中。
基本信息
| 适用环境 | 任何 Kubernetes 发行版 |
|---|---|
| 常见类型 | 通用键值、证书类、镜像仓库凭据类 |
| 内容状态 | 编码存放,不是加密,依赖权限与存储加密保护 |
| 作用范围 | 按命名空间隔离,不能被其他命名空间直接引用 |
| 常见引用 | 作为环境变量注入、以文件挂载、或作为拉取镜像的凭据 |
| 命令行风险 | 明文口令会留在历史与进程信息中 |
典型使用场景
- 应用凭据:数据库口令、消息队列账号这类需要保密的内容
- 证书托管:为入口层提供证书与私钥
- 镜像拉取:私有仓库的用户名口令,供节点拉取镜像使用
- 令牌管理:访问外部服务所需的访问令牌
- 证书文件挂载:应用需要按文件路径读取证书的场景
- 轮换流程:凭据换新后重建使用它的实例
三类创建方式
三类创建方式
kubectl create secret generic db-pass --from-literal=password=<占位> -n prod # 通用键值
kubectl create secret tls app-tls --cert=tls.crt --key=tls.key -n prod # 证书类
kubectl create secret docker-registry regcred \ # 镜像仓库类
--docker-server=registry.example.com --docker-username=ci \
--docker-password=<占位> -n prod
kubectl create secret generic app-cert --from-file=./tls.crt -n prod # 从文件创建三类用途与引用方式
| 类型 | 典型内容 | 引用方式 |
|---|---|---|
| 通用键值类 | 口令、令牌、普通配置密钥 | 注入环境变量或以文件挂载 |
| 证书类 | 证书与私钥 | 入口规则或应用挂载使用 |
| 镜像仓库类 | 仓库地址与凭据 | 在对象模板里作为拉取凭据引用 |
| 来源形式 | 字面量或文件 | 从文件创建可避免命令行留痕 |
从文件创建时,文件末尾的换行会被一并保存,程序读取后需要自行清理空白字符。
把凭据写在命令行参数里会残留在命令历史与进程列表中;优先使用文件或标准输入方式创建。