如何将用户凭据传递到 Kubernetes Pod 内的(用户限制的)安装卷?

2023-12-10

我正在尝试通过 Kubernetes Secret 将用户凭据传递到 Kubernetes Pod 内已安装的受密码保护的目录。 NFS 文件夹/mount/protected有用户访问限制,即只有某些用户可以访问此文件夹。

这是我的 Pod 配置:

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  volumes:
  - name: my-volume
    hostPath:
      path: /mount/protected
      type: Directory
    secret:
      secretName: my-secret
  containers:
  - name: my-container
    image: <...>
    command: ["/bin/sh"]
    args: ["-c", "python /my-volume/test.py"]
    volumeMounts:
    - name: my-volume
      mountPath: /my-volume

应用它时,我收到以下错误:

The Pod "my-pod" is invalid:
* spec.volumes[0].secret: Forbidden: may not specify more than 1 volume type
* spec.containers[0].volumeMounts[0].name: Not found: "my-volume"

我根据以下指南创建了 my-secret:
https://kubernetes.io/docs/tasks/inject-data-application/distribute-credentials-secure/#create-a-secret
所以基本上:

apiVersion: v1
kind: Secret
metadata:
  name: my-secret
data:
  username: bXktYXBw
  password: PHJlZGFjdGVkPg==

但是当我挂载文件夹时/mount/protected with:

spec:
  volumes:
  - name: my-volume
    hostPath:
      path: /mount/protected
      type: Directory

我收到权限被拒绝错误python: can't open file '/my-volume/test.py': [Errno 13] Permission denied当运行挂载此卷路径的 Pod 时。

我的问题是如何告诉我的 Pod 它应该使用特定的用户凭据来访问此安装的文件夹?


你试图告诉 Kubernetesmy-volume应该从获取其内容both一个主机路径和一个 Secret,并且只能有其中一个。

您不需要手动指定主机路径。 Kubernetes 将找出合适的位置来放置 Secret 内容,并且它仍然在mountPath您在容器内指定。 (指定hostPath:at all 通常是错误的,除非您可以保证该路径将存在并包含您期望的内容every集群中的节点。)

所以改变:

volumes:
- name: my-volume
  secret:
    secretName: my-secret
  # but no hostPath
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将用户凭据传递到 Kubernetes Pod 内的(用户限制的)安装卷? 的相关文章

随机推荐