k8 web terminal
一個(gè)k8s web終端連接工具,在前后端分離或未分離項(xiàng)目中心中,也可以把此項(xiàng)目無(wú)縫集成,開箱即用。
項(xiàng)目地址:https://github.com/jcops/k8-web-terminal
實(shí)現(xiàn)細(xì)節(jié)
前端用xterm.js庫(kù),它是模擬一個(gè)terminal在瀏覽器中,并沒(méi)有通訊能力。需要在前端建立websocket,連到自己開發(fā)的websocket服務(wù)端。服務(wù)端會(huì)基于k8s的remotecommand包,建立與container的ssh長(zhǎng)連接,remotecommand包只需要我們提供3個(gè)回調(diào),其中read是來(lái)獲取terminal的輸入,我們要做的就是讀取websocket發(fā)來(lái)的數(shù)據(jù),然后返回給read回調(diào);write則是用來(lái)向terminal發(fā)送數(shù)據(jù),我們要做的就是調(diào)用websocket把數(shù)據(jù)寫到前端,然后前端把數(shù)據(jù)寫給xterm即可;next是用來(lái)獲取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