Kubernetes 中的 Secret 主要根据其用途和数据格式进行分类。虽然底层存储机制相同(都是 Base64 编码的键值对),但 Kubernetes 通过不同的类型(Type)来区分它们的语义。
| 类型 (Type) | 用途 | 典型场景 |
|---|---|---|
| Opaque | 通用存储 | 数据库密码、自定义配置、Basic Auth 文件 |
| kubernetes.io/tls | 存储证书 | Ingress 配置 HTTPS |
| kubernetes.io/dockerconfigjson | 存储镜像仓库凭据 | 拉取私有镜像 |
| kubernetes.io/service-account-token | 存储 API 访问令牌 | Pod 访问 Kubernetes API |
在实际工作中,Opaque 和 kubernetes.io/tls 是使用频率最高的两种。对于大多数自定义应用,使用 Opaque 就足够了,因为它最灵活,不需要遵循特定的键名规范。
(1)Opaque(通用类)
这是最常见、最基础的 Secret 类型,也是
kubectl create secret generic 命令默认创建的类型。- 用途:存储用户自定义的任意数据,比如密码、API 密钥、配置文件等。
- 特点:Kubernetes 对其内容不做任何解释或校验,完全由用户决定里面存什么。
- 示例:存储数据库密码、Redis 密钥、或者你之前提到的 Nginx Basic Auth 文件
kubectl create secret generic basic-auth --from-file=auth
案例:
nginx-ingress-BasicAuth 代理 : 连接

(2)TLS/SSL 类
这类 Secret 专门用于处理 HTTPS 加密。
- kubernetes.io/tls
- 用途:存储 TLS/SSL 证书和私钥。
- 场景:这是配置 Ingress(如 Nginx Ingress)实现 HTTPS 访问时最常用的类型。通常包含两个键:
tls.crt(证书)和tls.key(私钥)。 - 创建命令:
kubectl create secret tls my-tls-secret --cert=path/to/cert.pem --key=path/to/key.pem
案例:
nginx-ingress-https 代理 案例 : 连接
(3)服务账户凭据类
这类 Secret 用于 Kubernetes 内部组件之间的身份认证,通常与 ServiceAccount 关联。
- kubernetes.io/service-account-token
- 用途:包含用于访问 Kubernetes API Server 的令牌(Token)。当 Pod 被创建时,Kubernetes 会自动将默认的 ServiceAccount Token 挂载到 Pod 中,以便 Pod 内的应用能够安全地调用 API。
- kubernetes.io/dockercfg 和 kubernetes.io/dockerconfigjson
- 用途:用于存储 Docker Registry 的登录凭据(
.dockercfg或config.json格式)。 - 场景:当你需要从私有镜像仓库(如 Harbor、阿里云 ACR、Docker Hub 私有库)拉取镜像时,需要创建这种类型的 Secret,并在 Pod 的
imagePullSecrets中引用它。
- 用途:用于存储 Docker Registry 的登录凭据(
(4)其他特定用途类
这些类型通常用于特定的云提供商或特定的 Kubernetes 功能。
- bootstrap.kubernetes.io/token
- 用于节点引导(Bootstrap)过程中的临时令牌。
- kubernetes.io/basic-auth
- 专门用于存储 HTTP 基本身份验证的凭据(用户名和密码)。虽然它存在,但在实际使用中,大家更习惯用通用的
Opaque类型来存储 Basic Auth 文件(如你之前的auth文件),因为 Ingress 控制器通常只关心文件内容,而不关心 Secret 的类型。
- 专门用于存储 HTTP 基本身份验证的凭据(用户名和密码)。虽然它存在,但在实际使用中,大家更习惯用通用的
- kubernetes.io/ssh-auth
- 用于存储 SSH 身份验证所需的私钥。
欢迎来撩 : 汇总all
