我正在学习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/
答案 0 :(得分:3)
欢迎来到kubernetes生态系统!
让我说回问题,以确保我们谈论同样的事情:
群集中有2个应用程序。从Kubernetes的角度来看,这些应该包含以下集群内资源:
考虑到这两个应用程序的足迹,您需要在单个域下将每个应用程序在其自己的路径/路径下公开,因此外部访问者可以独立访问每个应用程序。
如果这一切都准确无误,则无需部署自己的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
希望有所帮助。