Использование секретов Kubernetes в качестве переменных среды в Angular 6
Я настроил автоматическую сборку приложения Angular 6, и развертывание в Kubernetes происходит каждый раз, когда отправляется в мой репозиторий кода (Google Cloud Repository).
Переменные среды разработки классически хранятся в файле environment.ts следующим образом:
export const environment = {
production: false,
api_key: "my_dev_api_key"
};
Но я не хочу помещать свои секреты Prod в свой репозиторий, поэтому решил, что смогу использовать секреты Kubernetes.
Итак, я создаю секрет в Kubernetes:
kubectl create secret generic literal-token --from-literal api_key=my_prod_api_key
Но как использовать его в моем приложении Angular?
1 ответ
Тем не менее, что бы вы ни делали, ваше приложение Angular является клиентским приложением, т. Е. Браузер пользователя загружает исходный код приложения (набор файлов CSS/JS/HTML, изображения и т. Д.) И выполняет его на компьютере пользователя. Таким образом, вы не можете скрыть что-либо, как вы делаете при реализации клиент-серверного приложения. В клиент-серверных приложениях все секреты будут находиться в серверной части. Если вы поместите секрет в секрет k8s, вы не сохраните его в репозитории, но вы все равно откроете его всем своим пользователям.
Если вы все еще хотите заполнить конфигурацию на основе переменных среды (что является допустимым вариантом использования), я видел и использовал следующий подход. Приложение Angular 6 и обслуживается браузером nginx
сервер. Скрипт запуска в контейнере Docker немного странный и выглядит примерно так:
envsubst < /usr/share/nginx/html/assets/config.json.tpl > /usr/share/nginx/html/assets/config.json
rm /usr/share/nginx/html/assets/config.json.tpl
echo "Configuration:"
cat /usr/share/nginx/html/assets/config.json
nginx -g 'daemon off;'
Как вы видите, мы использовали envsubst
подставить шаблон конфигурации в папку активов. config.json.tpl
может выглядеть так:
{
"apiUrl": "${API_URL}"
}
envsubst
заменит переменные среды их действительными значениями, и у вас будет действительный фрагмент конфигурации JSON в ваших ресурсах. затем nginx
будет запуск.