如何在 kubernetes 应用程序中提供静态内容
How to serve static contents in a kubernetes application
我有一个小型 java webapp,包含三个微服务 - api-service,book-service 和 db-service 所有这些都使用 minikube 在本地部署在 kubernetes 集群上。
我计划为 api-service 和 book-service 保留单独的 UI,以及常见的静态文件从一个单独的 pod 提供,可能是 nginx:alpine
图片。
我能够创建一个前端来提供来自 nginx:alpine
的静态文件,参考这个 tutorial.
我想使用 ingress-nginx
控制器将请求路由到两个服务。
下图粗略地显示了我现在的位置。
我很困惑我应该把提供静态内容的 pod 放在哪里,以及如何将它连接到入口 resource.I 猜测在入口之前保留一个前端 pod 会破坏入口的目的- nginx 控制器。提供静态文件的最佳做法是什么。感谢任何帮助。谢谢。
我猜你应该有 3 个不同的 pods:
- 静态的
- 预订服务
- api-服务
静态 pod 很可能不会以与其他两个相同的速度缩放。
为您的每个部署创建服务。然后使用 ingres 在正确的端点上路由流量。
这是您想要实现的目标吗?
您似乎混淆了这样一个事实,即用户在线浏览时会触发对 "download" 您的静态内容的标准请求, 和 使用您的 2 个 API(书籍和 api)。访问您的 API 的不是为静态内容提供服务的 NGINX 服务,而是用户 browsers/applications,他们对静态内容和 API 所做的完全相同(前者有 more/specific headers和数据,比如 auth...)。
在您的图表上,您需要将新 static-service
置于与 book-service
和 api-service
完全相同的水平,即 落后于 入口。但是你的 static-service
不会有 link 和 db-service
像其他 2。然后只需完成你的入口规则,最后是 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
你的 book-service
foo.bar.com/api-service
为 api-service
foo.bar.com/
即所有其他内容都将转到 static-service
我有一个小型 java webapp,包含三个微服务 - api-service,book-service 和 db-service 所有这些都使用 minikube 在本地部署在 kubernetes 集群上。
我计划为 api-service 和 book-service 保留单独的 UI,以及常见的静态文件从一个单独的 pod 提供,可能是 nginx:alpine
图片。
我能够创建一个前端来提供来自 nginx:alpine
的静态文件,参考这个 tutorial.
我想使用 ingress-nginx
控制器将请求路由到两个服务。
下图粗略地显示了我现在的位置。
我很困惑我应该把提供静态内容的 pod 放在哪里,以及如何将它连接到入口 resource.I 猜测在入口之前保留一个前端 pod 会破坏入口的目的- nginx 控制器。提供静态文件的最佳做法是什么。感谢任何帮助。谢谢。
我猜你应该有 3 个不同的 pods: - 静态的 - 预订服务 - api-服务
静态 pod 很可能不会以与其他两个相同的速度缩放。
为您的每个部署创建服务。然后使用 ingres 在正确的端点上路由流量。
这是您想要实现的目标吗?
您似乎混淆了这样一个事实,即用户在线浏览时会触发对 "download" 您的静态内容的标准请求, 和 使用您的 2 个 API(书籍和 api)。访问您的 API 的不是为静态内容提供服务的 NGINX 服务,而是用户 browsers/applications,他们对静态内容和 API 所做的完全相同(前者有 more/specific headers和数据,比如 auth...)。
在您的图表上,您需要将新 static-service
置于与 book-service
和 api-service
完全相同的水平,即 落后于 入口。但是你的 static-service
不会有 link 和 db-service
像其他 2。然后只需完成你的入口规则,最后是 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
你的 book-servicefoo.bar.com/api-service
为 api-servicefoo.bar.com/
即所有其他内容都将转到 static-service