projected 卷做什么
它把配置映射、密钥、向下接口与临时服务账号令牌合并挂载到同一个目录里。相比每种来源各挂一个卷,合并后容器内的路径更少、清单更短,应用只需读取一个目录。各来源按声明顺序处理,同名文件会被后面的来源覆盖。
基本信息
| 适用平台 | Kubernetes 1.20+ |
|---|---|
| 支持来源 | 配置映射、密钥、向下接口、服务账号令牌 |
| 权限控制 | defaultMode 统一设置目录权限 |
| 覆盖规则 | 同名文件按来源声明顺序,后者覆盖前者 |
| 典型用途 | 把配置与令牌放到同一目录供应用统一读取 |
典型使用场景
- 应用约定从同一目录读取全部配置,避免挂载多个卷
- 需要把 Pod 自身的名称、命名空间与配置一起放入目录
- 为外部系统签发短期令牌,需要独立控制有效期与受众
- 精简清单:把多个数据来源合并成一次卷声明
- 调整落盘文件名,使其符合应用期望的命名规范
projected 示例
projected 示例
volumes:
- name: all-in-one
projected:
defaultMode: 0440 # 统一权限
sources:
- secret:
name: app-secret
- configMap:
name: app-config
- downwardAPI:
items:
- path: pod-name
fieldRef:
fieldPath: metadata.name
- serviceAccountToken:
path: token
expirationSeconds: 3600 # 令牌有效期
audience: vault验证挂载结果
验证挂载结果
kubectl exec -it web-x -- ls -l /var/run/projected # 目录内容与权限
kubectl exec -it web-x -- cat /var/run/projected/pod-name # 向下接口是否写入
kubectl describe pod web-x | grep -A5 projected # 卷来源与配置来源与用途
| 来源 | 内容 | 说明 |
|---|---|---|
| configMap | 普通配置项 | 可选择指定键并指定落盘路径 |
| secret | 敏感数据 | 默认权限更严格,注意应用能否读取 |
| downwardAPI | Pod 与容器元信息 | 用于标识实例身份 |
| serviceAccountToken | 短期服务账号令牌 | 可设置有效期与受众 |
每个来源都能用条目与路径字段精确控制落盘文件名,目录权限由统一字段决定。权限要求差异较大的数据,拆成两个卷反而更清晰。
合并到同一目录后,多个来源中的同名文件会互相覆盖,而且不会有额外提示。出现内容与预期不符时,要按声明顺序逐个核对来源。