UID/GID 分配

在 Kubernetes 中,每个 Pod 都以特定的用户 ID(UID)和组 ID(GID)运行,以确保安全性和适当的访问控制。默认情况下,Pod 可能以 root 用户(UID 0)身份运行,这可能带来安全风险。为了增强安全性,建议为 Pod 分配非 root 的 UID 和 GID。

ACP 允许自动为命名空间分配特定的 UID 和 GID 范围,以确保该命名空间内的所有 Pod 都以指定的用户和组 ID 运行。

目录

启用 UID/GID 分配

要为命名空间启用 UID/GID 分配,请按照以下步骤操作:

  1. 进入 项目管理
  2. 在左侧导航栏点击 命名空间
  3. 点击目标命名空间。
  4. 点击 操作 > 更新 Pod 安全策略
  5. 强制执行 选项值更改为 受限,点击 更新
  6. 点击 标签 旁的编辑图标,添加键为 security.cpaas.io/enabled,值为 true 的标签,点击 更新。(要禁用,请移除此标签或将值设置为 false。)
  7. 点击 保存

验证 UID/GID 分配

UID/GID 范围

在命名空间详情页,可以在 注解 中查看分配的 UID 和 GID 范围。

security.cpaas.io/uid-range 注解指定了该命名空间中 Pod 可分配的 UID/GID 范围,例如 security.cpaas.io/uid-range=1000002000-1000011999,表示 uid/gid 范围是从 1000002000 到 1000011999。

验证 Pod 的 UID/GID

如果 Pod 在 securityContext 中未指定 runAsUserfsGroup,平台将自动分配 UID 范围中的第一个值。

  1. 在该命名空间中创建一个 Pod,YAML 配置如下:

    apiVersion: v1
    kind: Pod
    metadata:
      name: uid-gid-test-pod
    spec:
      containers:
      - name: test-container
        image: busybox
        command: ["sleep", "3600"]
  2. Pod 创建后,获取 Pod 的 yaml 以检查分配的 UID 和 GID:

    kubectl get pod uid-gid-test-pod -n <namespace-name> -o yaml

Pod 的 YAML 会在 securityContext 部分显示分配的 UID 和 GID:

apiVersion: v1
kind: Pod
metadata:
  name: uid-gid-test-pod
spec:
  containers:
  - name: test-container
    image: busybox
    command: ["sleep", "3600"]
    securityContext:
      runAsUser: 1000000
  securityContext:
    fsGroup: 1000000

如果 Pod 在 securityContext 中指定了 runAsUser 和 fsGroup,平台会验证指定的 UID/GID 是否在分配范围内。如果不在范围内,Pod 创建将失败。

  1. 在该命名空间中创建一个 Pod,YAML 配置如下:

    apiVersion: v1
    kind: Pod
    metadata:
      name: uid-gid-test-pod-invalid
    spec:
      containers:
      - name: test-container
        image: busybox
        command: ["sleep", "3600"]
        securityContext:
          runAsUser: 2000000  # 无效的 UID,超出分配范围
      securityContext:
        fsGroup: 2000000  # 无效的 GID,超出分配范围
  2. 应用该 YAML 后,Pod 创建将失败,并显示错误信息,提示指定的 UID/GID 超出分配范围。