繁体   English   中英

为 Kubernetes go-client 使用 HTTP 代理

[英]Use HTTP proxy for Kubernetes go-client

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

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

当您使用配置( 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

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


遗憾的是,让它工作并不简单,而且使用HTTP_PROXYno_proxy通常更容易。

有三个选项可以“告诉”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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM