NYC*_*yes 9 containers redhat-containers podman podman-compose
我阅读了我能找到的所有内容,但关于这种情况的文档很少或不清楚podman。我有以下(人为的)ROOTLESS podman设置:
pod-1 名称:pod1
容器名称pod1:
p1c1 -- 这也是它hostname在内部分配的pod1p1c2 -- 这也是它hostname在内部分配的pod1p1c3 -- 这也是它hostname在内部分配的pod1pod-2 名称:pod2
容器名称pod2:
p2c1 -- 这也是它hostname在内部分配的pod2p2c2 -- 这也是它hostname在内部分配的pod2p2c3 -- 这也是它hostname在内部分配的pod2我将某些容器放在不同的pods位置,以避免出现这种情况port conflict,并将容器作为组进行管理。
问题:
给出上面的拓扑,我如何在p1c1和 之间进行通信p2c1?换句话说,我应该逐步podman(1)发出哪些命令来收集和的addressing information必要信息,然后使用该信息来配置其中的应用程序,以便它们可以相互通信?pod1:p1c1pod2:p2c1
先感谢您!
编辑:对于搜索者,可以在此处找到更多信息。
Podman 没有像 Swarm 或 Kubernetes 中的“服务”概念那样提供 Pod 之间的服务发现。您的选择归结为:
对于第一个解决方案,我们首先创建一个网络:
podman network create shared
Run Code Online (Sandbox Code Playgroud)
然后创建连接到shared网络的两个 Pod:
podman pod create --name pod1 --network shared
podman pod create --name pod2 --network shared
Run Code Online (Sandbox Code Playgroud)
当两个 Pod 运行在同一网络上时,容器可以通过名称引用另一个 Pod。p1c1例如,如果您在端口 80 上运行 Web 服务
,则p2c1可以curl http://pod1.
对于第二个选项,您可以执行以下操作:
podman pod create --name pod1 -p 1234:1234 ...
podman pod create --name pod2 ...
Run Code Online (Sandbox Code Playgroud)
现在,如果p1c1有一个服务正在侦听端口,您可以从at1234访问该服务。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-compose有相对完整的支持
docker-compose.yaml,您应该能够在docker-compose.yaml文件中正确设置网络(您可以手动创建网络,然后external在撰写文件中将其引用为网络)。
这是相关 Docker 文档的链接。我自己还没有用 podman 尝试过这个。
| 归档时间: |
|
| 查看次数: |
20674 次 |
| 最近记录: |