#node.js #docker #kubernetes
Вопрос:
Я упаковал node.js приложение в модуль kubernetes. Чтобы задать несколько переменных среды, я создал файл .env.k8 и настроил там несколько переменных env.
При создании образа я выбираю этот файл как —env =k8 в команде сборки docker. Предположим, я установил одну переменную ENV в этом файле .env.k8 в качестве URL =»abc.com»
Изображение создается, и модуль работает. Мне нужно проверить, установлен ли URL-адрес process.env.в соответствии с моим файлом .env.k8. Есть ли какой-либо способ из pod, я могу проверить, правильно ли установлены переменные Env.
Я вошел в запущенный контейнер и использовал commond printenv. Он не показывает переменные env процесса для node.js приложение, оно показывает переменные Env, установленные для POD.
Итак, как проверить переменные process.env из модуля kubernetes того же типа
Комментарии:
1. Переменные node.env предоставляются во время сборки, доступ к переменным env из среды выполнения невозможен. Единственный способ-создать логику, которая будет возвращать переменные env
2. Я не хочу получать к нему доступ. Я просто хочу проверить, правильно ли он устанавливается во время сборки. Есть ли какой-нибудь способ сделать это?
3. без написания дополнительного кода — нет, это делается по соображениям безопасности
4. ОК. Спасибо за информацию. Теперь проверяем, как создать логику или дополнительный код для проверки переменных Env
5. Вы можете использовать npmjs.com/package/dotenv-safe он может убедиться, что ваши переменные env установлены правильно, и не позволит запускать приложение в противном случае
Ответ №1:
Вам нужно будет определить, создать карту конфигурации из файла .env и смонтировать ее в корневом каталоге вашего приложения.
kubectl create configmap nodejs-env --from-file=.env.k8
При правильном монтаже файл .env установит переменные env для вашего Node.js применение
# NodoJS app Deployment using above config map
apiVersion: app/v1
kind: Deployment
metadata:
name: nodejs-app
namespace: production
spec:
replicas: 8
selector:
matchLabels:
app: nodejs-app
template:
metadata:
labels:
app: nodejs-app
spec:
containers:
- name: nodejs-app
image: nodejs-app:3.2.0
ports:
containerPort: 80
volumeMounts:
- name: nodejs-env-file
mountPath: /app/.env
readOnly: true
volumes:
- name: nodejs-env-file
configMap:
name: nodejs-env
Ссылка: https://www.cloudytuts.com/tutorials/kubernetes/how-to-configure-node-based-apps-in-kubernetes/
Ответ №2:
Некоторым мониторам требуется конечная точка в наших приложениях, чтобы отображать панель мониторинга со статистикой или показателями.
В Java наиболее безопасная и полная платформа spring предлагает функцию под названием actuator, которая предоставляет множество конечных точек http. Один из них способен отображать переменные среды. Вы можете отключить эту функцию или установить учетные данные безопасности для работы
Также в python, django framework, когда переменная отладки имеет значение true, при любой ошибке отображается html-страница с трассировкой стека ошибки плюс переменные среды.
Таким образом, не является сумасшедшей идеей иметь эту функцию в nodejs. Вам просто нужно добавить простой экспресс-маршрут и вернуть процесс.env
app.get("/meta/vars", function(req, res){
if ( some_security_logic || process.env.NODE_ENV == "PROD") {
return req.send({});
}
req.send(process.env);
});
Диспетчер конфигурации
Переменные, используемые во время выполнения, но доступные во время сборки, не являются хорошей практикой, поскольку нарушается одна из функций docker: Одна сборка для любых сред: разработка, поэтапное выполнение, производство и т. Д
Чтобы иметь переменные в файлах , таких как: .env .properties .ini или любое расширение, требуется задача записи вручную, выполняемая человеком. Это нарушает автоматизацию devops. Также требуется некоторое хранилище, такое как репозиторий git, что является еще одной плохой практикой.
На этом этапе я советую вам использовать какое-либо приложение, которое отвечает за управление всеми переменными всех приложений в вашей компании. Это приложение должно быть безопасным и предлагать такие функции, как скрытие пароля, шифрование конфиденциальных значений и безопасный способ использования этих переменных конкретным приложением. Вот несколько вариантов:
- весеннее облако
- смотритель зоопарка
- конфигуратор
С помощью инструмента, подобного предыдущим опциям, вам не нужно добавлять переменные вручную во время сборки. Вашему приложению просто нужно получить свои переменные, использующие безопасную конечную точку http, опубликованную платформой Configuration Manager.