在使用docker-vault和kubernetes时出现"mkdir vault: permission denied"的错误提示。

5

我在kubernetes上成功部署了一个基于官方docker-vault镜像的自定义容器,但是在使用vault init命令时出现以下错误:

* failed to initialize barrier: failed to persist keyring: mkdir vault: permission denied

我的Dockerfile如下:
FROM vault:0.8.3

WORKDIR /app
ADD . /app
RUN chmod +x ./configure_vault.sh
CMD ["server", "-config=vault.conf"]

我想要实现的是在容器启动后执行一个shell脚本来配置保险库。我有一个配置脚本,它的开头是这样的:

#!/bin/bash

export VAULT_ADDR="http://127.0.0.1:8200"
vault init -key-shares=1 -key-threshold=1 > vault_credentials
...
// configure some default roles and policies

为了执行它,我将我的Kubernetes Yaml部署文件配置如下:
...
spec:
      containers:
      - image: // my image
        imagePullPolicy: Always
        name: vault
        ports:
          - containerPort: 8200
            name: vaultport
            protocol: TCP
        # Enable mlock for the vault executable to stop
        # memory being swapped to disk so that secrets
        # don’t get written to disk.
        securityContext:
          capabilities:
            add:
              - IPC_LOCK
        volumeMounts:
        - name: vault-volume
          mountPath: /vault/file
        lifecycle:
            postStart:
              exec:
                command: ["/bin/sh", "./configure_vault.sh"]
      volumes:
        - name: vault-volume
          persistentVolumeClaim:
            claimName: vault

我看到vault用户对/vault文件夹有正确的权限,所以我不明白为什么目录创建会失败。我尝试给予vault用户root权限,或者使用 kubernetes exec 手动执行脚本来获取容器中的shell,但都没有成功。
我不确定这是正确的解决方案,欢迎任何建议!

运行该脚本的用户是否属于目标文件夹所在的所有者组? - mickburkejnr
1
啊,愚蠢的错误..!docker-vault镜像创建了一个名为vault的用户,该用户是整个/vault文件夹的所有者。我以为这是它要尝试mkdir的文件夹,但实际上它是在我的Docker /app工作目录中尝试创建它。我给了vault用户/app文件夹的权限,然后它就可以工作了...谢谢@mickburkejnr! - flmg
1
这绝不是愚蠢的错误,只是其中之一。 几乎我所工作/开始的每个项目都会犯这个错误,因为我忘记了用户群体! - mickburkejnr
1个回答

1

您需要检查您的PV。如果您正在使用hostpath,则需要导航到分配Pod的主机,并在PV中指定的目录上授予写入权限。

这样做后,您就可以正常运行了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接