前端项目部署 K8S 的最佳实践是什么?

2023-04-24 17:00:12 +08:00
 xhldtc

小弟有一个项目要准备往 Azure 的 k8s 环境上部署,目前在前端服务的部署上碰到了一些困惑,有两种部署方式:

1. 前端 React 使用 nginx 做为基础镜像,打成一个可独立运行的 image ,部署在 k8s ingress 的后面,这样的话相当于有两个 nginx 了,镜像里有一个,然后 ingress 其实也是一个 nginx ,在镜像里和 ingress 上都要配路由规则。
2. 前端只是将静态资源和 js 代码打成 image ,不包含 nginx, 然后部署在 k8s ingress 后面,静态资源和后端服务的路由都在 ingress 里配置。

第一种方式之前实践过,是可行的,但是这样的话环境里相当于有两个 nginx ,感觉怪怪的,第二种方式是我个人想法,还没有测试过,但是从架构上来说相对简洁一些,不知是否可行。本人之前是搞后端的,对前端这块的实践不大了解,问了下 ChatGPT 说推荐用第二种方式,然后 Google 搜了下没找到类似的问题。有没有大佬在 k8s 生产环境上实践过类似的部署?还望不吝赐教。

4834 次点击
所在节点    Kubernetes
32 条回复
SanjinGG
2023-04-24 21:51:30 +08:00
容器用的 docker ,走自动化,用的第一种,容器里的 nginx 跑不掉的,你的接口也要做反代,必须有 nginx ,宿主机只要配一个子域名的反代就行,这样也便于维护
leokun
2023-04-24 22:06:54 +08:00
我司用的第一种,nginx 配置文件随项目分支更新,有时候会写一些 njs 脚本(处理 oauth 授权),这些都放到项目里面维护,打成一个包比较合理
dayeye2006199
2023-04-25 04:03:28 +08:00
第一个没啥怪的。就和上面说的,nginx 不光是个反代,也是静态资源服务器。

你那个 Pod 里面的静态资源服务器可以替换成 caddy ,apache 等各种选择。

Ingress controller 的实现也不光是 nginx ,好多都是云厂商自己的私有 gateway 。这两个东西配合使用非常合理。
killva4624
2023-04-25 07:51:48 +08:00
@FrankAdler 存储对象是可以啊,但 OP 问的是在 K8S 里部署。
eryajf
2023-04-25 08:09:55 +08:00
推荐一个方案:结合 http-server 来玩,前端项目仍旧打成静态文件,然后基于 http-server 监听,接下来 ingress 该咋配咋配。

http-server 是个神器,平时本地调试也经常能用上。

关于 http-server 的介绍,可见: https://wiki.eryajf.net/pages/7edb58/
rocmax
2023-04-25 08:37:33 +08:00
csr 说到底就是存个文件而已,为什么要部署到 k8s ? aws 的话直接存 s3 前面套 cloudfront ,azure 也应该有对应的服务。
cheng6563
2023-04-25 08:55:49 +08:00
我们是 2
xhldtc
2023-04-25 09:51:08 +08:00
@eryajf 老哥是你自己的博客吗,配图选的不错
genffy
2023-04-25 11:16:28 +08:00
如果只是纯静态资源,其实没多大必要。。。
nerocho
2023-04-25 11:32:04 +08:00
@FrankAdler index.html 放到 pod 里面是为了自己管理版本( cdn 缓存生效问题),如果前端版本不敏感,那 cdn 肯定更好。
nerocho
2023-04-25 11:39:07 +08:00
@nerocho index.html 放 cdn 我猜肯定没经历,cdn 节点缓存更新不及时的痛(当然多及时,取决于自己业务),自己控制缓存策略稳一些
vmlinz
2023-06-25 15:16:01 +08:00
前端如果没有 ssr 要求,不需要放到 k8s 。纯静态 spa 这类使用 s3 加 cdn 才是最优的,因为可以充分利用 cdn edge 服务。或者使用其他前端 paas 平台,比如 vercel ,cloudflare pages 。

如果非要部署到 k8s ,cdn 回源都需要到 k8s ,建议使用 nginx 加上静态资源打包镜像,这样前后端架构保持一致,而且需要 ssr 的情况也可以应对。最好不要用 ingress 去服务静态资源,它的设计不是做这个的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/935097

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX