2

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

  • 吊舱 1 名称:pod1

    中的容器名称pod1

    • p1c1 -- 这也是它在内部分配hostnamepod1
    • p1c2 -- 这也是它在内部分配hostnamepod1
    • p1c3 -- 这也是它在内部分配hostnamepod1
  • 吊舱 2 名称:pod2

    中的容器名称pod2

    • p2c1 -- 这也是它在内部分配hostnamepod2
    • p2c2 -- 这也是它在内部分配hostnamepod2
    • p2c3 -- 这也是它在内部分配hostnamepod2

我将某些容器保持在不同pods的位置,以避免port conflict将容器作为组进行管理。

问题

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

先感谢您!

编辑:对于搜索者,可以在此处找到其他信息。

4

3 回答 3

3

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 在同一网络上运行,容器可以通过名称引用另一个 pod。例如,如果您 p1c1在端口 80 上运行 Web 服务,则p2c1可以curl http://pod1.

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

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

现在,如果p1c1有服务监听端口1234,您可以从p2c1at访问它<some_host_address>:1234


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

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

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

一般来说,您不能更改 pod 或容器的配置;你只能删除它并创建一个新的。假设 podman-compose对格式有相对完整的支持 docker-compose.yaml,您应该能够在文件中正确设置网络docker-compose.yaml(您将手动创建网络,然后external在撰写文件中将其作为网络引用)。

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

于 2021-04-16T16:01:02.370 回答
0

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

于 2021-05-12T16:29:40.317 回答
0

@larsks 接受的答案仅适用于有根容器。换句话说,运行每个带有sudo前缀的 podman 命令。(例如当你从 spring boot 应用程序容器连接 postgres 容器时,你会得到 SocketTimeout 异常)

如果两个容器将在同一主机上工作,则获取主机的 ip 地址,然后<ipOfHost>:<port>. 例子:192.168.1.22:5432

有关更多信息,您可以阅读此博客 => https://www.redhat.com/sysadmin/container-networking-podman

于 2021-10-17T21:50:15.293 回答