Description
What happened (please include outputs or screenshots):
Long-running applications using a kubeconfig with certificate-authority-data
encounter errors like:
Max retries exceeded with url: /api/v1/pods?fieldSelector=spec.nodeName%3Dip-172-18-66-203.ec2.internal (Caused by SSLError(FileNotFoundError(2, 'No such file or directory'),))
What you expected to happen:
Client should not expect tempfiles to live indefinitely. It is extremely common for servers to reap tempfiles.
Anything else we need to know?:
If you create a client you can easily see that it is using a temp file that cannot go away for the duration of the client:
>>> import kubernetes.config
>>> kubernetes.config.load_kube_config()
>>> api_client = kubernetes.client.ApiClient()
>>> api_client.rest_client.pool_manager.connection_pool_kw["ca_certs"]
'/tmp/tmpqkht2v2g'
You can reproduce the issue by deleting that temp file and attempting to make a request.
Code is here:
python/kubernetes/base/config/kube_config.py
Lines 63 to 78 in 1271465
In order for this to work reliably for long-running processes on standard linux systems, the temp file really needs to be created for each request rather than a single time at startup.
That said, on linux systems, a potential hack would be to use /proc/self/fd/<fileno>
instead of the temfile path since that would share the lifecycle of the process.
Environment:
- Python version (
python --version
): 3.6 - Python client version (
pip list | grep kubernetes
): 21.7.0