Использование секретов 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 будет запуск.

Другие вопросы по тегам