首页 > 解决方案 > K8s的秘密组成

问题描述

我正在使用 helm/k8s 部署第三方(prisma)容器。容器需要一个 yaml 形式的环境变量,类似于

port: 4466                           
managementApiSecret: $PRISMA_SECRET
databases:                           
  default:                           
    connector: postgres              
    host: postgresql                 
    port: 5432                       
    user: postgres                   
    password: $PG_SECRET             
    migrations: true                 

我可以访问 postgres 密码和 managementApiSecret 作为单独密钥中的值。我正在尝试创建获取两个秘密并使用它们来创建环境变量的 pod。我目前对解决方案的尝试如下所示。

containers:                                    
  - name: prisma                               
    image: 'prismagraphql/prisma:1.14'         
    ports:                                     
      - name: prisma-4466                      
        containerPort: 4466                    
    env:                                       
      - name: PG_SECRET                        
        valueFrom:                             
          secretKeyRef:                        
            name: postgresql                   
            key: postgres-password             
      - name: PRISMA_CONFIG                    
        value: |                               
          port: 4466                           
          managementApiSecret: $PRISMA_SECRET
          databases:                           
            default:                           
              connector: postgres              
              host: postgresql                 
              port: 5432                       
              user: postgres                   
              password: $PG_SECRET             
              migrations: true    

这似乎不起作用(因为秘密是在 kubectl apply 时评估的?)。是否有另一种方法可以使用秘密信息创建环境变量?

标签: kuberneteskubernetes-helmprisma

解决方案


来自 envvar 文档:https ://kubernetes.io/docs/reference/generated/kubernetes-api/v1.12/#envvar-v1-core

变量引用 $(VAR_NAME) 使用容器中先前定义的环境变量和任何服务环境变量进行扩展。

您的第二个 envvar 可以使用早期 envvar 的值作为$(PG_SECRET)


推荐阅读