ken*_*des 1 deployment proxy nginx kubernetes google-kubernetes-engine
当我尝试通过 Google Kubernetes Engine (GKE) 将我的 Web 应用程序部署到 Kubernetes 上时,我正在深入研究 nginx、Kubernetes 和 SSL。
关于我的项目的一些信息:
它们位于不同的存储库中(例如:前端存储库和后端存储库)
我计划使用 nginx 来服务我的前端和代理请求到我的后端。
我的问题是...
是否可以将我的后端和前端放在同一个 Kubernetes 配置 yaml 文件中?如果可能,这是这样做的最佳实践吗?
我怎么看是...
在我的nginx.conf文件中,我将有一个服务器部分,其中有一个proxy_pass类似于 的内容localhost:8000,这是后端的端口。我认为如果两者都在同一个容器和本地网络中,这会起作用。
然后我可能会有一个指向 nginx 的负载均衡器。
任何帮助或建议表示赞赏!我希望这是有道理的(对此仍然很新)!
让我们从头开始。关于这个话题有太多话要说,无法将所有内容都放在评论中,所以让我们将其转移到答案中。如果以下内容不完全清楚,请随时询问。
\n\n首先你需要从你的应用架构开始开始,并尝试确定它应该如何工作,哪一部分应该能够与另一个部分进行通信。
\n\n微服务方法是一个非常广泛的主题,值得单独撰写一篇文章,而不是试图用一个答案来解释它。但简而言之,它的意义在于将应用程序解耦为单独的部分,其中每个部分都有不同的功能,并且可以单独开发、部署和更新。这些元素可以密切相关,甚至可以完全相互依赖,但同时它们又是独立的实体。
\n\nKubernetes本质上鼓励您遵循上述方法。如果您阅读有关Pod的更多内容,您会发现它们完全是为此目的而设计的,作为单个微服务的一种包装器。这在某种程度上是一种简化,但我相信它反映了问题的本质。在实际的生产环境中,您可以拥有一组Pods由更高抽象(例如Deployment)管理的微服务,但请注意,即使您有 3 个或更多的单个微服务副本,Pod它仍然代表相同的单个微服务,仅水平扩展,例如能够处理更大的微服务。加载或更多请求。
由于服务,Pods代表不同微服务的单独集合可以相互通信并暴露给外部世界。
正如您可以在kubernetes 文档中读到的那样,Ingress是:
\n\n\n管理对集群中服务的外部访问的 API 对象,通常是 HTTP。Ingress 可以提供负载平衡、SSL\n 终止和基于名称的虚拟托管。
\n\nIngress 将 HTTP 和 HTTPS 路由从集群外部公开到集群内的服务。流量路由由入口资源上定义的规则控制。
\n\nRun Code Online (Sandbox Code Playgroud)\ninternet\n |\n [ Ingress ]\n --|-----|--\n [ Services ]\n
您应该问自己是否真的想将您的前端和后端暴露给外部世界Pods。通常您不想这样做。后端根据其定义应该充当...嗯...作为应用程序的后端:) 它不应该由外部用户直接访问,而只能通过应用程序的前端部分访问,因此不应该通过暴露Ingress。只有在应用程序的前端部分收到外部用户的请求后,它才会向后端发出自己的请求,检索后端应用程序处理的一些数据,然后将其传递给最终用户。用户没有向您的后端应用程序发出直接请求。
您可以使用Ingress不同的路径通过应用程序的不同部分进行公开(如另一个答案中给出的示例),这可以由在不同组中运行的不同微服务Pods支持,但它们仍然应该是应用程序的前端部分,而不是 后端。
后端通常仅在 kubernetes 集群Pods中公开,以使其可供应用程序的其他组件使用。为此,简单的服务类型(顺便说一句,这是默认类型,未指定字段时自动选择)是可行的方法。ClusterIPtype:
我鼓励您更多地了解不同Service 类型及其用途。
您可能还想看看以下文章。我相信他们会让整个概念更加清晰:
\n\n\n\n\n\n至于将不同的kubernetes 对象定义合并到一个yaml文件中,如本例所示,您可以在一个文件中看到Service并定义并用 分隔,这只是一种约定,我不会太在意它。如果它使您的工作更加方便,您可以使用它。Deploymentyaml---
至于您在评论中提出的附加问题:
\n\n\n\n\n我很好奇拥有两个负载均衡器是否也能正常工作,或者 Ingress 是否更适合这种情况?
\n
我希望在阅读整个答案后,它已经更清楚了。请注意,通常还会在后台Ingress使用负载均衡器。如果您只想向外部公开您的前端应用程序而不使用由单独的微服务支持的不同路径,您甚至可能不需要Ingress. LoadBalancer Service完全足以满足您想要完成的任务。请记住,您还使用它来向外部世界公开您的应用程序。如果您仅在集群内公开某些内容,而这些内容不应该从外部访问,请使用简单的ClusterIP Service。
\n\n\nLoadBalancer:使用云提供商\xe2\x80\x99s\n 负载均衡器向外部公开服务。外部负载均衡器路由到的 NodePort 和 ClusterIP 服务是自动创建的。
\n
我希望这能回答你的问题。
\n| 归档时间: |
|
| 查看次数: |
3183 次 |
| 最近记录: |