第四部分:ConfigMap/Secret 资源介绍

第四部分:ConfigMap/Secret 资源介绍
青萍叙事📝 前言
在 Kubernetes 中,应用配置与敏感信息的管理是非常核心的能力。
ConfigMap 用于存储非敏感的配置信息,而 Secret 则专门存储敏感信息(如密码、证书、API Token)。
它们都能以挂载文件或环境变量的方式注入到 Pod 中,从而实现应用与配置的解耦,提升可维护性与安全性。
🧭 背景介绍
在真实的生产环境中,应用往往需要依赖外部服务和环境配置。例如:
- 一个电商系统可能需要 数据库连接信息、Redis 缓存配置;
- 一个微服务架构下的支付服务需要 第三方支付网关的 API Key;
- 一个多环境部署的应用(开发/测试/生产)需要 不同的配置文件;
- 企业内部的 CI/CD 流程需要在 Pod 启动时动态注入配置。
如果将这些配置硬编码在容器镜像中,不仅不灵活,还会带来安全隐患。ConfigMap 与 Secret 的出现,正是为了解决这一痛点:
- ConfigMap → 提供统一的非敏感配置存储,支持多环境快速切换;
- Secret → 提供敏感信息的安全管理,避免将密码、证书硬编码在代码中。
🧠 本章知识卡片
🚀 本章小节
1️⃣ 什么是 ConfigMap?
- ConfigMap 是一种 Key-Value 形式的配置存储对象。
- 适用于存储配置信息,例如应用的配置文件、环境变量、命令行参数等。
- 数据 不加密,仅做明文存储,适合非敏感信息。
简单示例如下:
1 | apiVersion: v1 |
2️⃣ 什么是 Secret?
- Secret 专门用于存储敏感信息(密码、Token、证书等)。
- Kubernetes 默认会对 Secret 进行 Base64 编码 存储,并可结合 KMS 插件进行更安全的加密。
- Secret 默认挂载到 Pod 的 /etc/ 路径下,或通过环境变量注入。
简单示例如下:
1 | apiVersion: v1 |
3️⃣ 实战示例:在 Pod 中使用
作为环境变量注入:
1 | apiVersion: v1 |
以 Volume 挂载:
1 | apiVersion: v1 |
4️⃣ 热加载场景
在一些需要频繁调整配置的场景中(如 Nginx、Prometheus、业务应用配置文件),我们往往希望 不必重启 Pod 就能让应用加载最新配置。
这时,Kubernetes 提供的 ConfigMap / Secret Volume 挂载 就能发挥作用:
- 挂载方式:
将 ConfigMap 或 Secret 以文件形式挂载到容器的指定目录(如 /etc/config/)。 - 更新机制:
当 ConfigMap/Secret 被更新后,Kubernetes 会在后台将挂载的文件同步更新(一般有 秒级延迟)。 - 热加载实现:
如果应用本身支持 reload 信号 或 配置自动检测,即可在无需重启 Pod 的情况下,加载新的配置。
实战示例:Nginx 动态加载配置
1 | apiVersion: v1 |
在更新 ConfigMap 后,只需执行:
1 | kubectl exec -it <nginx-pod> -- nginx -s reload |
即可让 Nginx 在不重启 Pod 的情况下应用新配置,实现 热加载。
5️⃣ 常用命令
ConfigMap 常用命令:
| 命令 | 用途 |
|---|---|
kubectl create configmap app-config --from-literal=APP_MODE=dev |
从字面量创建 ConfigMap |
kubectl create configmap app-config --from-file=config.json |
从文件创建 ConfigMap |
kubectl get configmap |
查看所有 ConfigMap |
kubectl describe configmap app-config |
查看 ConfigMap 详情 |
kubectl edit configmap app-config |
编辑 ConfigMap |
Secret 常用命令:
| 命令 | 用途 |
|---|---|
kubectl create secret generic db-secret --from-literal=username=admin --from-literal=password=123456 |
从字面量创建 Secret |
kubectl create secret generic db-secret --from-file=ssh-privatekey=id_rsa |
从文件创建 Secret |
kubectl create secret docker-registry regcred --docker-username=user --docker-password=pwd --docker-server=registry.cn-hangzhou.aliyuncs.com |
创建镜像仓库认证 Secret |
kubectl get secret |
查看所有 Secret |
kubectl describe secret db-secret |
查看 Secret 信息(不显示明文) |
✅ 总结
ConfigMap 与 Secret 是 Kubernetes 中配置管理和安全存储的基石:
- ConfigMap 管理非敏感的配置信息,实现应用与环境解耦;
- Secret 管理敏感数据,需结合加密方案保障安全;
- 两者都支持通过 环境变量 或 Volume 挂载 注入 Pod;
- 配合应用的 reload 机制,可实现动态热加载;
- 合理使用能提升系统的 灵活性、安全性与可维护性。
📝 前言
在 Kubernetes 中,应用配置与敏感信息的管理是非常核心的能力。
ConfigMap 用于存储非敏感的配置信息,而 Secret 则专门存储敏感信息(如密码、证书、API Token)。
它们都能以挂载文件或环境变量的方式注入到 Pod 中,从而实现应用与配置的解耦,提升可维护性与安全性。
🧭 背景介绍
在真实的生产环境中,应用往往需要依赖外部服务和环境配置。例如:
- 一个电商系统可能需要 数据库连接信息、Redis 缓存配置;
- 一个微服务架构下的支付服务需要 第三方支付网关的 API Key;
- 一个多环境部署的应用(开发/测试/生产)需要 不同的配置文件;
- 企业内部的 CI/CD 流程需要在 Pod 启动时动态注入配置。
如果将这些配置硬编码在容器镜像中,不仅不灵活,还会带来安全隐患。ConfigMap 与 Secret 的出现,正是为了解决这一痛点:
- ConfigMap → 提供统一的非敏感配置存储,支持多环境快速切换;
- Secret → 提供敏感信息的安全管理,避免将密码、证书硬编码在代码中。
🧠 本章知识卡片
🚀 本章小节
1️⃣ 什么是 ConfigMap?
- ConfigMap 是一种 Key-Value 形式的配置存储对象。
- 适用于存储配置信息,例如应用的配置文件、环境变量、命令行参数等。
- 数据 不加密,仅做明文存储,适合非敏感信息。
简单示例如下:
1 | apiVersion: v1 |
2️⃣ 什么是 Secret?
- Secret 专门用于存储敏感信息(密码、Token、证书等)。
- Kubernetes 默认会对 Secret 进行 Base64 编码 存储,并可结合 KMS 插件进行更安全的加密。
- Secret 默认挂载到 Pod 的 /etc/ 路径下,或通过环境变量注入。
简单示例如下:
1 | apiVersion: v1 |
3️⃣ 实战示例:在 Pod 中使用
作为环境变量注入:
1 | apiVersion: v1 |
以 Volume 挂载:
1 | apiVersion: v1 |
4️⃣ 热加载场景
在一些需要频繁调整配置的场景中(如 Nginx、Prometheus、业务应用配置文件),我们往往希望 不必重启 Pod 就能让应用加载最新配置。
这时,Kubernetes 提供的 ConfigMap / Secret Volume 挂载 就能发挥作用:
- 挂载方式:
将 ConfigMap 或 Secret 以文件形式挂载到容器的指定目录(如 /etc/config/)。 - 更新机制:
当 ConfigMap/Secret 被更新后,Kubernetes 会在后台将挂载的文件同步更新(一般有 秒级延迟)。 - 热加载实现:
如果应用本身支持 reload 信号 或 配置自动检测,即可在无需重启 Pod 的情况下,加载新的配置。
实战示例:Nginx 动态加载配置
1 | apiVersion: v1 |
在更新 ConfigMap 后,只需执行:
1 | kubectl exec -it <nginx-pod> -- nginx -s reload |
即可让 Nginx 在不重启 Pod 的情况下应用新配置,实现 热加载。
5️⃣ 常用命令
ConfigMap 常用命令:
| 命令 | 用途 |
|---|---|
kubectl create configmap app-config --from-literal=APP_MODE=dev |
从字面量创建 ConfigMap |
kubectl create configmap app-config --from-file=config.json |
从文件创建 ConfigMap |
kubectl get configmap |
查看所有 ConfigMap |
kubectl describe configmap app-config |
查看 ConfigMap 详情 |
kubectl edit configmap app-config |
编辑 ConfigMap |
Secret 常用命令:
| 命令 | 用途 |
|---|---|
kubectl create secret generic db-secret --from-literal=username=admin --from-literal=password=123456 |
从字面量创建 Secret |
kubectl create secret generic db-secret --from-file=ssh-privatekey=id_rsa |
从文件创建 Secret |
kubectl create secret docker-registry regcred --docker-username=user --docker-password=pwd --docker-server=registry.cn-hangzhou.aliyuncs.com |
创建镜像仓库认证 Secret |
kubectl get secret |
查看所有 Secret |
kubectl describe secret db-secret |
查看 Secret 信息(不显示明文) |
✅ 总结
ConfigMap 与 Secret 是 Kubernetes 中配置管理和安全存储的基石:
- ConfigMap 管理非敏感的配置信息,实现应用与环境解耦;
- Secret 管理敏感数据,需结合加密方案保障安全;
- 两者都支持通过 环境变量 或 Volume 挂载 注入 Pod;
- 配合应用的 reload 机制,可实现动态热加载;
- 合理使用能提升系统的 灵活性、安全性与可维护性。
















