Kubernetes集群中的Pod经常需要通过SOCKS5代理访问k8s api client。本文将演示如何使用Python代码,通过SOCKS5代理访问k8s api client,并解决常见问题。
开发者曾尝试使用urllib3.contrib.socks
库中的SOCKSProxyManager
配置代理,但请求超时。直接修改ApiClient.rest_client.pool_manager
无效,因为TCP包缺少主机信息导致连接失败。
更有效的解决方案是自定义ApiClient
类。通过继承kubernetes.client.ApiClient
并重写__init__
方法,创建一个名为ApiClientWithSocksProxy
的自定义类。此类在初始化时,使用SOCKSProxyManager
替换默认连接池管理器,并正确设置socket_options
,确保主机信息正确传递给代理服务器。
使用ApiClientWithSocksProxy
创建ApiClient
实例,再创建CoreV1Api
对象,即可解决主机信息缺失导致的连接超时问题。这种方法比直接修改rest_client
属性更可靠、更规范。关键在于正确使用SOCKSProxyManager
及其参数,确保代理正常工作。最终,api.list_namespace()
应该能成功执行并返回命名空间列表。
Python中`1 and 2 or 3`与三目运算符的区别及使用指南
pyav 如何在没有 FFmpeg 应用程序的情况下使用 FFmpeg 库?
自动化你的求职:使用 Python 抓取 + LinkedIn 职位
Deepin 15.10 中安装 OpenSSL 后 Python 报错:./python: /lib/x86_64-linux-gnu/libssl.so.1.1: version 'OPENSSL_1_1_1' not found,如何解决?
JetBrains IDE中如何使用Git比较本地代码和远程仓库?
Jenkins 在 Windows 2012 上执行 BAT 命令报错“python 不是内部命令”:如何解决?