如何在 kubernetes 应用程序中提供静态内容

How to serve static contents in a kubernetes application

我有一个小型 java webapp,包含三个微服务 - api-service,book-servicedb-service 所有这些都使用 minikube 在本地部署在 kubernetes 集群上。

我计划为 api-servicebook-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-serviceapi-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