python - 使用 Python kubernetes API,有没有办法在“我当前的命名空间”中列出秘密?
问题描述
Pythonkubernetes
模块提供了两种列出机密的方法:
list_namespaced_secret
list_secret_for_all_namespaces
我想列出运行容器的命名空间的秘密。
该list_secret_all_for_namespaces
方法不合适,因为它试图在集群范围内列出机密,而我不需要或不想要该级别的访问权限。
该list_namespaced_secret
方法需要一个明确的命名空间名称。我可以将它作为我的 Python 代码的参数提供......
apiVersion: v1
kind: Pod
metadata:
name: example
namespace: my-sandbox
spec:
containers:
- command:
- /path/to/my-python-code.py
arguments:
- my-sandbox
...但这很笨拙,因为这意味着每次部署到新命名空间时都需要修改 pod 清单。
有没有办法通过 API 获取当前的命名空间名称?
解决方案
如果您可以fieldRef
在 pod 的清单中使用来设置 env 变量。
apiVersion: v1
kind: Pod
metadata:
name: dapi-envars-fieldref
spec:
containers:
- name: test-container
image: k8s.gcr.io/busybox
command: [ "sh", "-c"]
args:
- while true; do
echo -en '\n';
printenv
sleep 10;
done;
env:
- name: MY_POD_NAMESPACE # <----this
valueFrom:
fieldRef:
fieldPath: metadata.namespace
restartPolicy: Never
您可以读取 env 变量并使用list_namespaced_secret
.
from kubernetes import client, config
import os
config.load_kube_config()
v1 = client.CoreV1Api()
k = v1.list_namespaced_secret(str(os.environ.get("MY_POD_NAMESPACE")))
for i in k.items:
print(i.metadata.name)
推荐阅读
- amazon-web-services - 如何限制 AWS Cognito 用户采取某些行动?
- python - 如何在 Flask-SQLAlchemy 中启用连接池?
- c - 我们正在尝试存储通过我们的 readPoly 函数输入的多个数组
- python - 如何在 Pandas 中检查时间范围?
- blazor - Blazor 可以在没有任何 UI 引用或代码的情况下创建 wasm 模块吗?
- confluence - Confluence:如何通过脚本从文本文件(markdown)创建多个页面树?
- docker - 来自 sysinternals 的 Sigcheck 未在 Windows 容器 Docker 中运行
- java - 我应该如何使用 getResource()?
- android - resources.getIdentifier() 总是为发布 apk 返回 0
- batch-file - 记录由另一个窗口打开的 cmd 窗口的输出