Kubernetes项目中的Projected Volumes详解

Kubernetes项目中的Projected Volumes详解

website Kubernetes website and documentation repo: website 项目地址: https://gitcode.com/gh_mirrors/webs/website

概述

在Kubernetes中,Projected Volumes(投射卷)是一种特殊的卷类型,它允许将多个不同类型的卷源映射到同一个目录中。这种设计为容器提供了统一访问多种配置和敏感数据的方式,同时保持了Kubernetes资源管理的灵活性。

核心概念

Projected Volume本质上是一个虚拟目录,它将以下类型的卷源合并到同一个挂载点:

  1. Secret:用于存储敏感信息,如密码、OAuth令牌等
  2. DownwardAPI:用于将Pod和容器元数据暴露给容器
  3. ConfigMap:用于存储非敏感的配置数据
  4. ServiceAccountToken:用于注入服务账户令牌
  5. ClusterTrustBundle:用于注入集群信任包(需要特定功能门控)

所有源必须与Pod位于同一命名空间中,这是Kubernetes安全模型的基本要求。

配置示例

基础配置示例

下面是一个典型的Projected Volume配置示例,它同时包含了Secret、DownwardAPI和ConfigMap:

apiVersion: v1
kind: Pod
metadata:
  name: volume-test
spec:
  containers:
  - name: container-test
    image: busybox:1.28
    volumeMounts:
    - name: all-in-one
      mountPath: "/projected-volume"
      readOnly: true
  volumes:
  - name: all-in-one
    projected:
      sources:
      - secret:
          name: mysecret
          items:
            - key: username
              path: my-group/my-username
      - downwardAPI:
          items:
            - path: "labels"
              fieldRef:
                fieldPath: metadata.labels
      - configMap:
          name: myconfigmap
          items:
            - key: config
              path: my-group/my-config

权限模式设置

Projected Volume支持设置文件权限模式:

apiVersion: v1
kind: Pod
metadata:
  name: volume-test
spec:
  containers:
  - name: container-test
    image: busybox:1.28
    volumeMounts:
    - name: all-in-one
      mountPath: "/projected-volume"
  volumes:
  - name: all-in-one
    projected:
      sources:
      - secret:
          name: mysecret
          items:
            - key: username
              path: my-group/my-username
              mode: 511
      - configMap:
          name: myconfigmap
          items:
            - key: config
              path: my-group/my-config
              mode: 511
      defaultMode: 0755

注意:

  • defaultMode设置整个投射卷的默认权限
  • 每个源可以单独设置mode覆盖默认值
  • 权限值使用八进制表示(如511对应八进制0777)

ServiceAccountToken投射卷

ServiceAccountToken是一种特殊类型的投射卷,用于将服务账户令牌注入Pod:

apiVersion: v1
kind: Pod
metadata:
  name: sa-token-test
spec:
  containers:
  - name: container-test
    image: busybox:1.28
    volumeMounts:
    - name: token-vol
      mountPath: "/service-account"
      readOnly: true
  serviceAccountName: default
  volumes:
  - name: token-vol
    projected:
      sources:
      - serviceAccountToken:
          audience: api
          expirationSeconds: 3600
          path: token

关键参数说明:

  • audience:令牌的目标受众,默认为API服务器
  • expirationSeconds:令牌有效期(默认1小时,最小10分钟)
  • path:令牌文件在卷中的相对路径

ClusterTrustBundle投射卷

ClusterTrustBundle是Kubernetes中用于管理集群信任证书的高级功能:

apiVersion: v1
kind: Pod
metadata:
  name: pod-with-cluster-trust-bundle
spec:
  containers:
  - name: test-container
    image: registry.k8s.io/busybox
    volumeMounts:
    - name: cluster-trust-bundle
      mountPath: "/etc/cluster-trust-bundle"
      readOnly: true
  volumes:
  - name: cluster-trust-bundle
    projected:
      sources:
      - clusterTrustBundle:
          name: example.com:mysigner:foo
          signerName: "example.com/mysigner"
          labelSelector:
            matchLabels:
              environment: production
          path: "foo.pem"
          optional: false

特点:

  • 支持按名称或签名者名称选择证书包
  • 自动合并和更新证书文件
  • 可设置optional控制启动行为

安全上下文交互

Linux系统

在Linux Pod中,当设置了RunAsUser时:

  • 投射文件将具有正确的所有权设置
  • 服务账户令牌文件权限默认为0600
  • 临时容器必须使用相同的runAsUser才能访问令牌

Windows系统

Windows系统有所不同:

  • 由于SAM数据库隔离,所有权设置不被强制执行
  • 默认情况下,管理员用户具有完全控制权,普通用户具有读取和执行权限
  • 不建议在Windows Pod中使用RunAsUser

最佳实践

  1. 合理设置文件权限,遵循最小权限原则
  2. 敏感数据应使用Secret而非ConfigMap
  3. 服务账户令牌应设置适当的有效期
  4. 避免在Windows Pod中使用Linux特有的安全设置
  5. 使用optional字段处理可能缺失的资源

通过合理使用Projected Volumes,可以简化容器配置管理,提高安全性,同时保持配置的灵活性和可维护性。

website Kubernetes website and documentation repo: website 项目地址: https://gitcode.com/gh_mirrors/webs/website

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

仰北帅Bobbie

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值