簡體   English   中英

如何在 nodejs 應用程序中使用 kubernetes 的秘密?

[英]How to use kubernetes secrets in nodejs application?

我在gcp上有一個kubernetes 集群,運行我的expressnode.js應用程序,使用MongoDB操作CRUD操作。

我創建了一個秘密,包含usernamepassword ,連接到mongoDB指定的秘密作為我的kubernetes yml文件中的environment 現在我的問題是“如何在用於連接 mongoDB 的節點 js 應用程序中訪問該用戶名和密碼”。

我在Node.JS應用程序中嘗試了process.env.SECRET_USERNAMEprocess.env.SECRET_PASSWORD ,它拋出undefined

任何想法將不勝感激。

隱藏文件

 apiVersion: v1

  data:

     password: pppppppppppp==

     username: uuuuuuuuuuuu==

kind: Secret

metadata:

 creationTimestamp: 2018-07-11T11:43:25Z

 name: test-mongodb-secret

 namespace: default

 resourceVersion: "00999"

 selfLink: /api-path-to/secrets/test-mongodb-secret

 uid: 0900909-9090saiaa00-9dasd0aisa-as0a0s-

 type: Opaque

kubernetes.yaml

 apiVersion: extensions/v1beta1
 
kind: Deployment

metadata:

annotations:deployment.kubernetes.io/

revision: "4"

creationTimestamp: 2018-07-11T11:09:45Z

generation: 5

labels:
    name: test
 name: test
 namespace: default
 resourceVersion: "90909"
 selfLink: /api-path-to/default/deployments/test
 uid: htff50d-8gfhfa-11egfg-9gf1-42010gffgh0002a
spec:
  replicas: 1
   selector:
   matchLabels:
   name: test
 strategy:
    rollingUpdate:
     maxSurge: 1
     maxUnavailable: 1
    type: RollingUpdate
  template:
     metadata:
      creationTimestamp: null
  labels:
    name: test
  spec:
    containers:
  - env:
    - name: SECRET_USERNAME
      valueFrom:
        secretKeyRef:
          key: username
          name: test-mongodb-secret
    - name: SECRET_PASSWORD
      valueFrom:
        secretKeyRef:
          key: password
          name: test-mongodb-secret
    image: gcr-image/env-test_node:latest
    imagePullPolicy: Always
    name: env-test-node
    resources: {}
    terminationMessagePath: /dev/termination-log
    terminationMessagePolicy: File
  dnsPolicy: ClusterFirst
  restartPolicy: Always
  schedulerName: default-scheduler
  securityContext: {}
  terminationGracePeriodSeconds: 30
 
  status:
   availableReplicas: 1
   conditions:
  - lastTransitionTime: 2018-07-11T11:10:18Z
     lastUpdateTime: 2018-07-11T11:10:18Z
    message: Deployment has minimum availability.
     reason: MinimumReplicasAvailable
    status: "True"
     type: Available
     observedGeneration: 5
      readyReplicas: 1
      replicas: 1
      updatedReplicas: 1

您的kubernetes.yaml文件指定了存儲您的機密的環境變量,以便該命名空間中的應用程序可以訪問它。

使用kubectl secrets cli 界面,您可以上傳您的秘密。

kubectl create secret generic -n node-app test-mongodb-secret --from-literal=username=a-username --from-literal=password=a-secret-password

(命名空間 arg -n node-app是可選的,否則它將上傳到默認命名空間)

運行此命令后,您可以檢查您的 kube 儀表板以查看機密已保存

然后從您的節點應用程序訪問環境變量process.env.SECRET_PASSWORD

也許在您的情況下,秘密是在錯誤的命名空間中創建的,因此為什么在您的應用程序中undefined

編輯 1

您對container.env縮進似乎是錯誤的

apiVersion: v1
kind: Pod
metadata:
  name: secret-env-pod
spec:
  containers:
  - name: mycontainer
    image: redis
    env:
      - name: SECRET_USERNAME
        valueFrom:
          secretKeyRef:
            name: mysecret
            key: username
      - name: SECRET_PASSWORD
        valueFrom:
          secretKeyRef:
            name: mysecret
            key: password
  restartPolicy: Never

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM