侧边栏壁纸
博主头像
colo

欲买桂花同载酒

  • 累计撰写 1824 篇文章
  • 累计收到 0 条评论

Kubernetes中ConfigMap与Secret的基础使用

2025-12-11 / 0 评论 / 3 阅读

题目

Kubernetes中ConfigMap与Secret的基础使用

信息

  • 类型:问答
  • 难度:⭐

考点

ConfigMap作用,Secret作用,配置注入方式

快速回答

ConfigMap和Secret是Kubernetes中管理配置数据的资源对象:

  • ConfigMap:存储非敏感配置(如环境变量、配置文件)
  • Secret:存储敏感数据(如密码、密钥),默认Base64编码
  • 注入方式
    1. 作为环境变量
    2. 挂载为卷(Volume)
## 解析

1. 核心概念

ConfigMap:用于解耦容器镜像与配置,存储键值对或配置文件(如application.properties)。
Secret:专用于敏感数据(如API密钥、数据库密码),存储时自动Base64编码(非加密)。

2. 创建示例

ConfigMap创建(YAML)

apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  # 键值对
  LOG_LEVEL: "INFO"
  # 配置文件
  application.properties: |
    server.port=8080
    db.host=mysql-service

Secret创建(命令行)

# 创建通用Secret
kubectl create secret generic db-secret \
  --from-literal=DB_USER=admin \
  --from-literal=DB_PASSWORD='S3cr3t!'

# 查看Base64编码值(自动处理)
kubectl get secret db-secret -o jsonpath='{.data}'

3. 注入到Pod的两种方式

方式一:环境变量注入

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
spec:
  containers:
    - name: app-container
      image: my-app:latest
      env:
        # 从ConfigMap注入
        - name: LOG_LEVEL
          valueFrom:
            configMapKeyRef:
              name: app-config
              key: LOG_LEVEL
        # 从Secret注入
        - name: DB_PASSWORD
          valueFrom:
            secretKeyRef:
              name: db-secret
              key: DB_PASSWORD

方式二:卷挂载(适合配置文件)

spec:
  containers:
    - name: app-container
      volumeMounts:
        # 挂载ConfigMap
        - name: config-volume
          mountPath: "/etc/app-config"
        # 挂载Secret
        - name: secret-volume
          mountPath: "/etc/creds"
          readOnly: true
  volumes:
    - name: config-volume
      configMap:
        name: app-config
    - name: secret-volume
      secret:
        secretName: db-secret

4. 最佳实践与常见错误

  • 最佳实践
    • Secret需配合RBAC限制访问权限
    • 配置文件变更后需重启Pod(除非使用Sidecar自动更新)
    • 敏感数据优先用Secret(避免ConfigMap)
  • 常见错误
    • 误将Secret当ConfigMap使用(导致敏感信息泄露)
    • 忘记Base64解码(查看Secret时需echo '编码值' | base64 -d
    • 挂载路径冲突(多个卷避免重复路径)

5. 扩展知识

  • 不可变Secret:设置immutable: true提升安全性
  • 加密方案:结合KMSExternal Secrets实现加密存储
  • 与Deployment集成:实际场景中通常将ConfigMap/Secret关联到Deployment而非直接定义在Pod