我正在使用go-client进行kubernetes来控制我的GKE群集上的部署,但是此客户端要在代理后面运行,并且需要通过该代理发出所有与Internet绑定的请求。但是我似乎找不到一种方法来配置我的KubeClient以通过代理发出所有http请求。
我的代码与此处的示例并没有太大不同-https://github.com/kubernetes/client-go/blob/master/examples/out-of-cluster-client-configuration/main.go
答案 0 :(得分:1)
在使用配置(kubernetes.NewForConfig(config)
)设置新客户端时,您可以自定义传输方式:
proxyURL := url.URL{Host: proxy}
transport := http.Transport{Proxy: http.ProxyURL(&proxyURL), ....}
config.Transport = config.Transport
或者您可以使用config.WrapTransport:
传输可以用于自定义HTTP行为。此属性可能不 使用TLS客户端证书选项指定。使用WrapTransport 用于大多数客户端级别的操作。
WrapTransport将在基础层之后针对自定义HTTP行为被调用 传输已初始化(通过TLSClientConfig创建的传输, 传输或http.DefaultTransport)。该配置可以分层其他RoundTrippers 在返回的RoundTripper顶部。
遗憾的是,使其工作并非易事,而使用HTTP_PROXY
和no_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