node.js - 如何在 nodejs 应用程序中使用 kubernetes 机密?
问题描述
我在gcp上有一个kubernetes 集群,运行我的express和node.js应用程序,使用.CRUD
MongoDB
我创建了一个秘密,包含username
和password
,与我的文件中mongoDB
指定的秘密连接。现在我的问题是“如何在节点 js 应用程序中访问该用户名和密码以连接 mongoDB ”。environment
kubernetes
yml
我试过了process.env.SECRET_USERNAME
, process.env.SECRET_PASSWORD
在Node.JS
应用程序中,它正在抛出undefined
.
任何想法都会受到赞赏。
秘密.yaml
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
推荐阅读
- nservicebus - 是否可以在不使用调用 MarkAsComplete 的长时间超时的情况下为 Saga 设置 TTL?
- html - 如何使用 Bootstrap 缩放(框)屏幕大小
- python - 绘制分段线时如何正确使用自定义颜色图?
- python - Travic CI 失败:名称解析暂时失败
- java - 检查用户名是否已在 ArrayList 中注册
- mysql - 我想使用 SQL Query 在 Toad 中获取日期时间戳
- php - vladimir-yuldashev/laravel-queue-rabbitmq 5.4 需要照明/支持 5.4.*
- python - 警告:张量流:模型是用输入张量()的形状构造的。但它是在形状不兼容的输入上调用的
- javascript - 如何将 1d 转换为 2d 并将其存储在反应原生状态?
- office-addins - 如何将注册的应用发布到外部?