[英]How to securely store JWT secrets/private keys on a NODEjs application?
[英]How to use kubernetes secrets in nodejs application?
我在gcp上有一個kubernetes 集群,運行我的express和node.js應用程序,使用MongoDB
操作CRUD
操作。
我創建了一個秘密,包含username
和password
,連接到mongoDB
指定的秘密作為我的kubernetes
yml
文件中的environment
。 現在我的問題是“如何在用於連接 mongoDB 的節點 js 應用程序中訪問該用戶名和密碼”。
我在Node.JS
應用程序中嘗試了process.env.SECRET_USERNAME
和process.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.