我配置了自动构建Angular 6应用程序,每次将其推送到我的代码存储库(Google Cloud存储库)时,都在Kubernetes中进行了部署。
开发环境变量通常按如下方式存储在environment.ts文件中:
export const environment = {
production: false,
api_key: "my_dev_api_key"
};
但是我不想将我的Prod secret 放入存储库中,因此我认为我可以使用Kubernetes secret 。
因此,我在Kubernetes中创建了一个 secret :
kubectl create secret generic literal-token --from-literal api_key=my_prod_api_key
但是如何在我的Angular应用中使用它呢?
最佳答案
无论如何,您的Angular应用程序都是客户端应用程序,即用户的浏览器下载该应用程序的源代码(一堆CSS / JS / HTML文件,图像等)并在用户计算机上执行它。因此,您无法像实现客户端/服务器应用程序那样隐藏任何内容。在客户端/服务器应用程序中,所有 secret 都将驻留在服务器部分中。如果将 secret 放入k8s secret 中,则不会将其提交到存储库中,但是无论如何您都将其公开给所有用户。
如果您仍然想基于环境变量填充配置(这是合法的用例),那么我已经看到并使用了以下方法。该应用程序为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
将用其真实值替换环境变量,并且 Assets 中将具有有效的JSON配置代码段。然后nginx
将启动。
关于angular - 在Angular 6中将Kubernetes secret 用作环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54615903/