使用Python kubernetes API,有没有办法在“我当前的命名空间”中列出秘密?

lar*_*sks 1 python kubernetes

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
Run Code Online (Sandbox Code Playgroud)

...但这很笨拙,因为这意味着每次将 pod 清单部署到新的命名空间时都需要修改。

有没有办法通过API获取当前的命名空间名称?

P..*_*... 5

如果您可以在 pod 的清单中使用fieldRef来设置 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
Run Code Online (Sandbox Code Playgroud)

您可以读取 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)
Run Code Online (Sandbox Code Playgroud)