将 docker-vault 与 kubernetes 一起使用时出现“mkdirVault:权限被拒绝”

flm*_*lmg 5 docker kubernetes hashicorp-vault

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

\n\n
* failed to initialize barrier: failed to persist keyring: mkdir vault: permission denied\n
Run Code Online (Sandbox Code Playgroud)\n\n

我的 Dockerfile 如下:

\n\n
FROM vault:0.8.3\n\nWORKDIR /app\nADD . /app\nRUN chmod +x ./configure_vault.sh\nCMD ["server", "-config=vault.conf"]\n
Run Code Online (Sandbox Code Playgroud)\n\n

我想要实现的是在容器启动后执行 shell 脚本以配置保管库。我有一个这样开始的配置脚本:

\n\n
#!/bin/bash\n\nexport VAULT_ADDR="http://127.0.0.1:8200"\nvault init -key-shares=1 -key-threshold=1 > vault_credentials\n...\n// configure some default roles and policies\n
Run Code Online (Sandbox Code Playgroud)\n\n

为了执行它,我配置了 kubernetes yaml 部署文件,如下所示:

\n\n
...\nspec:\n      containers:\n      - image: // my image\n        imagePullPolicy: Always\n        name: vault\n        ports:\n          - containerPort: 8200\n            name: vaultport\n            protocol: TCP\n        # Enable mlock for the vault executable to stop\n        # memory being swapped to disk so that secrets\n        # don\xe2\x80\x99t get written to disk.\n        securityContext:\n          capabilities:\n            add:\n              - IPC_LOCK\n        volumeMounts:\n        - name: vault-volume\n          mountPath: /vault/file\n        lifecycle:\n            postStart:\n              exec:\n                command: ["/bin/sh", "./configure_vault.sh"]\n      volumes:\n        - name: vault-volume\n          persistentVolumeClaim:\n            claimName: vault\n
Run Code Online (Sandbox Code Playgroud)\n\n

我可以看到 Vault 用户对 /vault 文件夹拥有正确的权限,因此我似乎无法理解为什么目录创建会失败。我尝试向 Vault 用户授予 root 权限,或者通过使用kubernetes exec来获取容器的 shell 来手动执行脚本,但这些都不起作用。

\n\n

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

\n

小智 1

您必须检查您的 PV。如果您使用的是 hostpath,那么您必须导航到正在调度 pod 的主机,并授予对 PV 中指定的目录的写入权限。在那之后你应该会很好。