在 Kubernetes 中,ConfigMap 和 Secret 是两种用于管理配置信息的资源。它们都是将配置信息与应用解耦的工具,但在安全性和用途上有所不同。
1. ConfigMap
ConfigMap 用于存储非敏感的配置信息,例如环境变量、配置文件、命令行参数等。它将配置信息以键值对的形式存储,并可以在 Pod 中使用。
ConfigMap 的常见用途
存储环境变量。
存储配置文件内容。
存储命令行参数。
创建 ConfigMap
有多种方式创建 ConfigMap:
直接从命令行创建:
kubectl create configmap example-config --from-literal=key1=value1 --from-literal=key2=value2
从文件创建:
kubectl create configmap example-config --from-file=path/to/config/file
使用 YAML 文件创建:
apiVersion: v1
kind: ConfigMap
metadata:
name: example-config
data:
key1: value1
key2: value2
然后应用配置:
kubectl apply -f configmap.yaml
在 Pod 中使用 ConfigMap
ConfigMap 可以通过以下方式在 Pod 中使用:
作为环境变量:
env:
- name: MY_KEY
valueFrom:
configMapKeyRef:
name: example-config
key: key1
作为卷挂载:
volumes:
- name: config-volume
configMap:
name: example-config
volumeMounts:
- name: config-volume
mountPath: /etc/config
2. Secret
Secret 与 ConfigMap 类似,但用于存储敏感信息,例如密码、API 密钥、证书等。Secret 中的数据会进行 Base64 编码,并且在 Kubernetes 中受到更严格的访问控制。
Secret 的常见用途
存储数据库密码。
存储 API 令牌或认证信息。
存储 TLS 证书和密钥。
创建 Secret
同样有多种方式创建 Secret:
从命令行创建:
kubectl create secret generic example-secret --from-literal=username=myuser --from-literal=password=mypassword
从文件创建:
kubectl create secret ge