Gotty 是Golang编写的可以方便的共享系统终端为web应用,是一个灵活强大的通过web访问终端的工具。本文将主要通过搭建Gotty实现对K8S容器的访问操作,开发如果想要正常的进行容器访问以及测试环境代码调试,最好是搭建一套与运维环境隔离的应用。方案很多,这里主要用到Gotty进行代理。https://github.com/yudai/gotty为其主页。下面讲解具体实现。

安装Gotty

安装Go环境,如果已经存在则忽略
# 安装基本的go语言环境
wget https://dl.google.com/go/go1.13.8.linux-amd64.tar.gz
tar zxvf go1.13.8.linux-amd64.tar.gz -C /usr/local/
mkdir /usr/local/gocode
vim /etc/profile #末尾放入下面三行
export GOROOT=/usr/local/go
export GOPATH=/usr/local/gocode
export PATH=$PATH:${JAVA_HOME}/bin:$GOROOT/bin
source /etc/profile
go version #检查go是否安装成功
安装gotty环境

go get github.com/yudai/gotty
mkdir /usr/local/gocode/src/github.com/yudai -p
cd /usr/local/gocode/src/
go install github.com/yudai/gotty
cd /usr/local/gocode/bin/
启动Gotty服务代理
# 启动gotty 用8080端口,然后设置访问用户名和密码,并代理kubectl 进行启动
./gotty -p 8080 -c yourUser:yourPwd -w --permit-arguments kubectl >/dev/null 2>&1 &
用浏览器进行访问测试

主要是通过下面的拼接生成命令 kubectl exec -it K8s-pod1-65369488ff-z9vpc -n namespace bash其中K8s-pod1-65369488ff-z9vpc是pod名称,namespace 是命名空间名称,根据具体情况调整。

http://你的服务器IP:8080/?arg=exec&arg=-it&arg=K8s-pod1-65369488ff-z9vpc&arg=-n&arg=namespace&arg=bash

获取Pod列表

上面讲解了如何搭建Gotty环境,并给出了进入容器的示范,但是还有一个问题就是,容器名称从哪里来,必须先有一个名称列表,才能点击进入。

取出容器列表核心命令
kubectl get pods --namespace=yourNameSpace

开发Pod展示列表

上面取出了容器列表,需要把这个列表显示在网页上面,这里简单通过Python Flask启动一个Web服务。如果没有安装Flask,可以使用命令pip install flask进行安装,创建一个文件main.py,内容如下。

from flask import Flask
import os app = Flask(__name__) @app.route('/namespace/k8s/pods')
def hello_world():
cmd = os.popen("kubectl get pods --namespace=namespace | awk '{print $1}'")
pods = cmd.read().split("\n")
i = 0
resStr = ""
for pod in pods:
if i > 0:
resStr = resStr + "<a target='_blank' href='http://你的服务器IP:8080/?arg=exec&arg=-it&arg="+ pod +"&arg=-n&arg=namespace&arg=bash'>" + pod + "</a>" + "<br>"
i = i + 1
print(resStr)
return resStr if __name__ == '__main__':
app.run()

然后在搞一个启动脚本 restart.sh。

ps -elf | grep 'main.py'|awk '{print $4}' | xargs kill -9
python main.py >/dev/null 2>&1 &

如果有nginx,也可以进行一下nginx代理:cat /etc/nginx/sites-enabled/pod.conf

server {
listen 80;
server_name your server name; location ~* ^/namespace {
proxy_pass http://localhost:5000;
} location / {
proxy_pass http://localhost:8080;
}
}
访问容器列表

http://你的服务器域名/namespace/k8s/pods即开发访问此页面可以进入容器代码调试。如果需要授权验证,就输入gotty启动时候设置的密码。

今天的内容就分享到这里,喜欢的话,给个关注,更多精彩,即将呈现。

【运维】通过gotty实现网页代理访问服务器及K8S容器操作实践的更多相关文章

  1. 《前端运维》二、Nginx--4代理、负载均衡与其他

    一.代理服务 比较容易理解吧,简单来说.客户端访问服务器并不是直接访问的,而是通过中间代理服务器,代理服务器再去访问服务器.就像一个中转站一样,无论什么,只要从客户端到服务器,你就要通过我. 一)正向 ...

  2. Linux运维面试题之--网页打开缓慢如何优化

    服务器负载过高或者网页打开缓慢,简单说说你的优化思路 ? 首先我们要发现问题的过程,通过操作系统,数据库,程序设计,硬件角度四个维度找到问题所在 找到瓶颈点的位置 制定好优化方案,形成处理问题的体系 ...

  3. 系统运维|SqlServer2008|数据库日志文件过大需要清理的操作攻略

    摘要: 1.执行SQL语句改成“简单模式” 2.收缩数据库 3.执行SQL语句改回“完全模式”   原文链接: http://www.lookdaima.com/WebForms/WebPages/B ...

  4. Python自动化运维工具fabric的安装

    使用shell命令进行复杂的运维时,代码往往变得复杂难懂,而使用python脚本语言来编写运维程序,就相当于开发普通的应用一样,所以维护和扩展都比较简单,更重要的是python运维工具fabric能自 ...

  5. 从一到万的运维之路,说一说VM/Docker/Kubernetes/ServiceMesh

    摘要:本文从单机真机运营的历史讲起,逐步介绍虚拟化.容器化.Docker.Kubernetes.ServiceMesh的发展历程.并重点介绍了容器化阶段之后,各项重点技术的安装.使用.运维知识.可以说 ...

  6. Python自动化运维工具-Fabric部署及使用总结

    使用shell命令进行复杂的运维时,代码往往变得复杂难懂,而使用python脚本语言来编写运维程序,就相当于开发普通的应用一样,所以维护和扩展都比较简单,更重要的是python运维工具fabric能自 ...

  7. 运维堡垒机----Gateone

    简介: 运维堡垒机的理念起源于跳板机.2000年左右,高端行业用户为了对运维人员的远程登录进行集中管理,会在机房里部署跳板机.跳板机就是一台服务器,维护人员在维护过程中,首先要统一登录到这台服务器上, ...

  8. autohotkey在运维中的应用

         AutoHotkey是一个自由.开源的宏生成器和自动化软件工具,它让用户能够自动执行重复性任务.AutoHotkey可以修改任何应用程序的用户界面(例如,把默认的Windows按键控制命令替 ...

  9. 中型企业的IT运维策略

    如何建设一支能够解决问题.创造价值.有活力的.不断进取的IT运维团队,并带领这支团队?充分发挥这个团队的优势力量,是运维业务有效开展的关 键.运维策略是直接体现运维业务的经济价值所在.好的运维措施.方 ...

  10. saltstack运维软件

    一.saltstack介绍 1.介绍 SaltStack管理工具允许管理员对多个操作系统创建一个一致的管理系统,包括VMware vSphere环境. SaltStack是一个服务器基础架构集中化管理 ...

随机推荐

  1. 内网安全之:黄金&白银票据传递域控制器权限维持

    内网安全之:黄金&白银票据传递域控制器权限维持 目录 内网安全之:黄金&白银票据传递域控制器权限维持 1 Golden Ticket 1.1 导出 krbtgt 的 NTLM Hash ...

  2. Binary &Op是什么

    前言 在并行开发时我们经常会用到Pstream::gather()函数或是全局函数reduce()或者其他,需要输入参数Binary &Op,本篇主要讨论Binary &Op是什么 t ...

  3. 在Github的fork项目中切换分支来提交PR

    在Github的fork项目中切换分支来提交PR 查看远程所有分支 git branch不带参数,列出本地已经存在的分支,并且在当前分支的前面用*标记,加上-a参数可以查看所有分支列表,包括本地和远程 ...

  4. js 操作符 —— 位操作符详解

    这篇文章不讲一元运算符,也就是 + .-. *. /. =. ||. &&. !这些. 位运算符是在数字底层(即表示数字的32个数位)进行操作的. 有符号整数使用 32 位的前 31 ...

  5. 最新版 IDEA 2022.3.2 最优开发配置

    最新版 IDEA 2022.3.2 最优开发配置 教程最后更新时间:2023.3.1 安装好 IntelliJ IDEA 后,进行如下的初始化操作,工作效率提升10倍. 目录 一.全局配置 如何进入全 ...

  6. git 日常基本使用

    // 将远程仓库下的所有分支拉取到本地 git fetch origin // 将dev分支合并到当前所在的分支 git merge dev // 基于当前分支克隆出新的本地分支 git checko ...

  7. REST风格开发

    使用测试工具 测试工具中 总结 @RequestBody:接收请求体参数Json @RequestParam:接收路径参数,包括表单 @PathVariable: 接收路径变量的. Rest风格优化 ...

  8. 运行Java时报错:Error: opening registry key 'Software\JavaSoft\Java Runtime Environment'

    卸载旧的JAVA JDK,安装新版的JDK时,运行cmd的java -version命令遇到这样的报错: Error: opening registry key 'Software\JavaSoft\ ...

  9. 前端回血day24 flex子项伤的CSS属性

    取值 含义 order 可以通过设置order改变某一个flex子项的排序位置.所有flex子项的默认order属性值是0 flex-grow 属性中的grow是扩展的意思,扩展的就是flex子项所占 ...

  10. C++实现顺序队列(循环队列)相关操作代码

    #include<iostream>#include<cstdlib>using namespace std;#define MAXSIZE 100#define OK 1#d ...