kubectl proxy 加token 验证
admin
2023-03-11 08:21:06
0

kubectl proxy 加token 验证

proxy 不支持token加验证,只能再封装了一层代理,进行加验证。

开启代理

kubectl  proxy  --port=8089  --address=127.0.0.1   --accept-hosts='^*$'  # 后面这个可以去掉,不用允许所有

代码


mkdir go-proxy
cd go-proxy
go mod init go-proxy

vim main.go

package main

import (
   "bytes"
   "fmt"
   "github.com/ouqiang/goproxy"
   "io/ioutil"
   "log"
   "net"
   "net/http"
   "net/url"
   "strings"
   "time"
)

type EventHandler struct{}

func (e *EventHandler) Connect(ctx *goproxy.Context, rw http.ResponseWriter) {

}

func (e *EventHandler) Auth(ctx *goproxy.Context, rw http.ResponseWriter)  {

}

func (e *EventHandler) BeforeRequest(ctx *goproxy.Context) {

   if clientIP, _, err := net.SplitHostPort(ctx.Req.RemoteAddr); err == nil {
      if prior, ok := ctx.Req.Header["X-Forwarded-For"]; ok {
         clientIP = strings.Join(prior, ", ") + ", " + clientIP
      }
      ctx.Req.Header.Set("X-Forwarded-For", clientIP)
   }
   // 读取Body
   body, err := ioutil.ReadAll(ctx.Req.Body)
   if err != nil {
      // 错误处理
      return
   }
   if  ctx.Req.Header.Get("token") != "1234" {
      fmt.Println("没有权限,禁止登录")
      ctx.Abort()
      return
   }
   // Request.Body只能读取一次, 读取后必须再放回去
   // Response.Body同理
   ctx.Req.Body = ioutil.NopCloser(bytes.NewReader(body))
}

func (e *EventHandler) BeforeResponse(ctx *goproxy.Context, resp *http.Response, err error) {
   if err != nil {
      return
   }
   // 修改response
}

// 设置上级代理
func (e *EventHandler) ParentProxy(req *http.Request) (*url.URL, error) {
   return url.Parse("http://127.0.0.1:8089")
}

func (e *EventHandler) Finish(ctx *goproxy.Context) {
   log.Printf("请求结束 URL:%s\n", ctx.Req.URL)
}

// 记录错误日志
func (e *EventHandler) ErrorLog(err error) {
   log.Println(err)
}

func main() {
   proxy := goproxy.New(goproxy.WithDelegate(&EventHandler{}))
   server := &http.Server{
      Addr:         ":8000",
      Handler:      proxy,
      ReadTimeout:  1 * time.Minute,
      WriteTimeout: 1 * time.Minute,
   }
   err := server.ListenAndServe()
   if err != nil {
      panic(err)
   }
}
go run  main.go

注意

主要修改的地方有2个

  if  ctx.Req.Header.Get("token") != "1234" {    这里是输入你的token密码

    return url.Parse("http://127.0.0.1:8089")   这里是你本地的 proxy 接口

请求

请求头  添加  token : 1234

相关内容

热门资讯

警察涉嫌猥亵他人,切莫等被害人... 针对媒体报道民警牛某某涉嫌猥亵他人一事,亳州市公安局发布情况通报表示,已“立即成立调查组,全面开展调...
哈萨克斯坦总统说了一番话,普京... 资料图看了视频,确实是非常罕见一幕。一个国家领导人,当面规劝普京结束战争。我看到,这番话一出口,普京...
台风“红霞”成为今年以来登陆我... 根据中央气象台、广东省气象台消息,今年第12号台风“红霞”的中心已于今天(26日)3时50分前后在广...
业界热议AI安全护栏升级路径 ● 本报记者 郑萃颖 近年来,人工智能(AI)技术快速发展,相关安全问题也引发各界关注。接受中国证券...
RISC-V:当开源架构遇见智... 2026年,RISC-V正站在新的历史节点。智能体的崛起、数据中心算力范式的重构,RVA23、RIS...
网络电视不小心按成蓝屏了 1、重新检查并连接好电视机的信号源输入即可。2、检测电视机的信号源输入,如线路、接口松动,则重新连接...
问问海尔的冰箱款式怎么样 最佳回答 海尔冰箱的款式还是很多的,你可以去专卖店看一看,也可以去京东上或者是天猫上看一看,京东和天...
美的中央空调面板按了没反应 美的中央空调面板按了没反应可能有多种原因,以下是一些常见的解决方法:1. 检查电源:确保空调面板已接...
爆料称一款小阔直板新机定档明年... 继华为陆续推出两款阔折叠手机产品之后,网间曾曝光过关于 @OPPO 将推出自家首款阔直板机的消息。不...
中央空调按了开关没有反应是怎么... 原因可能是因为中央空调在使用前忘记通电或者连接空调的电路老化,接触不良,可以尝试将电源通电或者更换新...