【问题标题】:How can two applications running inside the Openshift send requests to each other?在 Openshift 中运行的两个应用程序如何相互发送请求?
【发布时间】:2017-03-15 20:46:50
【问题描述】:

假设这种情况:

在 Openshift 中部署了两个应用程序(可能在同一个命名空间中,也可能不在同一个命名空间中),它们想要相互发送 HTTP 请求。

整体问题:

似乎在 Openshift 中运行的应用程序无法使用它们的路由(由 Openshift 创建)相互调用。我想出的唯一解决方案是将应用程序部署在同一个命名空间中,并让它们调用与应用程序关联的服务的集群IP地址。

我的问题:

我开发了一个物联网平台。在平台中,有一个资源注册表 (RR),用于保存有关可用主机的信息。机器或人都可以查询 RR 并找到如何与可用主机通信。通过上面的问题,如果 RR 存储了服务的 ClusterIP 地址,那么只有在 Openshift 的命名空间内运行的主机才能相互发送请求。另一方面,如果 RR 存储路由(由 Openshift 创建),则在 Openshift 内运行的所有主机都无法相互发送请求。

问题:

Openshift 中的两个应用程序如何相互发送请求?有没有统一的方式让 Openshift 外部的应用向 Openshift 内部的另一个应用发送请求,就像 Openshift 内部的两个应用相互发送请求一样?

【问题讨论】:

    标签: routing openshift


    【解决方案1】:

    对于每项服务,都会在内部 DNS 中设置一个主机名。因此,如果您有一个名为mybackend 的服务,那么同一个项目中的任何内容都可以使用主机名mybackend 访问它。

    如果服务是另一个项目,则附加另一个项目,以. 分隔,例如mybackend.myotherproject

    默认情况下,一个项目中的事物不能直接连接到其他项目中的服务,因此,管理员需要设置一个 pod 网络以允许不同项目中的应用程序相互连接。后者见oc adm pod-network 命令。

    换句话说,您永远不必自己处理 IP 地址。您应该使用从服务名称创建的主机名,因为即使您销毁并重新创建应用程序并且由于重新创建服务而导致 IP 更改,这也将起作用。

    有关 DNS 和网络的更多信息,请参阅:

    【讨论】:

    • 我还没有理解一件事。如果 Openshift 使用的是拆分 DNS,为什么不能使用相同的 URL(我是指 Openshift 创建的路由)!我的意思是,如果请求来自内部网络,DNS 服务器可以将其解析为内部 IP 地址,如果请求来自外部网络,DNS 服务器可以将其解析为外部 IP 地址,然后 NAT 可以将其转换为内部 IP 地址。
    • 没有什么可以阻止内部服务使用公开的路由与另一个服务进行通信。它虽然会遍历外部请求通过的同一路由器。只要您没有对网络做任何事情来防止这种情况发生,它就应该起作用。这假设尽管在外部公开您希望其他东西与之通信的服务是安全的。我所知道的唯一例外是在本地运行 OpenShift 时,地址为 127.0.0.1.xip.io。这将不起作用,因为由于 127.0.0.1,外部路由将解析到同一个 pod。
    猜你喜欢
    • 1970-01-01
    • 2011-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-23
    • 2012-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多