" mkdir vault:许可被拒绝"当使用docker-vault和kubernetes时

时间:2017-10-17 15:58:05

标签: docker kubernetes hashicorp-vault

我使用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脚本以配置Vault。我有一个如下所示的配置脚本:

#!/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用户授予root权限或手动执行脚本,方法是使用kubernetes exec获取shell到容器,但没有一个工作。

我不确定这是正确的方法,所以欢迎任何建议!

1 个答案:

答案 0 :(得分:0)

您将必须检查您的PV。如果使用主机路径,则必须导航到计划了pod的主机,并授予对PV中指定目录的写权限。 之后你应该很好。