angular - 在Angular 6中将Kubernetes secret 用作环境变量

标签 angular kubernetes kubernetes-secrets

我配置了自动构建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/

相关文章:

templates - Kubernetes-helm:为多个应用程序使用一个模板

kubernetes - 无法在 Kubernetes 中创建 Secret : illegal base64 data at input

gitlab - Gitlab AutoDevops 是否支持将 kubernetes secret 作为文件?

Angular 5 xsrf-token cookie 和 x-xsrf-header 不一样

javascript - 使单击时单选按钮的焦点不可见,但焦点应在键盘导航上可见

javascript - Angular 7/1.x 混合应用程序可以支持 HMR 吗?

kubernetes - 使用 helm 时创建的额外 secret

Angular:在一个组件中调用一个函数,在另一个组件上调用事件

kubernetes - 如何使用一个代理在 Mesosphere DC/OS 上成功运行 Kubernetes?

docker - Kubernetes Redis rejson 持久化数据不保存