ingress在一个网站下部署两个前端项目,通过路由前缀区分

张开发
2026/4/11 2:18:42 15 分钟阅读

分享文章

ingress在一个网站下部署两个前端项目,通过路由前缀区分
环境windowsminikubedocker desktop1. 前端项目配置base url对于vite项目就是在vite.config.ts里面修改‘export default defineConfig({ base: /test1/, // .... })然后路由配置的地方也要修改const router createRouter({ history: createWebHistory(/test1/), // .... })配置完成后用npm run dev命令在本地看看正常应该是所有路由都加上了test1的前缀2. 提前用npm run build命令打包创建Dockerfile文件FROM nginx:alpine COPY dist /usr/share/nginx/html COPY dist /usr/share/nginx/html/test1/把dist复制到test1目录下因为等到了线上环境的时候会请求/test1/assets/xxx文件如果对应位置没有就报404的错误。3. 用docker build -t test1:latest . 命令做镜像不要忽略命令中最后的点号。做完镜像之后记住有个image id信息是在writing image sha256:xxxxx这一行里面可以使用 docker run --rm -it test1:latest /bin/sh 先进镜像里面看看对不对运行curl http://localhost/ui/assets/logo.svg这样的命令看看是不是正常返回一个svgxml格式的文件总之就是要确定服务跑起来了。4. 确定镜像正常之后就要把镜像加载到minikube里面命令是 minikube image load test1:latest如果之前运行过minikube可以运行minikube stop, minikube start重新启动一下确保没有别的干扰5. 创建一个deploy.yaml文件内容直接让AI生成就可以没什么出错的空间运行 kubectl apply -f deploy.yaml运行之后再运行kubectl get pods就可以看到起来的服务了要确定状态都是Running。可以用kubectl describe pod [pod的名字] 这个命令看看Image id和docker做成的镜像id是不是一样的不是一样的就要删掉旧的镜像换成新的// 删除镜像 minikube ssh -- docker rmi -f test1:latest // 确认是否删掉了 minikube ssh -- docker images | findstr test1 // 再运行image load那个命令加载稳妥起见还可以运行 kubectl exec -it [pod的名字] -- /bin/sh 指令到环境内部看一看看看是不是对的如果deploy.yaml文件改了或者镜像改了需要重启服务kubectl rollout restart deployment test1 test2。test1和test2是自己服务的名字6. 创建一个ingress.yaml文件一定要注意不要 nginx.ingress.kubernetes.io/rewrite-target: / 这个我出错就在这里了。apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-ingress spec: ingressClassName: nginx rules: - http: paths: - path: / pathType: Prefix backend: service: name: test1-service port: number: 80 - path: /test1 pathType: Prefix backend: service: name: test1-service port: number: 80 - path: /test2 pathType: Prefix backend: service: name: test2-service port: number: 80创建之后需要运行 kubectl apply -f ingress.yaml 以及 minikube addons enable ingress打开ingress服务。如果ingress.yaml文件改了可以运行kubectl get ingress看到ingress的名字然后kubectl delete ingress [ingress的名字] 删掉ingress之后运行apply那个命令7. 以上步骤都完成之后需要验证可以运行minikube ip看到ip地址然后运行minikube ssh进入命令行运行curl http://[刚看到的ip]/test1 这样看看是不是都能连通。这个工具和docker进入以及kubectl exec进入差不多都可以通过exit指令退出。如果顺利的话可以运行minikube tunnel开启一个隧道之后就能直接在网页上通过http://127.0.0.1/test1/ 来看到项目了。

更多文章