Использование секретов Kubernetes в качестве переменных среды в Angular 6 - PullRequest
0 голосов
/ 10 февраля 2019

Я настраивал автоматическую сборку своего приложения Angular 6 и развертывание в Kubernetes каждый раз, когда он отправлялся в мой репозиторий кода (Google Cloud Repository).

Переменные среды Dev классически хранятся в файле environment.ts, напримерthis:

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 Ответ

0 голосов
/ 10 февраля 2019

Тем не менее, что вы делаете, ваше приложение 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 для замены шаблона конфигурации в папке assets.config.json.tpl может выглядеть следующим образом:

{
  "apiUrl": "${API_URL}"
}

envsubst заменит переменные среды их действительными значениями, и у вас будет действительный фрагмент конфигурации JSON в ваших ресурсах.Затем nginx запустится.

...