Bootstrap

Gin+Xterm.js实现远程Kubernetes Pod(一)

 

 Xterm.js简介

xterm.js (https://xtermjs.org/)是一个开源的 JavaScript 库,它模拟了一个终端接口,可以在网页中嵌入一个完全功能的终端。这个库非常灵活,并且具有很多定制选项和插件系统。

下面是一些使用 xterm.js 的基本步骤:

  • 首先,需要在项目中安装 xterm.js。你可以直接从 npm 安装:

npm install xterm
  • 然后在 HTML 中创建一个容器来承载终端

<div id="terminal"></div>
  • 在你的 JavaScript 文件中,导入 Terminal 类并创建一个新的实例

import { Terminal } from 'xterm';

const term = new Terminal();
  • 把这个终端附加到 HTML 元素上

term.open(document.getElementById('terminal'));
  • 现在你就可以向终端写入数据了

term.write('Hello, World!');
  • 如果你想读取用户在终端中的输入,可以监听 onData 事件

term.onData(data => {
  console.log(data);
});

以上只是最基础的使用方法。xterm.js 提供了许多其他功能,如主题定制、附加插件(例如 FitAddon 可以自动调整终端大小,WebLinksAddon 可以捕获 URL 并将其变为可点击链接)、设置光标样式、更改字体大小等等。你可以访问 xterm.js 的 GitHub (https://github.com/xtermjs/xterm.js)仓库 或者 文档 来获取更详细的信息。

使用Gin、client-go的SPDYExecutor来执行远程命令

package main

import (
 "context"
 "encoding/json"
 "github.com/gin-gonic/gin"
 "github.com/gorilla/websocket"
 corev1 "k8s.io/api/core/v1"
 "k8s.io/client-go/kubernetes"
 "k8s.io/client-go/kubernetes/scheme"
 "k8s.io/client-go/tools/clientcmd"
 "k8s.io/client-go/tools/remotecommand"
 "log"
 "net/http"
)

// websocket 升级器配置
var upgrader = websocket.Upgrader{
 CheckOrigin: func(r *http.Request) bool {
  return true
 },
}

// WSClient 结构体,封装了 WebSocket 连接和 resize 通道,用于在 WebSocket 和 remotecommand 之间进行数据交换。
type WSClient struct {
 // WebSocket 连接对象
 ws *websocket.Conn
 // TerminalSize 类型的通道,用于传输窗口大小调整事件
 resize chan remotecommand.TerminalSize
}

// 
;