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

相关内容

热门资讯

“英版特朗普”攻城略地,英国要... 【文/观察者网 柳白】英国政坛正在经历一场强烈震荡。刚刚结束的英国地方议会选举中,首相斯塔默领导的工...
记者观察|透过这场吹风会,看懂... 一项刚从实验室诞生的新技术,如何“能落地、长得好”? 过去很多年里,我们是“先研发技术,再给它找地方...
大破防!美贸易代表炮轰美国法官... 文 观察者网 齐倩美国法院裁定新一轮全球关税非法,特朗普政府随即表示上诉。当地时间5月8日,美国贸易...
地暖管铺的稀,家里不热怎么办- 导读:地暖管铺设是有一定的标准的,如果没有达到预期效果可以找厂家协调解决,实在不行,可以采用墙角线明...
楼梯墙砖怎么贴才好看 楼梯墙砖可以分两部分来贴,第1部分要贴深颜色的,也就是楼梯与墙之间交接的地方,这些地方容易积攒灰尘,...
挂钩买什么样式的好用 吸盘挂钩... 在家居生活中,挂钩几乎是每家每户都有的小配饰。本文介绍了挂钩的几种好用样式,包括粘胶式无痕挂钩、易取...
电暖器什么样的环保? 最佳回答 现在市场上的电暖器还是比较多的。全国一线品牌有格力电暖器、美的电暖器、艾美特电暖器、先锋电...
农村可以安装什么样的热水器 农村地区的生活条件相对城市会落后一些,对于供暖、供热、供水等方面的设备要求也会有所不同。在热水器这一...
中国短剧剧组在泰国被查,8人被... 2026年5月8日,泰国清迈旅游警察逮捕了一个正在清迈非法拍摄中国短剧的8人剧组。这个剧组以当地知名...
智澄英达取得人形机器人腰髋部组... 国家知识产权局信息显示,智澄英达(杭州)科技有限公司取得一项名为“一种人形机器人腰髋部组件”的专利,...