使用 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"'
我正在尝试运行以下命令:
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"'