You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 20:03:19