【问题标题】:Communication from Pod to Pod on same node inside kubernetes in GCPGCP 中 kubernetes 内同一节点上从 Pod 到 Pod 的通信
【发布时间】:2019-04-08 11:22:54
【问题描述】:

我已经在 kubernetes 中为前端(REACT)和后端(EXPRESS NODE JS)项目进行了 dockerized 和创建部署和服务。我已经成功地在谷歌云平台的同一个节点的 Kubernetes(单节点集群)中部署了两个 Pod(即 一个 Pod --> REACT APP 和 SECOND POD --> EXPRESS NODE JS)。

问题:

1.) 如何在 Kubernetes 集群的 Node 中从一个 pod 到另一个 pod 进行通信?

2.) 我通过在 kubernetes 中创建 LoadBalancer 类型服务将我的 REACT 应用程序暴露给外部世界,并且我能够从浏览器访问 React App Endpoint .现在,是否可以从节点内的 REACT 应用程序访问 EXPRESS 应用程序,而无需将我的 EXPRESS 应用程序暴露给外部世界。如何做到这一点?

提前致谢。

【问题讨论】:

  • 见 Rayan Dawson 的回答。这是正确的。如果不公开 pod,您将无法使用前端。这完全不可能,因为您必须将 HTML 服务到浏览器,而浏览器中的脚本只能连接到暴露的后端。有关后端到后端的通信,请参阅 ClusterIP。 kubernetes.io/docs/concepts/services-networking/service

标签: docker kubernetes google-cloud-platform google-kubernetes-engine


【解决方案1】:

当前端是基于浏览器的 JavaScript 应用程序时,JavaScript 资源可能从集群中的 Pod 托管,但逻辑不会在那里运行。前端的 JavaScript 在用户的浏览器中运行。从用户的浏览器调用集群中的任何后端端点都需要一个外部 URL,而不仅仅是一个内部 URL。

执行此操作的典型方法是设置 LoadBalancer 类型的服务并将外部端点放入后端的配置中。另一种方法是设置一个 Ingress Controller,并将 Service 和 Ingress 与后端一起部署。使用 Ingress,您可以在部署服务之前知道外部 URL 是什么(如果使用 DNS,这是最简单的)。集群内部通信不需要 Ingress,可以使用 ClusterIP 类型的服务来完成,但我认为您需要外部通信。

无论如何,您都需要公开一个外部入口点供用户访问 UI(托管 JS 的地方)。使用 ingress,您可以将到后端的路由配置为同一(外部)主机上的不同路径。

【讨论】:

  • 嗨,这完全有道理。但是我正在为客户端使用服务器端渲染,并且需要在 pod(部署)之间进行通信。所以,这不适用于我的情况。我该怎么办??
  • 实际上并没有单一的方法——您需要清楚代码的哪些部分在服务器端执行调用,哪些部分在客户端执行。运行在服务器端的代码可以使用服务名来访问另一个 k8s pod,否则需要像 ingress 这样的外部方法。
  • 是的,我尝试了服务名称并且它有效。我的意思是它必须。谢谢你。祝你有美好的一天。
猜你喜欢
  • 2021-12-30
  • 2020-04-20
  • 1970-01-01
  • 1970-01-01
  • 2020-01-16
  • 2020-02-20
  • 2019-02-26
  • 1970-01-01
  • 2019-10-27
相关资源
最近更新 更多