代码之家  ›  专栏  ›  技术社区  ›  Valentin

如何设置kubernetes前端来服务多条路由

  •  0
  • Valentin  · 技术社区  · 7 年前

    我正在学习kubernetes及其生态系统,尽管我看到了很多如何使用nginx(作为反向代理)执行前端任务的示例,但我很难理解如何设置/配置它以服务于多条路径。例如,如果我有两个后端(app1和app2)部署到kubernetes,并且我希望它们以/app1和/app2的形式出现在我的前端,那么我假设我需要以下nginx配置:

    upstream app1 {
        server app1
    }
    upstream app2 {
        server app2
    }
    server {
        listen 443;
        location /app1 {
           proxy_pass https://app1:PORT1;
           # and additional configuration stuff
        }
        location /app2 {
           proxy_pass https://app2:PORT2;
           # and additional configuration stuff
        }
    }
    

    通过此站点配置,我可以构建nginx映像并将其作为服务部署到kubernetes中。但对于部署,我需要在yaml中指定要匹配的应用程序。如果我想让前端和后端匹配,我应该如何编写它的部署规范?我遵循了这里的示例【1】,但仍然不明白如何将其扩展到上述用例。

    [1] https://coderjourney.com/kubernetes-frontend-service-with-nginx/

    1 回复  |  直到 7 年前
        1
  •  3
  •   Jonah Benton    7 年前

    欢迎来到库伯内特斯生态系统!

    让我把问题说回来,以确保我们谈论的是同一件事:

    1. 集群中有2个应用程序。从Kubernetes的角度来看,这些应该包括集群中的以下资源:

      • 每个的部署
      • 每个应用程序的部署包括并因此在集群中为每个应用程序创建一个复制集和一些pod。
      • 每个应用程序的Pod规范引用应用程序的容器图像
      • 一种服务规范,它使用标签来引用每个应用程序各自的部署/复制集/Pod对象。服务的名称可用于其他Kubernetes对象
    2. 考虑到这两个应用程序的占地面积,然后您希望将每个应用程序在其自己的路由/路径下公开,如上所述,在单个域下,以便外部访问者可以独立访问每个应用程序。

    如果这些都是正确的,那么就没有必要部署自己的nginx容器。您只需使用另一个Kubernetes对象,称为Ingress。

    Ingress是一个抽象名称,如果您在裸机或类似设备上运行自己的Kubernetes集群,那么具体来说就是一个专门配置的nginx。

    如果您在gcloud、azure或AWS上运行托管Kubernetes,那么具体来说,入口通常是云提供的负载平衡器。

    这些文档应有助于:

    https://kubernetes.io/docs/concepts/services-networking/ingress/

    更具体地说,入口控制器是集群中一段软件的Kubernetes术语,该软件监视入口资源,然后使用这些资源中的详细信息生成新配置。

    nginx入口控制器:

    https://github.com/kubernetes/ingress-nginx/blob/master/README.md

    将首先在集群中创建nginx吊舱,然后观察入口规范的更改,将更新nginx配置以匹配规范中指定的内容,然后在配置更改时重新启动nginx吊舱。

    云入口控制器的工作原理类似,尽管它使用云API来更新云负载平衡器配置。

    因此,首先,您可能希望遵循简单的扇出入口示例,该示例在单个域中的两条路径下公开了两个应用程序,每个应用程序都位于各自的服务后面,如上所述:

    https://kubernetes.io/docs/concepts/services-networking/ingress/#simple-fanout

    希望这有帮助。