我有一个小型 java Web 应用程序,由三个微服务组成 - api-service、book-service 和 db-service 所有这些都使用 minikube 部署在本地 kubernetes 集群上。
我计划为 api-service 和 book-service 保留单独的 UI,并从单独的 pod(可能是 nginx:alpine
)提供通用静态文件。图片。
我能够创建一个提供静态文件的前端 nginx:alpine
指的是这个tutorial.
我想使用 ingress-nginx
用于将请求路由到两个服务的 Controller 。
下图粗略地显示了我现在所在的位置。
我很困惑应该在哪里放置提供静态内容的 pod,以及如何将其连接到入口资源。我猜想在入口之前保留前端 pod 会违背 ingress-nginx Controller 的目的。提供静态文件的最佳实践是什么。感谢任何帮助。谢谢。
最佳答案
看起来您对以下事实感到困惑:在线浏览的用户将触发标准请求来“下载”您的静态内容,和使用您的 2 个 API(图书和 api)。访问您的 API 的不是提供静态内容的 NGINX 服务,而是用户的浏览器/应用程序,并且它们对静态内容和 API 执行的操作完全相同(前者具有更多/特定的 header 和数据,例如 auth... )。
在图表中,您需要将新的 static-service
置于与 book-service
和 api-service
完全相同的级别code>,即入口后面。但是您的 static-service
不会像其他 2 个那样与 db-service
建立链接。然后只需完成您的入口规则,并在末尾添加 static-service如本例所示:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: your-global-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: foo.bar.com
http:
paths:
- path: /book-service
backend:
serviceName: book-service
servicePort: 80
- path: /api-service
backend:
serviceName: api-service
servicePort: 80
- path: /
backend:
serviceName: static-service
servicePort: 80
您必须调整服务名称和端口,并选择您希望用户访问 API 的路径,在上面的示例中您将拥有:
foo.bar.com/book-service
用于您的图书服务foo.bar.com/api-service
用于 api 服务foo.bar.com/
即其他所有内容都将进入静态服务
关于docker - 如何在 kubernetes 应用程序中提供静态内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53594491/