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啓動時候設置的密碼。
今天的內容就分享到這裏,喜歡的話,給個關注,更多精彩,即將呈現。