当前位置:   article > 正文

k8s web terminal的实现_k8s websocket xtrem

k8s websocket xtrem

使用beego+sockjs写的实例: https://github.com/du2016/web-terminal-in-go

web terminal可以让我们更方便的访问container,执行shell命令,提高工作效率

k8s本身实际上已经封装了docker的terminal api只需要很简单的操作就可以实现一个terminal,获取输入返回输出

 

  1. req := restclient.Post().
  2. Resource("pods").
  3. Name(podname).
  4. Namespace(namespace).
  5. SubResource("exec").
  6. Param("container", container).
  7. Param("stdin", "true").
  8. Param("stdout", "true").
  9. Param("stderr", "true").
  10. Param("command", "/bin/sh").Param("tty", "true")
  11. req.VersionedParams(
  12. &api.PodExecOptions{
  13. Container: container,
  14. Command: []string{"sh"},
  15. Stdin: true,
  16. Stdout: true,
  17. Stderr: true,
  18. TTY: true,
  19. },
  20. api.ParameterCodec,
  21. )
  22. executor, err := remotecommand.NewExecutor(
  23. config, http.MethodPost, req.URL(),
  24. )
  25. err = executor.Stream(remotecommand.StreamOptions{
  26. SupportedProtocols: remotecommandconsts.SupportedStreamingProtocols,
  27. Stdin: r,
  28. Stdout: w,
  29. Stderr: os.Stderr,
  30. Tty: true,
  31. TerminalSizeQueue: t,
  32. })


1.首先我们需要获取一个restclient restclient的具体概念请参照我之前的文章

 

2.通过restclient提交信息指定我们想要执行命令的container,实际上就是一个HTTP request

3.设置request的参数。

4.NewExecutor函数将一个普通的request升级为流输出,使用了Google的spdy协议,在返回时使用了chunk头保证长连接

5.发起请求,进行交互

6.在实际使用为了和实际使用界面的大小相匹配,需要监听窗口大小变化,每当变化时由queue的next方法返回。

7.如果为了实现一个简单的命令将输入输出设置为系统的输入输出即可,如果需要实现web terminal,可以使用xterm.js 与ws,将输入输出写入到websocket流中即可,还是很简单的

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/40832
推荐阅读
  

闽ICP备14008679号