经常能碰到前端使用docker+k8s部署的项目,每次一有链接变更,前端都要重新改代码里的链接、改nginx.conf、重新打镜像…非常麻烦
要是只有后端API还好,在配nginx的时候用k8s nodeport链接就能解决
但实际情况经常是websocket、iframe等等神魔也想来凑个热闹,链接一变,事又多了
偶然之间听到后端小哥们在讨论k8s的环境变量配置,凑上去听了听,发现是个好东西,直接在yaml文件里面改动变量重新部署一下就行了
关键是前端要怎么获取到这玩意呢?我想到的是用脚本把环境变量写到里,再让js获取body上所需的环境变量:
# 把环境变量写到<body>里
sed -i "s|<body>|<body server_host=\"$server_host\" >|" /root/src/dist/index.html
// 获取body上的环境变量
document.querySelector('body').getAttribute('server_host')
最后只要在环境变量中添加server_host参数就可以了
当然,你也可以更骚,不用nodeport,直接写脚本替换nginx;什么Lua、Perl都不用装
sed -i "s|BACKEND_SERVER|$backend_server|" /root/src/nginx.conf
# nginx配置
location /api/ {
proxy_pass BACKEND_SERVER;
}