Python应用如何判断自身是否运行在Kubernetes Pod中
判断Python脚本是否运行在Kubernetes Pod中的方法
以下是几种可靠的判断方式,可根据你的场景选择:
1. 检查Kubernetes服务账户挂载目录
Kubernetes会自动为Pod挂载服务账户相关文件到/var/run/secrets/kubernetes.io/serviceaccount/路径下,包含token、ca.crt等文件。通过检查该目录或其中文件是否存在,即可判断是否处于K8s环境:
import os def is_in_kubernetes(): return os.path.exists('/var/run/secrets/kubernetes.io/serviceaccount/') if is_in_kubernetes(): print("运行在Kubernetes Pod中") else: print("未运行在Kubernetes环境")
2. 检查Kubernetes默认环境变量
Kubernetes会为Pod自动注入KUBERNETES_SERVICE_HOST和KUBERNETES_SERVICE_PORT两个环境变量,用于指向集群的API Server。检查这两个变量是否存在:
import os def is_in_kubernetes(): return 'KUBERNETES_SERVICE_HOST' in os.environ and 'KUBERNETES_SERVICE_PORT' in os.environ if is_in_kubernetes(): print("运行在Kubernetes Pod中") else: print("未运行在Kubernetes环境")
3. 尝试访问Kubernetes API(可选)
如果脚本有足够的权限,可以尝试访问Kubernetes内部API地址https://kubernetes.default.svc。这种方式更严谨,但需要处理证书验证:
import requests from os.path import exists def is_in_kubernetes(): if not exists('/var/run/secrets/kubernetes.io/serviceaccount/ca.crt'): return False try: token_path = '/var/run/secrets/kubernetes.io/serviceaccount/token' with open(token_path, 'r') as f: token = f.read().strip() headers = {'Authorization': f'Bearer {token}'} response = requests.get( 'https://kubernetes.default.svc/api/v1/namespaces', verify='/var/run/secrets/kubernetes.io/serviceaccount/ca.crt', headers=headers, timeout=5 ) return response.status_code == 200 except Exception: return False if is_in_kubernetes(): print("运行在Kubernetes Pod中") else: print("未运行在Kubernetes环境")
注意:第三种方法依赖Pod的服务账户权限,如果你的Pod没有配置相关权限,可能会返回False,因此前两种方法更常用。
内容的提问来源于stack exchange,提问作者Felix
相关产品推荐
相关产品推荐

