From 1250479fe490d8be346892354ce2ff9eeeac0248 Mon Sep 17 00:00:00 2001 From: light4 Date: Tue, 25 Jul 2023 14:03:31 +0400 Subject: [PATCH] fix socks proxy --- kubernetes/client/rest.py | 46 ++++++++++++++++++++++++++++----------- 1 file changed, 33 insertions(+), 13 deletions(-) diff --git a/kubernetes/client/rest.py b/kubernetes/client/rest.py index 9c703da3b..0ac60c089 100644 --- a/kubernetes/client/rest.py +++ b/kubernetes/client/rest.py @@ -19,13 +19,21 @@ import ssl import certifi + # python 2 and python 3 compatibility library import six -from six.moves.urllib.parse import urlencode import urllib3 +from requests.utils import should_bypass_proxies +from six.moves.urllib.parse import urlencode from kubernetes.client.exceptions import ApiException, ApiValueError -from requests.utils import should_bypass_proxies + +try: + from urllib3.contrib.socks import SOCKSProxyManager +except ImportError: + + def SOCKSProxyManager(*args, **kwargs): + raise RuntimeError("Missing dependencies for SOCKS support.") logger = logging.getLogger(__name__) @@ -85,17 +93,29 @@ def __init__(self, configuration, pools_size=4, maxsize=None): # https pool manager if configuration.proxy and not should_bypass_proxies(configuration.host, no_proxy=configuration.no_proxy or ''): - self.pool_manager = urllib3.ProxyManager( - num_pools=pools_size, - maxsize=maxsize, - cert_reqs=cert_reqs, - ca_certs=ca_certs, - cert_file=configuration.cert_file, - key_file=configuration.key_file, - proxy_url=configuration.proxy, - proxy_headers=configuration.proxy_headers, - **addition_pool_args - ) + if configuration.proxy.lower().startswith("socks"): + self.pool_manager = SOCKSProxyManager( + num_pools=pools_size, + maxsize=maxsize, + cert_reqs=cert_reqs, + ca_certs=ca_certs, + cert_file=configuration.cert_file, + key_file=configuration.key_file, + proxy_url=configuration.proxy, + **addition_pool_args + ) + else: + self.pool_manager = urllib3.ProxyManager( + num_pools=pools_size, + maxsize=maxsize, + cert_reqs=cert_reqs, + ca_certs=ca_certs, + cert_file=configuration.cert_file, + key_file=configuration.key_file, + proxy_url=configuration.proxy, + proxy_headers=configuration.proxy_headers, + **addition_pool_args + ) else: self.pool_manager = urllib3.PoolManager( num_pools=pools_size,