一、ConfigMap & Secret 核心定位
屬于Kubernetes的配置管理特性,用于解耦應用與配置
1. ConfigMap
作用:存儲非敏感配置數據
存儲內容:
- 環境變量
- 命令行參數
- 配置文件(如JSON/XML/YAML)
- 系統參數(如JVM參數)
2. Secret
作用:存儲敏感信息
存儲內容:
- 數據庫憑證
- API密鑰
- TLS證書
- SSH密鑰
對比特性
特性 | ConfigMap | Secret |
---|---|---|
數據加密 | 明文存儲 | Base64編碼 |
適用場景 | 非敏感配置 | 憑證/密鑰 |
存儲限制 | 1MB | 1MB |
自動更新 | 支持(需配置) | 支持(需配置) |
二、Pod掛載方式
1. 環境變量注入
apiVersion: v1
kind: Pod
metadata:name: myapp-pod
spec:containers:- name: appimage: myapp:v1env:- name: DB_HOSTvalueFrom:configMapKeyRef:name: db-configkey: host- name: DB_PASSWORDvalueFrom:secretKeyRef:name: db-secretkey: password
2. 文件卷掛載
apiVersion: v1
kind: Pod
metadata:name: myapp-pod
spec:containers:- name: appimage: myapp:v1volumeMounts:- name: config-volumemountPath: /etc/app/config- name: secret-volumemountPath: /etc/app/secretvolumes:- name: config-volumeconfigMap:name: app-config- name: secret-volumesecret:secretName: app-secret
三、最佳實踐
- 敏感數據必用Secret:即使Base64不是加密,也比明文安全
- 熱更新策略:
- 環境變量方式:修改后需重建Pod
- 文件卷方式:kubelet定期同步更新(默認1分鐘間隔)
- 配置分離:按環境(dev/test/prod)創建不同ConfigMap
- 權限控制:通過RBAC限制Secret訪問權限
四、創建配置示例
創建ConfigMap:
kubectl create configmap app-config \--from-literal=DB_HOST=mysql-service \--from-literal=CACHE_ENABLED=true
創建Secret:
# 從文件創建
kubectl create secret generic db-credentials \--from-file=./ssl.cert \--from-literal=password='S!B\#d3z'# 專門類型Secret
kubectl create secret tls https-cert \--cert=path/to/cert.crt \--key=path/to/cert.key
上述配置實現了什么功能?開發時如何創建對應的ConfigMap和Secret?
apiVersion: apps/v1
kind: Deployment
spec:template:spec:containers:- name: appenvFrom: # 環境變量注入方式- configMapRef: # 加載 ConfigMap 所有鍵值作為環境變量name: app-config- secretRef: # 加載 Secret 所有鍵值作為環境變量name: db-credentials