结论:两者都用于把配置从容器镜像中解耦,ConfigMap 存非敏感配置(环境变量、配置文件),Secret 存敏感数据(密码、Token、TLS 证书),区别在存储与权限处理上。

展开:Secret 的 data 字段用 base64 编码——注意这只是编码不是加密,etcd 中默认仍是明文存储,生产必须开启静态加密(EncryptionConfiguration with KMS provider),并配合 RBAC 限制读取、避免挂到不该挂载的 Pod。使用方式三种:env 注入、volume 挂载、imagePullSecrets。关键差异在更新行为:volume 挂载的 ConfigMap/Secret 会由 kubelet 自动热更新(有分钟级延迟),但应用需自己 watch 文件变化才生效;env 方式注入的值 Pod 生命周期内不变,改了必须重启 Pod。常见实践:配置改动通过重建 Pod(滚动更新)生效,配合 Reloader 之类的控制器自动触发;敏感数据进阶方案是外部密钥管理(Vault、云厂商 Secret Manager + CSI Driver),Secret 只做薄封装。易错点:1)把 Secret 打进镜像层是严重安全事故;2)ConfigMap 单对象限 1MB,不适合存大文件;3)envFrom 引用不存在的 key 会导致容器启动失败。