在 Angular 6 中使用 Kubernetes 机密作为环境变量
Use Kubernetes secrets as environment variables in Angular 6
我在 Kubernetes 中配置了自动构建我的 Angular 6 应用程序和部署,每次都会推送到我的代码存储库(Google 云存储库)。
开发环境变量通常存储在 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 应用程序中使用它?
不管你做什么,你的 Angular 应用程序是一个 客户端 应用程序,即用户的浏览器下载应用程序的源代码(一堆 CSS/JS/HTML 文件、图像等)并在用户的机器上执行。因此,您无法像在实施 client/server 应用程序时那样隐藏任何内容。在 client/server 应用程序中,所有秘密都将驻留在服务器部分。如果您将秘密放在 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
会启动。
我在 Kubernetes 中配置了自动构建我的 Angular 6 应用程序和部署,每次都会推送到我的代码存储库(Google 云存储库)。
开发环境变量通常存储在 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 应用程序中使用它?
不管你做什么,你的 Angular 应用程序是一个 客户端 应用程序,即用户的浏览器下载应用程序的源代码(一堆 CSS/JS/HTML 文件、图像等)并在用户的机器上执行。因此,您无法像在实施 client/server 应用程序时那样隐藏任何内容。在 client/server 应用程序中,所有秘密都将驻留在服务器部分。如果您将秘密放在 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
会启动。