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

标签 docker nginx kubernetes microservices kubernetes-ingress

我有一个小型 java Web 应用程序,由三个微服务组成 - api-servicebook-servicedb-service 所有这些都使用 minikube 部署在本地 kubernetes 集群上。

我计划为 api-servicebook-service 保留单独的 UI,并从单独的 pod(可能是 nginx:alpine)提供通用静态文件。图片。

我能够创建一个提供静态文件的前端 nginx:alpine指的是这个tutorial.

我想使用 ingress-nginx 用于将请求路由到两个服务的 Controller 。

下图粗略地显示了我现在所在的位置。

我很困惑应该在哪里放置提供静态内容的 pod,以及如何将其连接到入口资源。我猜想在入口之前保留前端 pod 会违背 ingress-nginx Controller 的目的。提供静态文件的最佳实践是什么。感谢任何帮助。谢谢。

enter image description here

最佳答案

看起来您对以下事实感到困惑:在线浏览的用户将触发标准请求来“下载”您的静态内容,使用您的 2 个 API(图书和 api)。访问您的 API 的不是提供静态内容的 NGINX 服务,而是用户的浏览器/应用程序,并且它们对静态内容和 API 执行的操作完全相同(前者具有更多/特定的 header 和数据,例如 auth... )。

在图表中,您需要将新的 static-service 置于与 book-serviceapi-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/

相关文章:

python - Streamlit 和 ContainDS ImportError : Failed to initialize: Bad git executable

java - Docker:Java 8 安装在 Ubuntu 上失败

nginx - proxy_pass 基于 header 而不使用 if 条件

kubernetes - 具有需要作业的 initContainer 的水平 Pod 自动缩放 (HPA)

docker - 容器启动后运行python脚本(Kubernetes)

bash - 如何在 bash 脚本中为 Docker 容器启动多个进程

macos - 在 docker 容器外部编辑文件时,React Webpack 不会重建(在 mac 上)

mysql - Puppet 中的 Augeas for mysql 配置失败

http - 阻止在反向代理模式下通过 http 端口访问 rocket.chat

docker - Pod因错误和退出代码原因而终止:1