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

时间:2018-03-08 15:40:29

标签: nginx kubernetes

我正在学习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 个答案:

答案 0 :(得分:3)

欢迎来到kubernetes生态系统!

让我说回问题,以确保我们谈论同样的事情:

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

    • 每个
    • 的部署
    • 每个部署包含,因此也会在群集中为每个应用创建一个ReplicaSet和一些Pod。
    • 每个应用的Pod规范引用应用的容器图像
    • 一个服务规范,它使用标签来引用每个应用程序的相应Deployment / ReplicaSet / Pod对象。服务的名称可以在其他Kubernetes对象中使用
  2. 考虑到这两个应用程序的足迹,您需要在单个域下将每个应用程序在其自己的路径/路径下公开,因此外部访问者可以独立访问每个应用程序。

  3. 如果这一切都准确无误,则无需部署自己的nginx容器。您只需使用另一个名为Ingress的Kubernetes对象。

    Ingress是一个抽象的名称 - 如果你在裸机或类似物上运行你自己的Kubernetes集群 - 具体来说就是特别配置的nginx。

    如果您在gcloud或azure或AWS上运行托管Kubernetes,则具体而言,Ingress通常是云提供的负载均衡器。

    文档应该有所帮助:

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

    更具体地说,Ingress Controller是一个Kubernetes术语,用于集群中监视Ingress资源的软件,然后使用这些资源中的详细信息来生成新配置。

    nginx Ingress控制器:

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

    首先在群集中创建nginx pod,然后监视Ingress规范的更改,更新nginx配置以匹配规范中指定的内容,然后在配置更改时重新启动nginx pod。

    云入口控制器的工作方式类似,但它使用云API来更新云负载平衡器配置。

    因此,对于第一个近似,你可能想要做的只是遵循Simple Fanout Ingress示例,该示例公开了两个应用程序 - 每个应用程序都在它们自己的服务之后,如上所述 - 在单个域中的两个路径下:

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

    希望有所帮助。