C# Kubernetes客户端执行命令到Pod容器问题

e3bfsja2  于 2023-10-17  发布在  Kubernetes
关注(0)|答案(1)|浏览(110)

我有一个用.NET7编写的自定义Web应用程序,我正在使用Kubernetes Client(C#)与Kubernetes Cluster(Azure)交互。到目前为止一切都很好,一切都像预期的那样工作,我到达了我需要与Pod Container通信的点。
让我们从一个简单的例子开始,只需创建一个新文件:
下面的命令返回BadRequest,不管我到目前为止尝试了什么:

string command_test = "touch servers_.json";
var stream_test = client.CoreV1.ConnectPostNamespacedPodExec(podname, space, command_test, container, true, true, false, false);

然后切换到WebSocketPagedPodExecAsync而不是ConnectPostPagedPodExec(使用vargs),然后我注意到以下情况(在这个例子中,我尝试创建一个包含内容的文件):

//string[] command_test = { "touch servers_.json" }; //DOES NOT WORK
//string[] command_test = { "touch", "servers_.json" }; //DOES WORK
client.WebSocketNamespacedPodExecAsync(podname, space, command_test, container, true, true, false, false).Result;

在上面的例子中,当每个单词都用逗号和引号分隔时,触摸命令似乎可以工作。

//string[] command_test = { "echo 'test' > servers_.json" }; //DOES NOT WORK
//string[] command_test = { "echo", "'test' > servers_.json" }; //DOES NOT WORK
//string[] command_test = { "echo", "'test'", ">", "servers_.json" }; //DOES NOT WORK
//var websocket_test = client.WebSocketNamespacedPodExecAsync(podname, space, command_test, container, true, true, false, false).Result;

但是使用echo的相同场景无论我尝试什么都不起作用,即使是像触摸命令那样拆分单词。
有什么想法吗?

oiopk7p5

oiopk7p51#

最后我找到了答案:这是因为重定向操作符(>)是由shell解释的,而不是由echo命令解释的。因此,您需要调用shell来执行带有重定向的命令。例如,您可以尝试以下操作:

string[] command_test = { "/bin/sh", "-c", "echo 'test' > servers_.json" };

相关问题