微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 ROOTLESS podman 设置中,如何在不同 pod 中的容器之间进行通信

如何解决在 ROOTLESS podman 设置中,如何在不同 pod 中的容器之间进行通信

我阅读了我能找到的所有内容,但对于 podman,关于此场景的文档很少或不清楚。我有以下(人为的)ROOTLESS podman 设置:

  • pod-1 名称pod1

    pod1 中的容器名称

    • p1c1 -- 这也是它在 hostname
    • 内分配的 pod1
    • p1c2 -- 这也是它在 hostname
    • 内分配的 pod1
    • p1c3 -- 这也是它在 hostname
    • 内分配的 pod1
  • pod-2 名称pod2

    pod2 中的容器名称

    • p2c1 -- 这也是它在 hostname
    • 内分配的 pod2
    • p2c2 -- 这也是它在 hostname
    • 内分配的 pod2
    • p2c3 -- 这也是它在 hostname
    • 内分配的 pod2

我将某些容器保存在不同的 pods 中,特别是为了避免 port conflict,并将容器作为组进行管理。

问题

给定上面的拓扑,我如何在 p1c1p2c1 之间进行通信?换句话说,一步一步地,我发出什么 podman(1) 命令来收集 addressing informationpod1:p1c1 的必要 pod2:p2c1,然后使用这些信息来配置应用程序以便他们可以相互交流?

先谢谢你!

编辑:对于搜索者,可以找到更多信息here

解决方法

Podman 没有任何类似于 Swarm 或 Kubernetes 中的“服务”概念来提供 Pod 之间的服务发现。您的选择归结为:

  1. 在同一个网络命名空间中运行两个 Pod,或者
  2. 通过在主机端口上发布服务来公开服务,然后通过主机访问它们

对于第一个解决方案,我们首先创建一个网络:

podman network create shared

然后创建连接到 shared 网络的两个 Pod:

podman pod create --name pod1 --network shared
podman pod create --name pod2 --network shared

两个 Pod 运行在同一个网络上,容器可以参考 另一个豆荚的名字。例如,如果您在 p1c1 在端口 80 上,在 p2c1 中,您可以curl http://pod1

对于第二个选项,您可以执行以下操作:

podman pod create --name pod1 -p 1234:1234 ...
podman pod create --name pod2 ...

现在,如果 p1c1 有一个服务监听端口 1234,您可以从 p2c1<some_host_address>:1234 访问该服务。


如果我正确解释了选项 1,如果 p1c1 和 p2c1 中的应用程序都使用端口 8080;那么在任何地方(在 pod 内和外部主机内)都不会有任何冲突,如果我使用这样的内容发布:8080:8080 for app in p1c1 and 8081:8080 for app in p2c1?这种解释正确吗?

没错。每个 pod 都使用自己的网络命名空间运行 (实际上,它是自己的 ip 地址),因此不同 pod 中的服务可以 侦听同一个端口。

pod 的网络(不是端口)在运行后可以重新分配吗?原因:我正在使用 podman-compose(1),它在 pod 中为您创建内容,但我可能需要事后更改内容(例如网络分配)。可以这样做吗?

一般情况下,您不能更改 pod 或 容器;您只能删除它并创建一个新的。假如说 podman-composedocker-compose.yaml 格式,你应该可以设置网络 正确地在您的 docker-compose.yaml 文件中(您将创建 手动网络,然后将其作为 external 网络引用 您的撰写文件)。

Here 是相关 Docker 文档的链接。我自己还没有用 podman 试过这个。

,

注意:上述创建网络的方案,仅适用于rootful模式。您不能以无根用户身份进行 podman 网络创建。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。