k8s的容器的webssh实现
Vite2.x + Vue3.x + Xtermjs4
相关信息
- 编程语言:TypeScript 4.x + JavaScript
- 构建工具:Vite 2.x
- 前端框架:Vue 3.x
- 路由工具:Vue Router 4.x
- 状态管理:Vuex 4.x
- UI 框架:Element Plus
- CSS 预编译:Stylus / Sass / Less
- HTTP 工具:Axios
安装依赖
npm install
# or
yarn add
启动项目
npm run dev
项目打包
npm run build
功能完成
2021/6/8
具体代码在:https://github.com/haozheyu/k8sResourceDisplay
排坑不易,大家给给※,好让我在排坑的路上乐此不疲
<template>
<div ref="terminal" id="terminal"></div>
</template>
<script>
import {defineComponent, reactive, toRefs, onMounted, ref, markRaw, onBeforeUnmount, onUnmounted} from 'vue'
import { useRouter } from 'vue-router'
import { Terminal } from 'xterm';
import { FitAddon } from 'xterm-addon-fit';
import 'xterm/css/xterm.css'
import { ElMessage } from 'element-plus'
export default defineComponent({
name: 'Xterm',
setup(){
//实例化路由
const shellWs = ref(null)
const rows = ref(null)
const cols = ref(null)
const term = new Terminal({
rendererType: 'canvas',
cursorBlink: true,
convertEol: true,
scrollback: 800,
row: 70,
theme: {
foreground: 'white',
background: '#181E29'
}
})
const fitAddon = new FitAddon();
// canvas背景全屏
term.loadAddon(fitAddon);
fitAddon.fit();
const router = useRouter();
const podName = router.currentRoute.value.query.podName
const podNamespace = router.currentRoute.value.query.podNamespace
const containerName = router.currentRoute.value.query.containerName
const SHELL = router.currentRoute.value.query.shell
const querystring = "ws://localhost:8080/resource/websocket?" + "podNs="+ podNamespace + "&podName=" + podName + "&containerName=" + containerName + "&shell=" + SHELL
const ws = new WebSocket(querystring)
onMounted(()=>{
term.open(document.getElementById('terminal')); //绑定dom节点
term.focus() // 取得输入焦点
term.writeln('Connecting...'); // 写一行测试
ws.onclose = function (e) {
ElMessage.warning({
message: '链接已关闭',
type: 'warning',
center: true,
});
}
ws.onmessage = function (e) { // 服务端ssh输出, 写到web shell展示
term.write(e.data)
}
ws.onerror = function (e) {
ElMessage.error({
message: '请更换,shell环境再试一下',
type: 'error',
center: true,
});
}
// 当浏览器窗口变化时, 重新适配终端
window.addEventListener("resize", function () {
fitAddon.fit();
// 把web终端的尺寸term.rows和term.cols发给服务端, 通知sshd调整输出宽度
var msg = {type: "resize", rows: term.rows, cols: term.cols}
ws.send(JSON.stringify(msg))
})
// 当向web终端敲入字符时候的回调
// term.onKey(e => { //给后端发送数据
// // 写给服务端, 由服务端发给container
// console.log(e.key)
// var msg = {type: "input", input: e.key }
// ws.send(JSON.stringify(msg))
// })
// 支持输入与粘贴方法
term.onData(function(input) {
// 写给服务端, 由服务端发给container
var msg = {type: "input", input: input}
ws.send(JSON.stringify(msg))
})
})
onUnmounted(()=>{
ws.close()
})
return {
shellWs, term, rows, cols
}
},
})
</script>
<style>
</style>

k8s的容器的webssh实现的更多相关文章
- K8S(18)容器环境下资源限制与jvm内存回收
K8S(18)容器环境下资源限制与jvm内存回收 目录 K8S(18)容器环境下资源限制与jvm内存回收 一.k8s中的java资源限制与可能的问题 方案1:通过JVM的Xms和Xmx参数限制 方案2 ...
- Docker/K8s 解决容器内时区不一致方案
转载自:https://cloud.tencent.com/developer/article/1433215 1.背景介绍 我们知道,使用 docker 容器启动服务后,如果使用默认 Centos ...
- 使用k8s创建容器一直处于ContainerCreating状态
容器报错信息为(两种): FailedSynError syncing pod, skipping: failed to {kubelet 127.0.0.1} Warning FailedSync ...
- 云K8S - AWS容器库ECR(ERS)编排ECS-EKS以及阿里云编排ACS-ACK
云K8S相关 AWS 部分-ECR(ERS) ECS EKS 20180824 Chenxin AWS的容器编排目前分为 ECS 和 EKS 两种. AWS价格说明 Fargate模式的ECS,换算成 ...
- k8s的容器编排
1.K8S是如何对容器编排? 在K8S集群中,容器并非最小的单位,K8S集群中最小的调度单位是Pod,容器则被封装在Pod之中.由此可知,一个容器或多个容器可以同属于在一个Pod之中. 2.Pod是怎 ...
- K8S进入容器方法
前言 k8s如何进入一个pod里有多个容器的方法 参考地址 https://blog.csdn.net/aa1215018028/article/details/81205691 方法1 kubect ...
- kubernetes(k8s)容器集群管理
Kubernetes介绍 Kubernetes是google在2014年6月开源的一个容器集群管理系统,使用go语言开发,Kubernetes也称k8s. k8s是google内部一个叫borg的容器 ...
- 4.深入k8s:容器持久化存储
从一个例子入手PV.PVC Kubernetes 项目引入了一组叫作 Persistent Volume Claim(PVC)和 Persistent Volume(PV)的 API 对象用于管理存储 ...
- K8s(一)----容器编排工具基础概念
kubernetes(k8s)容器编排工具基础概念 Kubernetes (K8s): 中文社区:https://www.kubernetes.org.cn/replication-controlle ...
- 什么?都1202年了还不懂k8s和容器的关系?!这份k8s指南快拿走不谢!
都1202年了,还是有许多人搞不清容器与k8s之间的关系.在开始本篇正文之前,我们先来捋一捋这对"CP"的关系. 你可能已经很熟悉虚拟机了,最常见的莫过于我们拿到macOS却需要用 ...
随机推荐
- ELK多租户方案
一.前言 日志分析是目前重要的系统调试和问题排查的重要手段之一,而目前分布式系统由于实例和机器众多,所以构建一套统一日志系统是非常必要的:ELK提供了一整套解决方案,并且都是开源软件,之间互相配合使用 ...
- 将txt转化为csv的方法和遇到问题
一.无法修改扩展名步骤如下 二.转换之后所有数据都挤在第一列 win10系统修改文件扩展名只需4部,打开我的电脑->查看->选择->查看->取消勾选(已知隐藏文件的扩展名)-& ...
- 【Windows】更改Win10字体和Cmd字体
教程参考: https://www.windowszj.com/news/20837.html Win + R 打开运行窗口 输入 regedit 打开注册表编辑窗口 位置地址: 计算机\HKEY_L ...
- 【Windows】搭建FTP服务器
1.开启FTP服务和IIS服务 2.设置IIS服务 添加FTP站点[右键] 设置站点名称和物理路径 绑定IP地址和FTP端口号 可以自定义虚拟主机名称 下面勾选[无SSL]即可 身份验证和授权设置 在 ...
- 【Vue】Re06 组件化
将一个应用页面拆分成若干个可重复使用的组件 一.Vue的组件的使用步骤: 1.创建组件构造器 2.注册组件 3.使用组件 <!DOCTYPE html> <html lang=&qu ...
- java主线程等待多个子线程中任意一个有结果后,主线程继续执行
1.背景 2.代码 package com.qianxingniwo.ls; import org.junit.Test; import java.util.concurrent.atomic.Ato ...
- java多线程之-CAS无锁-unsafe理解
1.背景 这一节我们来学习一下unsafe对象 2.案例 1.自定义一个获取unsafe对象的类 package com.ldp.demo07Unfase; import sun.misc.Unsaf ...
- Pintia 天梯地图 dijkstra进阶
7-14 天梯地图 - SMU 2024 spring 天梯赛3(补题) (pintia.cn) dijkstra进阶做法,包含路径记录,以及按权重统计路径条件等; 不过最开始我一直将优先队列开的最大 ...
- SenseCraft 部署模型到Grove Vision AI V2图像处理模块
Grove Vision AI V2 图像处理模块开箱测评 摘要 今天教大家快速上手 Grove Vision AI V2 图像处理模块,我们将一起探讨如何利用 SenseCraft 部署 AI 模型 ...
- tomcat发布两个项目报错webAppKey重复设置
两个项目的web.xml中都有一个日志监听器配置 <listener> <listener-class> org.springframework.web.util.Log4jC ...