尝试通过websocket和client-go与k8s容器交互

问题描述 投票:0回答:1

当我尝试与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 来完成这个任务。请帮助我。

kubernetes containers
1个回答
0
投票

我发现我需要换行才能获取返回值。问题已经解决了。谢谢大家!

© www.soinside.com 2019 - 2024. All rights reserved.