k8 web terminal
一個(gè)k8s web終端連接工具达传,在前后端分離或未分離項(xiàng)目中心中篙耗,也可以把此項(xiàng)目無縫集成,開箱即用宪赶。
項(xiàng)目地址:https://github.com/jcops/k8-web-terminal
實(shí)現(xiàn)細(xì)節(jié)
前端用xterm.js庫宗弯,它是模擬一個(gè)terminal在瀏覽器中,并沒有通訊能力搂妻。需要在前端建立websocket蒙保,連到自己開發(fā)的websocket服務(wù)端。服務(wù)端會(huì)基于k8s的remotecommand包欲主,建立與container的ssh長(zhǎng)連接邓厕,remotecommand包只需要我們提供3個(gè)回調(diào),其中read是來獲取terminal的輸入扁瓢,我們要做的就是讀取websocket發(fā)來的數(shù)據(jù)详恼,然后返回給read回調(diào);write則是用來向terminal發(fā)送數(shù)據(jù)引几,我們要做的就是調(diào)用websocket把數(shù)據(jù)寫到前端昧互,然后前端把數(shù)據(jù)寫給xterm即可;next是用來獲取terminal的實(shí)際大小的她紫,sshd服務(wù)端需要知道終端的大小硅堆,這樣決定了它一行輸出多少個(gè)字符就要輸出一次換行符屿储。所以贿讹,當(dāng)瀏覽器窗口改變影響了terminal大小的時(shí)候,前端應(yīng)該把最新的terminal大小發(fā)給服務(wù)端够掠,然后在next回調(diào)中返回其大小民褂。
下面是真實(shí)的效果
image.png
image.png
感謝以下框架的開源支持
- [Beego] - http://beego.me/
MIT License
Copyright (c) 2019 Eric