Secret 简介
学习目标
- 理解 Secret 的作用和使用场景
- 掌握 Secret 与 ConfigMap 的区别
- 了解 Secret 的安全特性
核心概念
一句话解释
Secret 是 Kubernetes 中用于存储敏感数据的 API 对象,如密码、Token、证书等。
为什么需要 Secret
问题:敏感数据如何管理?
错误做法:
┌─────────────────────────────────────┐
│ Pod │
│ ┌─────────────────────────────┐ │
│ │ 应用代码 │ │
│ │ - 数据库密码: mypassword │ │
│ │ - API Key: sk-123456 │ │
│ └─────────────────────────────┘ │
└─────────────────────────────────────┘
问题:
1. 密码硬编码在代码中
2. 密码泄露到版本控制
3. 无法轮换密码
正确做法:
┌─────────────────────────────────────┐
│ Pod │
│ ┌─────────────────────────────┐ │
│ │ 应用代码 │ │
│ │ 读取环境变量或文件 │ │
│ └─────────────────────────────┘ │
└─────────────────────────────────────┘
↑ 读取敏感数据
┌─────────────────────────────────────┐
│ Secret │
│ - 数据库密码: **** │
│ - API Key: **** │
└─────────────────────────────────────┘
Secret vs ConfigMap
| 特性 | Secret | ConfigMap |
|---|---|---|
| 数据类型 | 敏感数据 | 非敏感数据 |
| 存储方式 | Base64 编码 | 明文 |
| 典型用途 | 密码、Token、证书 | 配置文件、环境变量 |
| 大小限制 | 1MB | 1MB |
| 加密 | 支持 etcd 加密 | 不支持 |
Secret 的类型
| 类型 | 说明 | 典型用途 |
|---|---|---|
| Opaque | 通用类型 | 密码、Token |
| kubernetes.io/tls | TLS 证书 | HTTPS 证书 |
| kubernetes.io/dockerconfigjson | Docker 镜像仓库认证 | 私有镜像拉取 |
| kubernetes.io/basic-auth | 基本认证 | 用户名密码 |
| kubernetes.io/ssh-auth | SSH 认证 | SSH 私钥 |
| kubernetes.io/service-account-token | ServiceAccount Token | API 访问 |
Secret 的使用方式
| 方式 | 说明 | 示例 |
|---|---|---|
| 环境变量 | 注入到容器环境变量 | DATABASE_PASSWORD |
| 卷挂载 | 挂载为文件 | /etc/secrets/password |
| 镜像拉取 | 私有镜像仓库认证 | imagePullSecrets |
Secret 的安全特性
1. Base64 编码
- 不是加密,只是编码
- 避免特殊字符问题
2. etcd 加密
- 可以配置加密 Secret
- 需要启用 EncryptionConfiguration
3. RBAC 控制
- 控制谁可以访问 Secret
- 最小权限原则
4. 审计日志
- 记录 Secret 访问
- 便于安全审计
5. 挂载为 tmpfs
- 卷挂载的 Secret 不写入磁盘
- 只存在于内存中
实际应用场景
场景 1:数据库凭证
- 用户名、密码
- 连接字符串
场景 2:API 密钥
- 第三方服务 API Key
- OAuth Token
场景 3:TLS 证书
- HTTPS 证书
- 私钥
场景 4:Docker 镜像仓库
- 私有仓库用户名密码
- 拉取镜像认证
场景 5:SSH 密钥
- Git 仓库访问
- SSH 登录密钥
实践练习
练习 1:理解 Secret
回答以下问题:
- Secret 和 ConfigMap 有什么区别?
- Secret 有哪些类型?
- 为什么 Secret 使用 Base64 编码而不是加密?
练习 2:设计 Secret
为以下场景设计 Secret:
- Web 应用需要访问数据库
- 需要:数据库密码、Redis 密码、API Key
- 考虑安全性和可维护性
小结
| 要点 | 说明 |
|---|---|
| Secret | 存储敏感数据 |
| 数据格式 | Base64 编码的键值对 |
| 使用方式 | 环境变量、卷挂载、镜像拉取 |
| 安全特性 | 编码、加密、RBAC、审计 |
| 核心价值 | 安全存储敏感数据 |
练习编辑器
bash
Loading...