如何在kubernetes秘密文件中使用动态连接字符串到POD

How to use dynamic connection string to POD in kubernetes secret file

我是 k8s 的新手。因此,我将不胜感激任何建议。 我们在 AKS 中有多个 k8s 命名空间。

我正在创建一个 cronjob,它将 运行 多个命名空间中多个 PostgreSQL pods 上的脚本。我创建了一个秘密文件来安全地执行 cronjob 到默认命名空间中的单个目标 POD。 这是我的秘密文件:

apiVersion: v1
kind: Secret
metadata:
    name: db-secrets
type: Opaque
data:
  "POSTGRES_PASSWORD": <encoded_password>
  "POSTGRES_USER": <encoded_username>
stringData:
  "DATABASE_HOST": postgres-db-postgresql-0.postgres-db-postgresql-headless.default.svc.cluster.local

任何人都可以建议我:

  1. 如何在我的secrets文件DATABASE_HOST部分使用目标PostgreSQL POD DNS的动态字符串,所以在k8s集群中部署后,每个cronjob都会动态获取目标POD DNS,并连接到它的POD自己的命名空间?
  2. 是否可以通过变量之类的方式动态获取POD DNS?

我在某处读到可以使用 HELM,但是,我还没有时间使用 Helm。

您可以使用 Downward API in combination with interdependent environment variables 构造特定于命名空间的数据库主机名:

apiVersion: v1
kind: Pod
metadata:
  name: test
spec:
  containers:
    - name: test
      command:
        - sh
        - -c
        - sleep 1000
      image: busybox
      env:
      - name: POD_NAMESPACE
        valueFrom:
          fieldRef:
            fieldPath: metadata.namespace
      - name: DATABASE_HOST
        value: "postgres-db-postgresql-0.postgres-db-postgresql-headless.$(POD_NAMESPACE).svc.cluster.local"