使用 kubectl 执行命令,将文件中的字符串作为标志传递

Using kubectl to exec a command that passes a string from a file as a flag

我正在尝试运行以下命令:

kubectl exec vault-1 -- vault operator raft join -leader-ca-cert=`cat "$VAULT_CACERT"` https://vault-0.vault-internal:8200

此处的目标是获取存储在 $VAULT_CACERT(pod 上的变量)中的路径中的证书文件的内容,并使用 kubectl 将其作为 -leader-ca-cert 传递。当我 运行 我得到 cat: '': No such file or directory 这似乎表明可能正在使用我的本地机器环境。连接到 pod 并 运行 以这种方式运行命令。

我尝试了几个不同的命令,我似乎可以找到一种方法来通过 kubectl 实现我想要的。有没有更好的方法以某种方式传递这些数据?

如果ENV在容器内,那么你不应该在exec命令中使用反引号。使用单引号避免 shell 在本地机器终端上扩展。 所以你可以试试下面的方法

kubectl exec vault-1 -- vault operator raft join -leader-ca-cert='cat "$VAULT_CACERT"' https://vault-0.vault-internal:8200

我测试了类似下面的东西,它似乎对我有用

kubectl exec demo -- sh -c 'cat "$FILE_PATH"'