【问题标题】:How to make frontend application talk to backend applications without creating ingress for the backend如何在不为后端创建入口的情况下使前端应用程序与后端应用程序通信
【发布时间】:2019-07-05 13:05:32
【问题描述】:

我已经使用 kops 部署了一个 kubernetes 集群。当前集群使用一个 nginx 入口控制器,它在 AWS 中创建一个经典的负载均衡器。我有一些与前端应用程序对话的后端应用程序和一些只相互对话的后端服务。问题在于,目前让前端应用程序与后端应用程序对话的唯一方法是为后端应用程序创建一个入口,因为前端通过域名发送请求,因为它不了解内部服务名称。对于后端来说,这很好,因为它们可以通过使用服务名称和它们各自的端口进行内部通信。我怎样才能在不必为后端创建入口的情况下实现这一点。是否可以使用应用程序负载均衡器来做到这一点,或者我需要为此使用 API 网关吗?我如何实现这种架构?添加架构图以显示我想要实现的目标。任何帮助表示赞赏。

【问题讨论】:

  • 入口控制器是一个应用负载均衡器。您的前端确实需要一个外部端点。入口控制器是拥有一个的最佳方式。您可以直接公开该服务,但这仍然会创建一个 ELB。你想消除什么? ELB?没有ELB也可以部署入口控制器,不推荐
  • 我正在努力消除后端应用程序对入口的需求。
  • Ingress 是件好事。它们允许您通过单个应用程序平衡器公开多个服务。但是,如果您仍然想摆脱它,请将后端服务类型设置为 LoadBalancer,这将启动 ELB 以仅公开该服务
  • 也许我没有正确解释。例如,如果我有一个前端,我们称之为 frontend.xyz.com,我如何确保这个前端与后端通信,而不必为后端创建入口,也不必将后端暴露给外界也是。如果我不为后端创建入口,例如 backend.xyz.com,则前端无法与后端通信,因为它不知道如何在没有入口的情况下将流量路由到该后端 pod。
  • 如果服务没有通过入口或负载均衡器公开,那么集群外的任何东西都无法访问它

标签: amazon-web-services kubernetes kubernetes-ingress api-gateway kops


【解决方案1】:

从您的“架构图”看来,您的所有应用程序都在集群中。所以不需要入口。您可以只使用 Kubernetes 服务。

您的前端应用应该能够调用后端服务的端点,否则您在前端服务的配置中出错了。

如果您没有机会更改前端应用程序调用后端服务的 URL,您可以使用例如带有 CNAME 的 kubernetes 服务并重定向到您的内部服务。

【讨论】:

  • 我的前端应用是一个反应应用。该图像与所有 URL 捆绑在一起。我可以更改没有问题的 URL。我的问题是我正在寻找一种方法来映射前端和后端,而不必通过后端的入口路由。
【解决方案2】:

您不需要入口即可从前端连接后端。 假设后端和前端 pod 都在同一个 kubernetes 集群中运行。前端服务可以使用服务 dns 连接后端服务

backend-service.<namespace>.svc.cluster.local

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-04
    • 2017-03-12
    • 2014-03-16
    • 1970-01-01
    • 2020-02-13
    • 1970-01-01
    相关资源
    最近更新 更多