首页 > 解决方案 > Python间歇性OpenSSL错误:FileNotFoundError:[Errno 2]没有这样的文件或目录

问题描述

尝试使用 kubernetes 客户端库时,我的生产 Django 网站(在 UWSGI 下运行)出现间歇性错误。错误似乎是 urllib3,或者可能是 OpenSSL。奇怪的是,我可以简单地重新启动我的服务器,问题就消失了,但只是暂时的。过了一会儿,我又开始看到这个错误:

Traceback (most recent call last):                                                
  File "/srv/hive/lib/python3.6/site-packages/urllib3/util/ssl_.py", line 353, in ssl_wrap_socket
    context.load_verify_locations(ca_certs, ca_cert_dir, ca_cert_data)           
FileNotFoundError: [Errno 2] No such file or directory 

这很难排除故障,因为重新启动服务器会使问题消失几个小时。load_verify_locations我在函数中添加了一些额外的日志记录,urllib3/util/ssl_.py以查看它试图打开的文件。ca_certs参数传入一个临时文件,/tmp/tmp2xng8a6e. 其他两个参数是None

那么,为什么是临时文件,为什么它会丢失?临时文件会被删除是否有原因,或者为什么 urllib3 可能不会首先创建临时文件?

这是回溯的完整例外:

Aug 20 10:36:05 ERROR django.request: Internal Server Error: /code/projects/test-project/
Traceback (most recent call last):
  File "/srv/hive/lib/python3.6/site-packages/urllib3/util/ssl_.py", line 353, in ssl_wrap_socket
    context.load_verify_locations(ca_certs, ca_cert_dir, ca_cert_data)
FileNotFoundError: [Errno 2] No such file or directory

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/srv/hive/lib/python3.6/site-packages/urllib3/connectionpool.py", line 677, in urlopen
    chunked=chunked,
  File "/srv/hive/lib/python3.6/site-packages/urllib3/connectionpool.py", line 381, in _make_request
    self._validate_conn(conn)
  File "/srv/hive/lib/python3.6/site-packages/urllib3/connectionpool.py", line 976, in _validate_conn
    conn.connect()
  File "/srv/hive/lib/python3.6/site-packages/urllib3/connection.py", line 370, in connect
    ssl_context=context,
  File "/srv/hive/lib/python3.6/site-packages/urllib3/util/ssl_.py", line 355, in ssl_wrap_socket
    raise SSLError(e)
urllib3.exceptions.SSLError: [Errno 2] No such file or directory

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/srv/hive/lib/python3.6/site-packages/django/core/handlers/exception.py", line 34, in inner
    response = get_response(request)
  File "/srv/hive/lib/python3.6/site-packages/django/core/handlers/base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/srv/hive/lib/python3.6/site-packages/django/core/handlers/base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/srv/hive/lib/python3.6/site-packages/django/contrib/auth/decorators.py", line 21, in _wrapped_view
    return view_func(request, *args, **kwargs)
  File "/srv/hive/src/hive/ide/views.py", line 67, in ide
    utils.init_workspace(project)
  File "/srv/hive/src/hive/ide/utils.py", line 252, in init_workspace
    get_user_storage_resource(project.user).apply()
  File "/srv/hive/src/hive/ide/utils.py", line 79, in apply
    responses.append(item.apply())
  File "/srv/hive/src/hive/ide/utils.py", line 221, in apply
    if self.exists:
  File "/srv/hive/src/hive/ide/utils.py", line 165, in exists
    self._call('read')
  File "/srv/hive/src/hive/ide/utils.py", line 152, in _call
    return func(**kwargs)
  File "/srv/hive/lib/python3.6/site-packages/kubernetes/client/api/core_v1_api.py", line 18854, in read_namespaced_persistent_volume_claim
    (data) = self.read_namespaced_persistent_volume_claim_with_http_info(name, namespace, **kwargs)  # noqa: E501
  File "/srv/hive/lib/python3.6/site-packages/kubernetes/client/api/core_v1_api.py", line 18945, in read_namespaced_persistent_volume_claim_with_http_info
    collection_formats=collection_formats)
  File "/srv/hive/lib/python3.6/site-packages/kubernetes/client/api_client.py", line 345, in call_api
    _preload_content, _request_timeout)
  File "/srv/hive/lib/python3.6/site-packages/kubernetes/client/api_client.py", line 176, in __call_api
    _request_timeout=_request_timeout)
  File "/srv/hive/lib/python3.6/site-packages/kubernetes/client/api_client.py", line 366, in request
    headers=headers)
  File "/srv/hive/lib/python3.6/site-packages/kubernetes/client/rest.py", line 241, in GET
    query_params=query_params)
  File "/srv/hive/lib/python3.6/site-packages/kubernetes/client/rest.py", line 214, in request
    headers=headers)
  File "/srv/hive/lib/python3.6/site-packages/urllib3/request.py", line 76, in request
    method, url, fields=fields, headers=headers, **urlopen_kw
  File "/srv/hive/lib/python3.6/site-packages/urllib3/request.py", line 97, in request_encode_url
    return self.urlopen(method, url, **extra_kw)
  File "/srv/hive/lib/python3.6/site-packages/urllib3/poolmanager.py", line 336, in urlopen
    response = conn.urlopen(method, u.request_uri, **kw)
  File "/srv/hive/lib/python3.6/site-packages/urllib3/connectionpool.py", line 765, in urlopen
    **response_kw
  File "/srv/hive/lib/python3.6/site-packages/urllib3/connectionpool.py", line 765, in urlopen
    **response_kw
  File "/srv/hive/lib/python3.6/site-packages/urllib3/connectionpool.py", line 765, in urlopen
    **response_kw
  File "/srv/hive/lib/python3.6/site-packages/urllib3/connectionpool.py", line 725, in urlopen
    method, url, error=e, _pool=self, _stacktrace=sys.exc_info()[2]
  File "/srv/hive/lib/python3.6/site-packages/urllib3/util/retry.py", line 439, in increment
    raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='ide-ideresourcegroup-207977-dbdb0faf.hcp.centralus.azmk8s.io', port=443): Max retries exceeded with url: /api/v1/namespaces/ide/persistentvolumeclaims/workspace-storage-5p2lm91r (Caused by SSLError(FileNotFoundError(2, 'No such file or directory'),))

标签: pythondjangokubernetesopensslurllib3

解决方案


推荐阅读