对Kubernetes Go客户端使用HTTP代理

时间:2018-09-07 08:40:19

标签: go kubernetes kubernetes-go-client

我正在使用go-client进行kubernetes来控制我的GKE群集上的部署,但是此客户端要在代理后面运行,并且需要通过该代理发出所有与Internet绑定的请求。但是我似乎找不到一种方法来配置我的KubeClient以通过代理发出所有http请求。

我的代码与此处的示例并没有太大不同-https://github.com/kubernetes/client-go/blob/master/examples/out-of-cluster-client-configuration/main.go

2 个答案:

答案 0 :(得分:1)

在使用配置(kubernetes.NewForConfig(config))设置新客户端时,您可以自定义传输方式:

proxyURL := url.URL{Host: proxy}
transport := http.Transport{Proxy: http.ProxyURL(&proxyURL), ....}
config.Transport = config.Transport

或者您可以使用config.WrapTransport:

  • 运输http.RoundTripper
  

传输可以用于自定义HTTP行为。此属性可能不        使用TLS客户端证书选项指定。使用WrapTransport        用于大多数客户端级别的操作。

  • WrapTransport函数(rt http.RoundTripper)http.RoundTripper
  

WrapTransport将在基础层之后针对自定义HTTP行为被调用        传输已初始化(通过TLSClientConfig创建的传输,        传输或http.DefaultTransport)。该配置可以分层其他RoundTrippers        在返回的RoundTripper顶部。


遗憾的是,使其工作并非易事,而使用HTTP_PROXYno_proxy通常更容易。

答案 1 :(得分:0)

有三个选项可以“告诉” Go客户端使用代理:

a。设置HTTP_PROXY环境变量:

$ export HTTP_PROXY="http://ProxyIP:ProxyPort"

HTTP_PROXY环境变量将用作HTTP请求和HTTPS请求的代理URL,除非被HTTPS_PROXY或NO_PROXY覆盖

b。在Go中创建必须使用代理的HTTP客户端:

proxy, _ := url.Parse("http://ProxyIP:ProxyPort")
httpClient := &http.Client{Transport: &http.Transport{Proxy: http.ProxyURL(proxy)}}

c。更改Go“ net / http”包使用的默认传输方式。这会影响整个程序(包括默认的HTTP客户端)

proxy, _ := url.Parse("http://ProxyIP:ProxyPort")
http.DefaultTransport := &http.Client{Transport: &http.Transport{Proxy: http.ProxyURL(proxy)}}

有关详细信息,请参阅我的博客文章:https://medium.com/@tufin/how-to-use-a-proxy-with-go-http-client-cfc485e9f342