Jenkins管道中k8s_api连接超时

时间:2019-04-11 09:55:24

标签: python python-3.x kubernetes jenkins-pipeline urllib3

我想使用Kubernetes API,即使用list_namespace方法列出集群中存在的命名空间。

当我从Linux机器上运行以下代码时,它工作正常。

我创建了一个Jenkins管道作业,并按以下引发连接超时错误的方式调用python文件。

如果我在相同的Jenkins文件中执行kubectl get ns,则得到输出。

我认为代理服务器不允许这样做。但是找不到解决方法。

我的Python代码:

config.load_kube_config(os.environ['KUBE_CONFIG'])
v1_api = client.CoreV1Api()
api_instance = kubernetes.client.CoreV1Api()

try: 
    api_response = api_instance.list_namespace(limit="1")
    pprint(api_response)
except Exception as e:
    print("Exception when calling CoreV1Api->list_namespace: %s\n" % e)

sys.exit("EXITING")

我运行的命令:

export KUBE_CONFIG=${env.WORKSPACE}/.kube/kube_config
python36 listns.py 

错误:

  

警告正在重试(重试(总计= 0,连接=无,读取=无,   断开连接后,重定向=无,状态=无))   'NewConnectionError(':无法建立新的连接:   [Errno 110]连接超时',)':/ api / v1 / namespaces?limit = 1

     

调用CoreV1Api-> list_namespace时发生异常:   HTTPSConnectionPool(host ='XXXXXXX',port = xxxx):超过最大重试次数   网址:/ api / v1 / namespaces?limit = 1(由   NewConnectionError(':无法建立新的连接:[Errno 110]   连接超时',))

1 个答案:

答案 0 :(得分:0)

通过使用Configuration类传递代理获得修补程序:

configuration = kubernetes.client.Configuration()
configuration.proxy='http://www-proxy-<myproxyserver>'

api_instance = kubernetes.client.ApiClient(configuration)