繁体   English   中英

使用 Podman 与不同的 Pod 通信

[英]Communicate different pods using Podman

我正在使用 podman-compose 部署多个 Pod。 为此,每个 pod 在我以无根模式执行的 podman-compose.yaml 文件中都有自己的定义(因此 Pod 中的所有容器共存于同一主机/IP 中)。 但是,我想让 Pod 中的容器能够访问另一个 Pod 中的容器公开的服务。

我知道 Kube.netes 有服务 object 让 pod 在它们之间进行通信。 但是我不想用K8S...

所以我的问题是:是否有任何“等效”或解决方法可以用来在 pod 之间实现这种通信? 不仅在 Podman 生态系统中,而且在 Linux 生态系统中。

理想情况下,我想使用 DNS 让容器解析其他 pod 中其他容器的 IP。 我应该使用我的机器(所有 pod 都在运行的地方)DNS 来代理 pod 之间的请求吗? 更重要的是,这是一个好的做法吗?

抱歉,如果答案很明显,我是 IT 界的新手。

无论如何,提前谢谢大家!

创建一个 .network 并让所有 Pod 在启动时使用那个 .network。 然后,如果您使用 --name 来命名 pod,则能够将该名称用作其他人的 DNS 条目。

例如

podman.network 创建 .NETWORK_NAME

podman pod create --name $POD1 -.network .NETWORK_NAME

podman pod create --name $POD2 -.network .NETWORK_NAME

podman run -it --detach --pod $POD1 --name $CONTAINER1 -.network .NETWORK_NAME image_name

podman run -it --detach --pod $POD2 --name $CONTAINER2 -.network .NETWORK_NAME image_name

现在,如果您从 CONTAINER2 卷曲,则可以使用 curl http://$POD1,它将解析为该 POD 的 IP(在.network 上创建的私有 ip)。

如果您不想使用 pod,只需删除所有 pod create 和 --pod 标志到 podman run,然后使用 $CONTAINER1 或 $CONTAINER2 与同一网络中的其他容器通信。

有了这个,你不需要暴露大量的端口,让你的容器与主机通信并返回到暴露的端口。 只需通过 pod / 容器名称引用它们。

所以我的问题是:是否有任何“等效”或解决方法可以用来在 pod 之间实现这种通信? 不仅在 Podman 生态系统中,而且在 Linux 生态系统中。

没有类似于 Kube.netes Service object 的类比。在 podman(和 docker)中,服务发现是基于名称的:容器可以通过名称引用其他容器,并且对它们可以访问的端口没有限制。 所以如果你有:

version: "3"

services:
  app1:
    image: docker.io/alpinelinux/darkhttpd:latest

  app2:
    image: docker.io/alpinelinux/darkhttpd:latest

然后在app1容器中运行的应用程序可以访问app2容器中的服务。 也就是说,如果您podman exec进入app1 ,您可以运行:

wget -O- http://app2:8080

这是默认行为; 没有什么特别需要设置的。

最后,我在容器组织中找到了 Podman 的dnsname 插件,它可以通过使用其 DNS 网关实现 pod 到 pod 的解析。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM