Использовать HTTP-прокси для go-клиента Kubernetes
Я использую go-client для kubernetes для управления развертываниями в моем кластере GKE, но этот клиент должен работать за прокси-сервером и должен выполнять все свои связанные с интернетом запросы через это. Но я не могу найти способ настроить мой KubeClient для выполнения всех http-запросов через прокси.
Мой код не сильно отличается от примера здесь - https://github.com/kubernetes/client-go/blob/master/examples/out-of-cluster-client-configuration/main.go
0 ответов
Когда вы настраиваете нового клиента с конфигурацией (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, Transport или http.DefaultTransport). Конфигурация может накладывать другие RoundTrippers поверх возвращенного RoundTripper.
К сожалению, заставить его работать непросто, и используя HTTP_PROXY
а также no_proxy
часто проще.
Есть три варианта "сказать" клиенту Go использовать прокси:
а. Установите переменную окружения HTTP_PROXY:
$ export HTTP_PROXY="http://ProxyIP:ProxyPort"
Переменная среды HTTP_PROXY будет использоваться в качестве URL-адреса прокси для HTTP-запросов и HTTPS-запросов, если не будет переопределена HTTPS_PROXY или NO_PROXY
б. Создание HTTP-клиента в Go, который ДОЛЖЕН использовать прокси:
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