首页 > 解决方案 > 使用 Python kubernetes API,有没有办法在“我当前的命名空间”中列出秘密?

问题描述

Pythonkubernetes模块提供了两种列出机密的方法:

我想列出运行容器的命名空间的秘密。

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 获取当前的命名空间名称?

标签: pythonkubernetes

解决方案


如果您可以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)

推荐阅读