Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >GoTTY - 终端工具变为 Web 应用

GoTTY - 终端工具变为 Web 应用

作者头像
子润先生
修改于 2021-06-16 02:22:43
修改于 2021-06-16 02:22:43
1.4K00
代码可运行
举报
运行总次数:0
代码可运行

GoTTY 是一个简单的命令行工具,可将您的 CLI 工具变成 Web 应用。

快速入门

1、安装 GoTTY
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Mac 版
brew install yudai/gotty/gotty

Bash

Copy

如果你有 GO 的环境,也可以通过如下方式安装:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
go get github.com/yudai/gotty

Bash

Copy

2、GoTTY 用法
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Usage: gotty [options] <command> [<arguments...>]

Bash

Copy

  • options
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--address value, -a value     IP address to listen (default: "0.0.0.0") [GOTTY_ADDRESS]
--port value, -p value        Port number to liten (default: "8080") [GOTTY_PORT]
--permit-write, -w            Permit clients to write to the TTY (BE CAREFUL) [GOTTY_PERMIT_WRITE]
--credential value, -c value  Credential for Basic Authentication (ex: user:pass, default disabled) [GOTTY_CREDENTIAL]
--random-url, -r              Add a random string to the URL [GOTTY_RANDOM_URL]
--random-url-length value     Random URL length (default: 8) [GOTTY_RANDOM_URL_LENGTH]
--tls, -t                     Enable TLS/SSL [GOTTY_TLS]
--tls-crt value               TLS/SSL certificate file path (default: "~/.gotty.crt") [GOTTY_TLS_CRT]
--tls-key value               TLS/SSL key file path (default: "~/.gotty.key") [GOTTY_TLS_KEY]
--tls-ca-crt value            TLS/SSL CA certificate file for client certifications (default: "~/.gotty.ca.crt") [GOTTY_TLS_CA_CRT]
--index value                 Custom index.html file [GOTTY_INDEX]
--title-format value          Title format of browser window (default: "{{ .command }}@{{ .hostname }}") [GOTTY_TITLE_FORMAT]
--reconnect                   Enable reconnection [GOTTY_RECONNECT]
--reconnect-time value        Time to reconnect (default: 10) [GOTTY_RECONNECT_TIME]
--max-connection value        Maximum connection to gotty (default: 0) [GOTTY_MAX_CONNECTION]
--once                        Accept only one client and exit on disconnection [GOTTY_ONCE]
--timeout value               Timeout seconds for waiting a client(0 to disable) (default: 0) [GOTTY_TIMEOUT]
--permit-arguments            Permit clients to send command line arguments in URL (e.g. http://example.com:8080/?arg=AAA&arg=BBB) [GOTTY_PERMIT_ARGUMENTS]
--width value                 Static width of the screen, 0(default) means dynamically resize (default: 0) [GOTTY_WIDTH]
--height value                Static height of the screen, 0(default) means dynamically resize (default: 0) [GOTTY_HEIGHT]
--ws-origin value             A regular expression that matches origin URLs to be accepted by WebSocket. No cross origin requests are acceptable by default [GOTTY_WS_ORIGIN]
--term value                  Terminal name to use on the browser, one of xterm or hterm. (default: "xterm") [GOTTY_TERM]
--close-signal value          Signal sent to the command process when gotty close it (default: SIGHUP) (default: 1) [GOTTY_CLOSE_SIGNAL]
--close-timeout value         Time in seconds to force kill process after client is disconnected (default: -1) (default: -1) [GOTTY_CLOSE_TIMEOUT]
--config value                Config file path (default: "~/.gotty") [$GOTTY_CONFIG]
--version, -v                 print the version

Bash

Copy

3、实践
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 示例
gotty -w python3

Bash

Copy

访问 http://127.0.0.1:8080 即可在线体验 Python3 环境。

进阶篇

容器化时代,遇到一些问题的时候,会进入容器内部排查问题,依靠命令行确实可以解决,但是效率较低,如果将容器作为 Web 可访问的应用,那么处理问题就会便捷很多。

下面将介绍如何使用 GoTTY 连接 k8s 集群中的任意容器。

1、构建 GoTTY Docker 镜像

已构建好的镜像:registry.cn-beijing.aliyuncs.com/tlab/k8s-gotty:latest

  • gotty:可运行的gotty程序,查看 [Releases]列表,选择合适的
  • kubernetes.repo:用于下载 kubectl
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

Bash

Copy

  • Dockerfile:用于构建镜像
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
FROM centos:latest
RUN yum install -y epel-release kde-l10n-Chinese glibc-common wget
RUN localedef -c -f UTF-8 -i zh_CN zh_CN.utf8
ENV LC_ALL zh_CN.utf8
ADD gotty /root/
ADD kubernetes.repo /etc/yum.repos.d/
RUN yum -y install kubectl
WORKDIR /root
EXPOSE 8080
CMD ["./gotty", "-w", "--permit-arguments", "kubectl", "exec", "-it", "-n"]

Bash

Copy

2、在 k8s 集群中运行 GoTTY
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kind: Deployment
apiVersion: apps/v1
metadata:
  name: gotty
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      k8s-app: gotty
  template:
    metadata:
      labels:
        k8s-app: gotty
    spec:
      serviceAccountName: <此处填具有合适权限的k8s用户名>
      containers:
        - name: gotty
          image: registry.cn-beijing.aliyuncs.com/tlab/k8s-gotty

          ports:
            - containerPort: 8080
              protocol: TCP

Bash

Copy

3、暴露 GoTTY 服务
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: gotty
  name: gotty-service
  namespace: default
spec:
  ports:
    - port: 80
      targetPort: 8080
      nodePort: 38080
  selector:
    k8s-app: gotty
  type: NodePort

Bash

Copy

4、访问容器

在终端里,进入容器的命令是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl exec -it -n <Namespace> <PodName>

Bash

Copy

那么,利用 GoTTY 访问则是http://:38080/?arg=&arg=

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
还在为线上服务 Docker 容器权限问题所烦恼吗,或许这款神器能助你彻底解决它!
GoTTY 是一个简单的基于 Go 语言的命令行工具,它可以将你的终端(TTY)作为 Web 程序共享。GoTTY 的架构是基于 Hterm + Web Socket 的,它能在 Web 浏览器上运行一个基于 JavaScript 的终端,并支持通过 HTTP 和 HTTPS 访问。
iMike
2019/10/10
4490
还在为线上服务 Docker 容器权限问题所烦恼吗,或许这款神器能助你彻底解决它!
谁再说不会 K8S 高可用部署,就把这个给他甩过去!
文档:https://kubernetes.io/zh-cn/docs/home/
民工哥
2022/10/27
1.5K0
谁再说不会 K8S 高可用部署,就把这个给他甩过去!
附022.Kubernetes_v1.18.3高可用部署架构一
Kubernetes的高可用主要指的是控制平面的高可用,即指多套Master节点组件和Etcd组件,工作节点通过负载均衡连接到各Master。
木二
2020/06/16
1.3K0
在浏览器里面运行命令行,真香!
之前写过一篇《万物皆可 API》,这个项目就是把一些脚本的执行结果输出到了网页里面。
查理不是猹
2022/01/10
1K0
kubernetes中常用的Ingress Controller
到https://github.com/kubernetes/ingress-nginx/tree/master/deploy/static这个下面下载对应的YAML文件,有configmap.yaml,namespace.yaml,rbac.yaml,with-rbac.yaml,可以写一个如下循环下载:
极客运维圈
2020/02/04
1.8K0
kubernetes中常用的Ingress Controller
TKE集群如何在pod内执行kubectl访问apiserver及登录node节点
腾讯云上创建一个TKE集群,一般都是需要开启集群的内网或者公网访问,才能kubectl访问集群apiserver,如果要登录node节点,需要ssh工具去登录,这种一般要有节点秘钥或者密码,但是一般只有运维才有节点登录方式。 下面我们来说说如何创建一个pod,来访问集群的apiserver,并登录node节点,下面我说的方式,是不需要节点登录密码或者秘钥,也不需要集群开启内网或者公网访问。
聂伟星
2024/10/04
2290
Kubernetes安装
minikube 创建集群 安装kubelet 添加rpm源 cat << EOF |tee /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=1 repo_gpgcheck=0 gpgkey=https://mirrors.aliyun.
mikelLam
2022/10/31
6070
ttyd-可以通过 Web 共享的终端
此外,在gitee上还看到https://gitee.com/zhaojh329/rtty这个项目,看起来功能类似,具体没有去实验验证。
保持热爱奔赴山海
2025/01/13
2540
K8S学习笔记之二进制部署Kubernetes v1.13.4 高可用集群
本次采用二进制文件方式部署,本文过程写成了更详细更多可选方案的ansible部署方案 https://github.com/zhangguanzhang/Kubernetes-ansible 和之前的步骤差不多都是和kubeadm步骤一样,不过这次所有kubelet全部走bootstrap不会像之前master上的kubelet生成证书,另外证书换成openssl生成
Jetpropelledsnake21
2019/04/01
2K0
K8S学习笔记之二进制部署Kubernetes v1.13.4 高可用集群
4.Jenkins进阶之分布式架构环境配置
描述: 我们在使用Jenkins的时候一般都会分为server节点与agent节点(也可以叫 slave 节点)。
全栈工程师修炼指南
2022/09/29
2.8K0
4.Jenkins进阶之分布式架构环境配置
TKE/EKS之configmap,secret只读挂载
使用eks/tke集群部署服务的时候,很多时候会需要通过configmap或者secret来挂载配置文件到容器里,但是通过configmap或者secret挂载的配置文件,直接登陆容器取进行写操作的时候会提示报错,文件只读,这是怎么回事呢?下面我们来简要分析下。
聂伟星
2022/07/12
2.9K2
027.掌握Service-Ingress使用
对于基于HTTP的服务来说,不同的URL地址经常对应到不同的后端服务(RS)或者虚拟服务器( Virtual Host),这些应用层的转发机制仅通过Kubernetes的Service机制是无法实现的。
木二
2020/03/19
1.6K0
在浏览器里面运行命令行,真香!
之前我写过一篇《万物皆可 API》,这个项目就是把一些脚本的执行结果输出到了网页里面。
崔庆才
2022/01/05
1.9K0
在浏览器里面运行命令行,真香!
附031.Kubernetes_v1.20.4高可用部署架构二
Kubernetes的高可用主要指的是控制平面的高可用,即指多套Master节点组件和Etcd组件,工作节点通过负载均衡连接到各Master。
木二
2021/04/16
1.1K0
附031.Kubernetes_v1.20.4高可用部署架构二
附001.kubectl介绍及使用
kubectl控制Kubernetes集群管理器,使用Kubernetes命令行工具kubectl在Kubernetes上部署和管理应用程序。使用kubectl,您可以检查群集资源; 创建,删除和更新组件; 看看你的新集群; 并提出示例应用程序。
木二
2019/07/26
8030
二进制安装k8s集群(16)-安装nginx-ingress-controller
在上一篇文章里我们主要介绍安装k8s集群内的基础服务kube-dashboard,这里我们继续介绍安装k8s集群内基础服务nginx-ingress,这个基础服务也创建在kube-system namesapce里,是以deployment的方式运行。当然 daemonset也是可以的,这里没有硬性要求。image镜像从我们的private repo pull(以前文章里介绍过harbor private repo的创建,以及镜像的push和pull)。当然原始image来源于官方的quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.25.1,不过要下载它需要科学上网或者搭个梯子。另外对于ingress方案,一般有nginx-ingress,traefik ingress(traefik2.0也已经问世了,都是可以选择的),haproxy ingress等,实际情况用哪种请根据团队和实际的需求来选择。
TA码字
2020/04/01
1.4K0
二进制安装k8s集群(16)-安装nginx-ingress-controller
kubeadm快速部署kubernetes(十九)
安装完成后配置启动时的命令,否则docker会将iptables FORWARD chain的默认策略设置为DROP
yuezhimi
2020/09/30
4720
kubeadm快速部署kubernetes(十九)
Kubernetes-Web-UI-Dashboard仪表盘安装使用
附录: K8s官网介绍: https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/ 项目地址: https://github.com/kubernetes/dashboard
全栈工程师修炼指南
2022/09/29
1.5K0
Kubernetes-Web-UI-Dashboard仪表盘安装使用
附034.Kubernetes_v1.21.0高可用部署架构二
Kubeadm 是一个工具,它提供了 kubeadm init 以及 kubeadm join 这两个命令作为快速创建 kubernetes 集群的最佳实践。 kubeadm 通过执行必要的操作来启动和运行一个最小可用的集群。kubeadm 只关心启动集群,而不关心其他工作,如部署前的节点准备工作、安装各种Kubernetes Dashboard、监控解决方案以及特定云提供商的插件,这些都不属于 kubeadm 关注范围。
木二
2021/04/22
1.9K1
云计算运维一步步编译安装Kubernetes之插件安装
Flannel是 CoreOS 团队针对 Kubernetes 设计的一个覆盖网络(Overlay Network)工具,其目的在于帮助每一个使用 Kuberentes 的 CoreOS 主机拥有一个完整的子网。这次的分享内容将从Flannel的介绍、工作原理及安装和配置三方面来介绍这个工具的使用方法。
王先森sec
2023/04/24
5030
云计算运维一步步编译安装Kubernetes之插件安装
相关推荐
还在为线上服务 Docker 容器权限问题所烦恼吗,或许这款神器能助你彻底解决它!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验