首页/云/Kubernetes 速查/Secret 类型总览
配置与存储54 条

Secret 类型总览

Secret 按用途分类型:Opaque 通用、TLS 证书、dockerconfigjson 镜像仓库凭据、ServiceAccount Token 等;类型决定字段校验与消费方式。

Kubernetes 速查云更新于 2026-10-13

对象定位

Secret 按用途区分类型,类型决定了必须提供哪些键、API 会做何种校验、消费方如何使用。适用平台是 Kubernetes。常见类型有 Opaque(通用键值)、kubernetes.io/tls(证书与私钥)、kubernetes.io/dockerconfigjson(镜像仓库凭据)、kubernetes.io/basic-auth(用户名密码)、kubernetes.io/ssh-auth(SSH 私钥)以及 ServiceAccount Token 相关类型。选错类型会导致创建被拒或消费方读不到预期字段。

基本信息

适用平台Kubernetes,命名空间级资源
存储形式data 为 base64 编码,stringData 为写入时的明文便利字段
默认类型不写 type 时等价于 Opaque
加密状态是否落盘加密取决于集群是否配置了 EncryptionConfiguration

典型使用场景

  • 存数据库口令:用 Opaque 或 basic-auth 存用户名密码,通过 env 或卷注入
  • 存镜像仓库凭据:dockerconfigjson 类型供 kubelet 拉取私有镜像
  • 存 TLS 证书:tls 类型交给 Ingress 或网关引用
  • 存 SSH 私钥:ssh-auth 类型供构建、同步类任务使用
  • 按类型巡检:用 field-selector 找出集群里所有 tls 类型 Secret 做证书盘点

查看与创建

查看与创建
kubectl get secret app-tls -o jsonpath='{.type}'                  # 看类型
kubectl get secrets -A --field-selector type=kubernetes.io/tls     # 按类型筛选
kubectl create secret generic app-secret --from-literal=APP_MODE=prod   # Opaque
kubectl create secret docker-registry regcred --docker-server=registry.example.com --docker-username=robot --docker-password=xxx
kubectl get secret app-secret -o jsonpath='{.data}' | head -c 200  # base64 内容,仅排障用

常用类型

类型用途关键字段
Opaque通用键值凭据data/stringData 自定义键
kubernetes.io/tlsTLS 证书与私钥tls.crt / tls.key
kubernetes.io/dockerconfigjson镜像仓库认证.dockerconfigjson
kubernetes.io/basic-auth用户名密码username / password
kubernetes.io/ssh-authSSH 私钥ssh-privatekey
kubernetes.io/service-account-tokenSA 令牌(较新版本不再自动生成)token / ca.crt
Secret 的 data 是 base64 编码而非加密:只要有权读对象就能还原明文,权限控制要按最小授权设计。
不同版本的 ServiceAccount Token 行为有差异(长期令牌与 TokenRequest 投影卷并存),依赖自动生成 token 的旧系统升级前先确认版本行为。

选型与加固要点

  • 按消费方倒推类型:给 Ingress 用必须选 tls,给 kubelet 拉镜像必须选 dockerconfigjson,否则对方读不到字段
  • 优先用专用类型而不是 Opaque:专用类型会做键校验,能在创建阶段就暴露拼写错误
  • 结合 RBAC 收窄读权限:Secret 明文可达,能读的人越少越好,尽量避免用通配规则授权
  • 落盘加密单独确认:默认只做 base64 编码,静态加密需要在集群层面配置,不要假设已开启
  • 凭据轮换要有流程:Secret 更新后依赖它的工作负载通常需要重建 Pod 才能拿到新值

易错点

  • base64 不是加密:拿到 Secret 对象即可还原内容,读到权限需要严格控制,写进日志或配置管理工具时尤其注意
  • 不同版本的 ServiceAccount Token 行为有差异(TokenRequest 与投影卷),依赖它的旧系统先确认版本再升级
  • 把 Opaque 当成万能类型:用 tls 或 dockerconfigjson 才能被消费方识别,类型写错时引用方读不到预期字段
  • 用 stringData 写入后以为还能从 stringData 读回:写入即转成 data 的 base64,核对内容要看 data

数据来源与参考

  • Kubernetes 官方文档 · Secrets(Secret 类型)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌