无法使用 Kubernetes Pod 中的 IAM 角色通过直接命令挂载 s3fs

问题描述

我正在尝试在 EKS 上运行的 Kubernetes 容器内挂载一个 S3 存储桶(使用 IAM 角色而不是密码文件)。

这就是我想要做的,但不起作用:

lifecycle:
    postStart:
        exec:
            command: ["s3fs","-o","use_path_request_style","iam_role=\"<iam-role-name>\"","endpoint=us-west-1",'url="https://s3-us-west-1.amazonaws.com"',"<bucket-name>:<prefix>","<path-to-mount>"]

在容器内运行相同的命令有效,并且我能够看到文件

s3fs  -o use_path_request_style -o iam_role="<iam-role-name>" -o endpoint=us-west-1 -o url="https://s3-us-west-1.amazonaws.com"  <bucket-name>:<prefix> <mount-path>

为了克服这个问题,我在容器内用 configMap 创建了一个脚本文件

apiVersion: v1
kind: ConfigMap
Metadata:
  name: mount-s3-configmap
data:
  mount-s3.sh: |
    s3fs  -o use_path_request_style -o iam_role="<iam-role-name>" -o endpoint=us-west-1 -o url="https://s3-us-west-1.amazonaws.com"  <bucket-name>:<prefix> <mount-path>

并用 postStart 钩子运行这个脚本文件,它完美地挂载了 S3 存储桶

lifecycle:
    postStart:
        exec:
            command: ["/bin/sh","/app/mount-s3.sh"]

我知道这是一个黑客,我不习惯使用它。我不确定,我在第一部分做错了什么,我直接在 s3fs 挂钩中调用 postStart 实用程序命令。

如何直接从 s3fs 挂钩使用 postStart 挂载 S3 存储桶,而不使用此 hack。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)