簡體   English   中英

如何為我的非 root 用戶授予對 kube.netes 卷掛載的寫入權限?

[英]How can I give my non-root user write permissions on a kubernetes volume mount?

根據我的理解(基於本指南https://snyk.io/blog/10-kube.netes-security-context-settings-you-should-understand/ ),如果我為某些 kube 指定了以下安全上下文。網莢

securityContext:
  # Enforce to be run as non-root user
  runAsNonRoot: true
  # Random values should be fine
  runAsUser: 1001
  runAsGroup: 1001
  # Automatically convert mounts to user group
  fsGroup: 1001
  # For whatever reasons this is not working
  fsGroupChangePolicy: "Always"

我希望這個 pod 以用戶 1001 和組 1001 的身份運行。這是按預期工作的,因為在容器中運行id會導致: uid=1001 gid=1001 groups=1001

所有掛載的文件系統應該自動被用戶組 1001 訪問,因為我們指定fsGroupfsGroupChangePolicy 我想這也行得通,因為在其中一個安裝的文件夾中運行ls -l時,我可以看到文件的訪問權限如下所示: -rw-r--r-- 1 50004 50004 所有權仍然屬於初始化時使用的 uid 和 gid,但我可以看到該文件現在可供其他人讀取。

現在的問題是如何為我的fsGroup添加寫權限,這些權限似乎仍然缺失?

您需要在 pod/deployment/{supported_kinds} 中添加一個額外的init_container ,並使用命令將安裝在 pod 上的卷的權限授予/更改為容器在運行時使用的用戶 ID。

 initContainers:
  - name: volumepermissions
    image: busybox ## any image having linux utilities mkdir,echo,chown will work.
    imagePullPolicy: IfNotPresent
    env:
      - name: "VOLUME_DATA_DIR"
        value: mountpath_for_the_volume
    command:
      - sh
      - -c
      - |
        mkdir -p $VOLUME_DATA_DIR
        chown -R 1001:1001 $VOLUME_DATA_DIR 

        echo 'Volume permissions OK ✓'
    volumeMounts:
      - name: data
        mountPath: mountpath_for_the_volume

當 pod 中的容器以 root 以外的用戶身份運行並且需要對已安裝卷的寫入權限時,這是必需的。

如果這是一個 helm 模板,這個 init 容器可以創建為一個模板,並在所有 pod/deployments/{supported kinds} 中使用以更改卷權限。

更新:如@The Fool 所述,如果您使用的是 Kube.netes v1.23 或更高版本,它應該按照當前設置工作。 在 v1.23 securityContext.fsGroup 和 securityContext.fsGroupChangePolicy功能進入 GA/stable 之后。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM