配置与密钥管理
掌握 ConfigMap 配置管理
掌握 Secret 密钥管理
能在 Pod 中挂载配置和密钥
核心讲解
配置和代码分离,环境配置不打包进镜像,外部注入。
(1)ConfigMap 配置映射
存非敏感配置数据,键值对、配置文件都可以存。
普通键值对 → 环境变量注入
配置文件 → 挂载成文件到容器里
(2)Secret 密钥
存敏感数据,密码、证书、密钥等,base64 编码存储。
同样可以当环境变量、可以挂载文件
默认只是 base64 编码,不是加密,敏感场景要用 SealedSecret 等加密方案
操作示例
# configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
ENV: "production"
LOG_LEVEL: "info"
app.conf: |
[server]
port = 8080
debug = false
# secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: app-secret
type: Opaque
data:
username: YWRtaW4=
password: MTIzNDU2
# 挂载使用
apiVersion: apps/v1
kind: Deployment
metadata:
name: app
spec:
replicas: 1
selector:
matchLabels:
app: app
template:
metadata:
labels:
app: app
spec:
containers:
- name: app
image: nginx
env:
- name: ENV
valueFrom:
configMapKeyRef:
name: app-config
key: ENV
- name: DB_USER
valueFrom:
secretKeyRef:
name: app-secret
key: username
volumeMounts:
- name: config-volume
mountPath: /etc/app.conf
subPath: app.conf
volumes:
- name: config-volume
configMap:
name: app-config
常见误区
Secret 是加密的:默认只是 base64 编码,谁都能解码,不是加密
配置改了自动生效:挂载的 ConfigMap 更新,容器里不会自动更新,要重启 Pod 或者用工具热更
什么都存 ConfigMap:敏感信息不能存 ConfigMap,必须用 Secret
环境变量可以热更:环境变量启动时注入,改了必须重启 Pod 才生效
课后练习
创建一个 ConfigMap,存应用配置
创建一个 Secret,存用户名密码
在 Deployment 中分别用环境变量和文件挂载使用
思考:ConfigMap 和 Secret 的区别是什么?
