Используйте секреты Kubernetes в качестве переменных среды в Angular 6

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

Переменные среды Dev обычно хранятся в файле 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?


person Manuel RODRIGUEZ    schedule 10.02.2019    source источник


Ответы (1)


Как бы то ни было, ваше приложение Angular является клиентским приложением, т.е. браузер пользователя загружает исходный код приложения (набор файлов CSS / JS / HTML, изображений и т. Д.) И выполняет его на машина пользователя. Таким образом, вы не можете ничего скрыть, как при реализации приложения клиент / сервер. В клиент-серверных приложениях все секреты будут находиться в серверной части. Если вы поместите секрет в секрет k8s, вы не зафиксируете его в репозитории, но вы все равно предоставите его всем своим пользователям.

Если вы все еще хотите заполнить конфигурацию на основе переменных среды (что является допустимым вариантом использования), я видел и использовал следующий подход. Это приложение Angular 6 и обслуживается в браузере сервером nginx. Сценарий запуска в контейнере докера немного странный и похож на следующие строки:

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.

person Lachezar Balev    schedule 10.02.2019
comment
Спасибо, Лачезар. Но секрет все равно раскроется, если я правильно понимаю? - person Manuel RODRIGUEZ; 10.02.2019
comment
Конечно будет. Это в ваших активах. Вы не можете ничего скрыть из клиентского приложения. - person Lachezar Balev; 10.02.2019
comment
См. Раздел «Одностраничные приложения» в этой замечательной статье - aaronparecki.com/oauth-2-simplified - person Lachezar Balev; 10.02.2019