访问 OpenShift ConfigMap 的前置准备
要使用 Python 访问 OpenShift 中的 ConfigMap,首先需要完成环境配置和权限准备。OpenShift 基于 Kubernetes 构建,因此访问其资源的核心是通过 Kubernetes API 进行交互,你需要先确保本地或运行 Python 程序的环境能够连通 OpenShift 集群的 API 地址,并且拥有对应命名空间下 ConfigMap 资源的读取权限。
如果是本地开发环境,你可以通过 oc login 命令登录集群,之后使用 oc config view --raw 获取 kubeconfig 文件内容,将其保存到本地的默认路径 ~/.kube/config 下,这样 Python 客户端就能自动读取集群配置。如果是运行在 OpenShift 集群内部的 Pod 中,需要为对应的服务账户绑定包含 ConfigMap 读取权限的角色,例如创建一个 Role 允许 get、list、watch ConfigMap 资源,再通过 RoleBinding 绑定到服务账户。
依赖库方面,推荐使用官方的 Kubernetes Python 客户端,安装命令如下:
pip install kubernetes
使用 Kubernetes Python 客户端访问 ConfigMap
本地环境通过 kubeconfig 访问
本地开发时,Python 程序可以自动读取默认的 kubeconfig 文件来连接 OpenShift 集群,以下是读取指定命名空间下某个 ConfigMap 的完整示例:
from kubernetes import client, config
# 加载本地 kubeconfig 配置
config.load_kube_config()
# 创建 CoreV1Api 客户端实例
v1 = client.CoreV1Api()
# 指定命名空间和 ConfigMap 名称
namespace = "default"
configmap_name = "test-config"
try:
# 获取指定 ConfigMap
configmap = v1.read_namespaced_config_map(name=configmap_name, namespace=namespace)
# 获取 ConfigMap 中的 data 字段,即存储的配置键值对
config_data = configmap.data
print(f"ConfigMap {configmap_name} 中的数据:")
for key, value in config_data.items():
print(f"键:{key},值:{value}")
except Exception as e:
print(f"获取 ConfigMap 失败:{e}")
上述代码中,config.load_kube_config() 会自动从默认路径读取 kubeconfig 文件,如果你需要指定自定义路径,可以传入 config_file 参数,例如 config.load_kube_config(config_file="/path/to/custom/kubeconfig")。
集群内部通过服务账户访问
当 Python 程序运行在 OpenShift 集群的 Pod 内部时,可以使用集群内部的服务账户来访问 API,此时不需要手动配置 kubeconfig,客户端会自动读取 Pod 内的服务账户配置,示例代码如下:
from kubernetes import client, config
# 加载集群内部配置,自动使用 Pod 内的服务账户
config.load_incluster_config()
# 创建 CoreV1Api 客户端实例
v1 = client.CoreV1Api()
# 指定命名空间和 ConfigMap 名称,这里获取当前 Pod 所在命名空间的 ConfigMap
# 可以通过读取 /var/run/secrets/kubernetes.io/serviceaccount/namespace 文件获取当前命名空间
with open("/var/run/secrets/kubernetes.io/serviceaccount/namespace", "r") as f:
namespace = f.read().strip()
configmap_name = "app-config"
try:
configmap = v1.read_namespaced_config_map(name=configmap_name, namespace=namespace)
config_data = configmap.data
# 使用配置数据,例如解析 JSON 格式的配置
import json
if "app_settings" in config_data:
app_settings = json.loads(config_data["app_settings"])
print(f"应用配置:{app_settings}")
except Exception as e:
print(f"获取 ConfigMap 失败:{e}")
批量获取命名空间下的所有 ConfigMap
如果需要获取某个命名空间下的所有 ConfigMap 列表,可以使用 list_namespaced_config_map 方法,示例代码如下:
from kubernetes import client, config
config.load_kube_config()
v1 = client.CoreV1Api()
namespace = "default"
try:
# 列出命名空间下所有 ConfigMap
configmap_list = v1.list_namespaced_config_map(namespace=namespace)
print(f"命名空间 {namespace} 下的所有 ConfigMap:")
for cm in configmap_list.items:
print(f"名称:{cm.metadata.name},创建时间:{cm.metadata.creation_timestamp}")
except Exception as e:
print(f"列出 ConfigMap 失败:{e}")
常见问题与注意事项
- 权限不足问题:如果访问时出现 403 错误,需要检查对应的服务账户或用户是否拥有目标命名空间下 ConfigMap 的读取权限,可以通过
oc auth can-i get configmap -n 命名空间名称命令验证权限。 - ConfigMap 不存在问题:如果访问的 ConfigMap 不存在,会抛出 404 异常,建议在代码中增加对应的异常处理逻辑,避免程序崩溃。
- 配置数据格式:ConfigMap 的 data 字段存储的是字符串键值对,如果配置是 JSON、YAML 等格式,需要在 Python 中手动进行解析。
PythonOpenShiftConfigMapkubernetes_client修改时间:2026-06-09 19:03:48