首页 > 解决方案 > 如何从多个 ConfigMap 资源构建 DSN env?

问题描述

为了服务工作,它需要一个名为的环境变量DSN,它打印到类似postgres://user:password@postgres.svc.cluster.local:5432/database. 我用ConfigMap资源建立的这个值:

apiVersion: v1
kind: ConfigMap
metadata:
  name: idp-config
  namespace: diary
data:
  DSN: postgres://user:password@postgres.svc.cluster.local:5432/database

此 ConfigMap 作为环境变量安装在我的服务 Pod 中。由于值与 and 不同,user并且password这些 PostgreSQL 凭据位于另一个 k8s 资源(aSecret和 a ConfigMap)中,我如何才能DSN在 k8s 资源 yaml 中正确构建此环境,以便我的服务可以连接到数据库?

标签: kubernetes

解决方案


深入研究我找到的 Kubernetes Docs。根据为容器定义环境变量

您在 Pod 的配置中定义的环境变量可以在配置的其他地方使用,例如在您为 Pod 的容器设置的命令和参数中。在下面的示例配置中,GREETING、HONORIFIC 和 NAME 环境变量分别设置为 Warm greetings to、The Most Honorable 和 Kubernetes。然后在传递给 env-print-demo 容器的 CLI 参数中使用这些环境变量。

apiVersion: v1
kind: Pod
metadata:
  name: print-greeting
spec:
  containers:
  - name: env-print-demo
    image: bash
    env:
    - name: GREETING
      value: "Warm greetings to"
    - name: HONORIFIC
      value: "The Most Honorable"
    - name: NAME
      value: "Kubernetes"
    command: ["echo"]
    args: ["$(GREETING) $(HONORIFIC) $(NAME)"]

推荐阅读