1

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

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

4

2 回答 2

2

当您使用 config ( ) 设置新客户端时,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 func(rt http.RoundTripper) http.RoundTripper

WrapTransport 将在底层传输初始化后调用自定义 HTTP 行为(从 TLSClientConfig、Transport 或 http.DefaultTransport 创建的传输)。配置可能会在返回的 RoundTripper 之上分层其他 RoundTrippers。


可悲的是,让它工作并不简单,而且使用HTTP_PROXYno_proxy经常更容易。

于 2019-07-17T07:59:47.493 回答
0

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

一个。设置 HTTP_PROXY 环境变量:

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

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

湾。在 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

于 2020-07-03T08:44:10.077 回答