Tengo un clúster de kubernetes en gcp , ejecutando mi aplicación express y node.js , operando operaciones CRUD con MongoDB .
Creé un secreto, que contiene el nombre de username y password , conectándome con el secreto especificado de mongoDB como environment en mi archivo kubernetes yml . Ahora mi pregunta es " Cómo acceder a ese nombre de usuario y contraseña en la aplicación node js para conectar mongoDB ".
Probé process.env.SECRET_USERNAME y process.env.SECRET_PASSWORD en la aplicación Node.JS , arroja undefined .
Cualquier idea será apreciada.
secreto.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: Opaquekubernetes.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: 1Su archivo kubernetes.yaml especifica qué variable de entorno almacenar su secreto para que las aplicaciones en ese espacio de nombres puedan acceder a él.
Usando la interfaz cli de kubectl secrets , puede cargar su secreto.
kubectl create secret generic -n node-app test-mongodb-secret --from-literal=username=a-username --from-literal=password=a-secret-password (el espacio de nombres arg -n node-app es opcional, de lo contrario se cargará en el espacio de nombres predeterminado)
Después de ejecutar este comando, puede verificar su tablero de kube para ver que el secreto se guardó
Luego, desde su aplicación de nodo, acceda a la variable de entorno process.env.SECRET_PASSWORD
Quizás en su caso, los secretos se crean en el espacio de nombres incorrecto, por lo tanto, no están undefined en su aplicación.
EDITAR 1
Su sangría para container.env parece ser incorrecta
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