ConfigMap 和 Secret 是 K8s 中管理配置的两大工具。
ConfigMap
存储非敏感配置——数据库地址、日志级别、环境变量等:
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
database-url: "jdbc:mysql://db:3306/mydb"
log-level: "debug"
Secret
存储敏感信息——密码、Token、证书等。值需要 base64 编码:
apiVersion: v1
kind: Secret
metadata:
name: db-secret
type: Opaque
data:
username: YWRtaW4= # base64("admin")
password: cGFzc3dvcmQ= # base64("password")
注入方式
环境变量
env:
- name: DB_URL
valueFrom:
configMapKeyRef:
name: app-config
key: database-url
挂载为文件
volumes:
- name: config-volume
configMap:
name: app-config
文件挂载的好处:支持热更新(ConfigMap 更新后 Kubelet 会自动同步)。
Secret 的安全问题
- Secret 默认只做 base64 编码,不是加密——base64 可以轻松解码
- 解决方案:启用 Etcd 加密(EncryptionConfiguration)
- 更安全的方案:使用外部密钥管理(HashiCorp Vault、AWS Secrets Manager)
- 限制 Secret 的 RBAC 权限
最佳实践
- ConfigMap 放非敏感配置,Secret 放密码/Token
- 生产环境密码不要直接写在 Secret yaml 里——用 CI/CD 注入
- ConfigMap 和 Secret 有大小限制(1MB),不要放大量数据
- 善用 immutable 特性(
immutable: true)提升性能
配置管理看着简单,但在生产环境中做错一步就会导致安全事故。
评论
评论已关闭。