【发布时间】:2023-03-26 04:29:01
【问题描述】:
我使用 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,但都没有成功。
我不确定这是正确的方法,因此欢迎任何建议!
【问题讨论】:
-
与您一起运行脚本的用户是否在它尝试
mkdir的文件夹的所有者组中? -
啊,愚蠢的错误..! docker-vault 映像会创建一个 vault 用户,该用户是整个 /vault 文件夹的所有者。我以为这是它试图将
mkdir放入的文件夹,但它实际上是在尝试在我的 Docker /app 工作目录中创建它。我授予 Vault 用户对 /app 文件夹的权限,并且它起作用了......谢谢@mickburkejnr! -
根本不是一个愚蠢的错误,只是其中之一。几乎我从事/开始的每个项目我总是犯这个错误,因为我忘记了用户组!
标签: docker kubernetes hashicorp-vault