Merge pull request #1579 from itaru2622/no_proxy

add no_proxy parameter to configuration for REST and websocket client
This commit is contained in:
Kubernetes Prow Robot 2021-10-18 15:25:21 -07:00 committed by GitHub
commit 975360ced0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 32 additions and 2 deletions

View File

@ -156,6 +156,9 @@ class Configuration(object):
self.proxy = None
"""Proxy URL
"""
self.no_proxy = None
"""bypass proxy for host in the no_proxy list.
"""
self.proxy_headers = None
"""Proxy headers
"""

View File

@ -25,6 +25,7 @@ from six.moves.urllib.parse import urlencode
import urllib3
from kubernetes.client.exceptions import ApiException, ApiValueError
from requests.utils import should_bypass_proxies
logger = logging.getLogger(__name__)
@ -83,7 +84,7 @@ class RESTClientObject(object):
maxsize = 4
# https pool manager
if configuration.proxy:
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,

View File

@ -6,7 +6,8 @@ import weakref
import unittest
import kubernetes
from kubernetes.client.configuration import Configuration
import urllib3
class TestApiClient(unittest.TestCase):
@ -23,3 +24,28 @@ class TestApiClient(unittest.TestCase):
self.assertIsNotNone(client._pool)
atexit._run_exitfuncs()
self.assertIsNone(client._pool)
def test_rest_proxycare(self):
pool = { 'proxy': urllib3.ProxyManager, 'direct': urllib3.PoolManager }
for dst, proxy, no_proxy, expected_pool in [
( 'http://kube.local/', None, None, pool['direct']),
( 'http://kube.local/', 'http://proxy.local:8080/', None, pool['proxy']),
( 'http://127.0.0.1:8080/', 'http://proxy.local:8080/', 'localhost,127.0.0.0/8,.local', pool['direct']),
( 'http://kube.local/', 'http://proxy.local:8080/', 'localhost,127.0.0.0/8,.local', pool['direct']),
( 'http://kube.others.com:1234/','http://proxy.local:8080/', 'localhost,127.0.0.0/8,.local', pool['proxy']),
( 'http://kube.others.com:1234/','http://proxy.local:8080/', '*', pool['direct']),
]:
# setup input
config = Configuration()
setattr(config, 'host', dst)
if proxy is not None:
setattr(config, 'proxy', proxy)
if no_proxy is not None:
setattr(config, 'no_proxy', no_proxy)
# setup done
# test
client = kubernetes.client.ApiClient(configuration=config)
self.assertEqual( expected_pool, type(client.rest_client.pool_manager) )