44·配置管理进阶

Secret 简介

kubernetessecretconfigurationsecurity

Secret 简介

学习目标

  1. 理解 Secret 的作用和使用场景
  2. 掌握 Secret 与 ConfigMap 的区别
  3. 了解 Secret 的安全特性

核心概念

一句话解释

Secret 是 Kubernetes 中用于存储敏感数据的 API 对象,如密码、Token、证书等。

为什么需要 Secret

问题:敏感数据如何管理?

错误做法:
┌─────────────────────────────────────┐
│           Pod                       │
│  ┌─────────────────────────────┐   │
│  │  应用代码                    │   │
│  │  - 数据库密码: mypassword  │   │
│  │  - API Key: sk-123456      │   │
│  └─────────────────────────────┘   │
└─────────────────────────────────────┘
问题:
1. 密码硬编码在代码中
2. 密码泄露到版本控制
3. 无法轮换密码

正确做法:
┌─────────────────────────────────────┐
│           Pod                       │
│  ┌─────────────────────────────┐   │
│  │  应用代码                    │   │
│  │  读取环境变量或文件          │   │
│  └─────────────────────────────┘   │
└─────────────────────────────────────┘
           ↑ 读取敏感数据
┌─────────────────────────────────────┐
│         Secret                      │
│  - 数据库密码: ****               │
│  - API Key: ****                 │
└─────────────────────────────────────┘

Secret vs ConfigMap

特性SecretConfigMap
数据类型敏感数据非敏感数据
存储方式Base64 编码明文
典型用途密码、Token、证书配置文件、环境变量
大小限制1MB1MB
加密支持 etcd 加密不支持

Secret 的类型

类型说明典型用途
Opaque通用类型密码、Token
kubernetes.io/tlsTLS 证书HTTPS 证书
kubernetes.io/dockerconfigjsonDocker 镜像仓库认证私有镜像拉取
kubernetes.io/basic-auth基本认证用户名密码
kubernetes.io/ssh-authSSH 认证SSH 私钥
kubernetes.io/service-account-tokenServiceAccount TokenAPI 访问

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

回答以下问题:

  1. Secret 和 ConfigMap 有什么区别?
  2. Secret 有哪些类型?
  3. 为什么 Secret 使用 Base64 编码而不是加密?

练习 2:设计 Secret

为以下场景设计 Secret:

  • Web 应用需要访问数据库
  • 需要:数据库密码、Redis 密码、API Key
  • 考虑安全性和可维护性

小结

要点说明
Secret存储敏感数据
数据格式Base64 编码的键值对
使用方式环境变量、卷挂载、镜像拉取
安全特性编码、加密、RBAC、审计
核心价值安全存储敏感数据

练习编辑器

bash
Loading...

继续学习

完成本课后,建议继续学习下一课「创建 Secret」 以巩固所学知识。