当我尝试与k8s容器交互时,我发现我无法获取容器结果,而是我输入的内容。问题出在哪里?
func ExecCommandInPod(ctx context.Context, conn *websocket2.WsConnection, namespace, podName, containerName string) error {
conf, err := k8sutil.InClusterConfig()
if err != nil {
return err
}
handler := &websocket2.StreamHandler{
WsConn: conn,
ResizeEvent: make(chan remotecommand.TerminalSize),
}
defer conn.WsClose()
req := k8sutil.MustNewKubeClient().CoreV1().RESTClient().Post().
Resource("pods").
Name(podName).
Namespace(namespace).
SubResource("exec").
VersionedParams(&v12.PodExecOptions{
Command: []string{"sh"},
Container: containerName,
Stdin: true,
Stdout: true,
Stderr: true,
TTY: true,
}, scheme.ParameterCodec)
exec, err := remotecommand.NewSPDYExecutor(conf, "POST", req.URL())
if err = exec.StreamWithContext(ctx, remotecommand.StreamOptions{
Stdin: handler,
Stdout: handler,
Stderr: handler,
TerminalSizeQueue: handler,
Tty: true,
}); err != nil {
return fmt.Errorf("could not stream execution: %v", err)
}
return nil
}
我想与 k8s 容器交互,比如 linux 终端。我想用 gin 和 websocket 来完成这个任务。请帮助我。
我发现我需要换行才能获取返回值。问题已经解决了。谢谢大家!