Kubernetes 卷挂载权限对于 Secret 不正确

the*_*mar 6 kubernetes kubernetes-secrets

我正在挂载一个 k8s 机密作为卷挂载,并且 pod 中的文件具有错误的权限。

在我Deploymentvolumes数组中有这个条目:

        - name: ssh-host-keys
          secret:
            secretName: ftp-ssh-host-keys
            defaultMode: 0600
Run Code Online (Sandbox Code Playgroud)

然后像这样安装:

            - mountPath: /etc/ssh/ssh_host_rsa_key
              name: ssh-host-keys
              subPath: ssh_host_rsa_key
              readOnly: true
Run Code Online (Sandbox Code Playgroud)

但是,当我查看Pod文件权限中的文件时:

rw-r--r-- 1 root root 553122 Aug 21  2018 moduli
-rw-r--r-- 1 root root   1723 Aug 21  2018 ssh_config
-rw-r----- 1 root 1337    410 May 11 10:33 ssh_host_ed25519_key
-rw-r----- 1 root 1337   3242 May 11 10:33 ssh_host_rsa_key
-rw-r--r-- 1 root 1337    465 May 11 10:33 sshd_config
Run Code Online (Sandbox Code Playgroud)

即密钥具有权限 0644 而不是 0600。

我不知道为什么会发生这种情况。

Mar*_*ney 14

根据文档,由于 JSON 限制,您必须以十进制表示法指定模式。

查看文档中提供的示例:

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: mypod
    image: redis
    volumeMounts:
    - name: foo
      mountPath: "/etc/foo"
  volumes:
  - name: foo
    secret:
      secretName: mysecret
      defaultMode: 256
Run Code Online (Sandbox Code Playgroud)

十进制的256相当于八进制的0400。在您的具体情况下,您应该使用defaultMode: 384get 0600 来获得所需的权限。

您可以在此处转换八进制权限。

  • 这是 JSON 的限制。不是 YAML! (3认同)

omr*_*oco 6

我认为一个常见的困惑是文件是链接的,因此ls默认情况下会显示链接权限。请在此处查看更多详细信息。

只需添加 -L:ls -laL /path/to/directory/即可取消引用链接

如果这不起作用,也许您正面临这个错误