Skip to content

lf1029698952/kube-webshell

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Kube-WebShell

Kubernetes WebShell Terminal By Lifeng

云原生应用开发大赛

本项目已参加 阿里云原生应用开发大赛
请各位大佬帮忙点个赞,谢谢。 点赞

本项目已提交至阿里云原生应用仓库 使用helm apphub快速安装使用:

helm repo add apphub https://apphub.aliyuncs.com/
helm install apphub/kube-webshell

注意:使用apphub默认安装后,没有kubeconfig文件所以无法连接任何集群,请自行替换secret中的config文件,或使用以下方法安装

git clone https://github.com/lf1029698952/kube-webshell.git
cd kube-webshell/helm-chart

将目标集群的kubeconfig文件内容替换至kubeconfig.toml文件下,支持多集群contexts配置,然后执行:

helm install kube-webshell ./

本项目在web-terminal-in-go的基础上进行了优化改造。
参考kube-dashboard提取出来的容器网页版控制台,通过web浏览器连接k8s容器。

基于xterm.js和sockjs实现,简单轻量,可与任何Kubernetes集群集成,根据自己的需求定制。
需要提供kubeconfig文件,通过uri传参即可,使用时传递以下参数:

  • context k8s中/root/.kube/config 文件中的current-context
  • namespace
  • podname
  • containername

功能

  • 多集群支持
  • web终端实现,自带心跳保活
  • 自适应浏览器窗口并动态调整tty大小
  • 支持用户权限控制 [TODO]
  • 支持用户操作日志审计 [TODO]

使用:

docker 运行

docker pull springwar/kube-webshell:latest

将app.conf和kubeconfig文件放至/opt/kube/conf路径下(可自定义), 并且执行以下命令:
docker run -d --name kube-webshell -p 8080:8080 -v /opt/kube/conf/:/opt/kube/conf springwar/kube-webshell:latest

app.conf配置文件示例:

appname = kube-webshell
httpport = 8080
kubeconfig = /opt/kube/conf/config

打开浏览器访问8080端口即可。

Helm 安装

支持helm安装:

Prerequisites

  • Kubernetes 1.6+
  • helm 2.8.0+

Installation

git clone https://github.com/lf1029698952/kube-webshell.git
cd kube-webshell/helm-chart

将目标集群的kubeconfig文件内容替换至kubeconfig.toml文件下,支持多contexts集群配置,然后执行:

helm install kube-webshell kube-webshell

配置values.yaml文件

可在values.yaml中修改如下配置,或在helm install中使用--set选项

  • Ingress: The ingress controller must be installed in the Kubernetes cluster.
  • ClusterIP: Exposes the service on a cluster-internal IP. Choosing this value makes the service only reachable from within the cluster.
  • NodePort: Exposes the service on each Node’s IP at a static port (the NodePort). You’ll be able to contact the NodePort service, from outside the cluster, by requesting NodeIP:NodePort.
  • LoadBalancer: Exposes the service externally using a cloud provider’s load balancer.

访问

使用Ingress暴露服务时,绑定host或解析webshell.example.local域名,直接浏览器访问即可
使用NodePort暴露服务时,浏览器直接访问NodeIP:NodePort
使用ClusterIP时,外部无法直接访问,使用port-forward命令将服务暴露至本地:

kubectl port-forward <PodName> 8080:8080

浏览器访问localhost:8080

如图: kube-webshell kube-webshell

演示: kube-webshell