我使用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到容器,但没有一个工作。
我不确定这是正确的方法,所以欢迎任何建议!
答案 0 :(得分:0)
您将必须检查您的PV。如果使用主机路径,则必须导航到计划了pod的主机,并授予对PV中指定目录的写权限。 之后你应该很好。