Funcionamiento de la red en un Pod

Configuración de red en los contenedores de un Pod

Cuando creamos un Pod, este recibe una dirección IP, que será compartida con todos los contenedores.

  • En el caso de Pods rootful, si no indicamos lo contrario, el Pod se conectará con la red bridge por defecto.
  • En el caso de Pods rootless, por defecto se conectará a la red slirp4netns.

A la hora de trabajar con Pods tenemos que tener en cuenta las siguientes características.

  • Si queremos ofrecer algún servicio en un puerto, el mapeo del puerto se indicará en la creación del Pod.
  • Los contenedores se pueden comunicar entre ellos usando la interfaz loopback: la dirección IP 127.0.0.1 o el nombre localhost.

Podemos crear un Pod conectado a cualquier otra red:

$ podman network create mired
$ podman pod create --name pod2 --network mired
$ podman pod ps
POD ID        NAME        STATUS      CREATED         INFRA ID      # OF CONTAINERS
1f6ed1602460  pod2        Created     6 minutes ago   be8baecabdc2  1
$ podman pod start pod2
$ podman inspect --format='{% raw %}{{range .NetworkSettings.Networks}}{% endraw %}{% raw %}{{.IPAddress}}{% endraw %}{% raw %}{{end}}{% endraw %}' be8baecabdc2
10.89.0.2

Exponer un servicio en un Pod

Al crear un Pod indicamos el puerto que vamos a mapear con la opción -p o --publish. Evidentemente sólo podremos tener un contenedor que ofrezca el servicio en el puerto que estamos mapeando:

$ podman pod create --name pod3 -p 8080:80

A continuación añadimos un contenedor que ofrece un servicio web en el puerto 80:

$ podman run -d --pod pod3 --name webserver quay.io/libpod/banner

Vemos el Pod y el contenedor que hemos creado:

$ podman pod ps --ctr-names
POD ID        NAME        STATUS      CREATED         INFRA ID      NAMES
688e66fd19dd  pod3        Running     2 minutes ago   2d994796c3f2  688e66fd19dd-infra,webserver

$ podman ps --pod
CONTAINER ID  IMAGE                                    COMMAND               CREATED             STATUS             PORTS                 NAMES               POD ID        PODNAME
2d994796c3f2  localhost/podman-pause:4.9.4-1711445992                        2 minutes ago       Up About a minute  0.0.0.0:8080->80/tcp  688e66fd19dd-infra  688e66fd19dd  pod3
b7f0b9aa1aa0  quay.io/libpod/banner:latest             nginx -g daemon o...  About a minute ago  Up About a minute  0.0.0.0:8080->80/tcp  webserver           688e66fd19dd  pod3

Podríamos crear un Pod y añadir un contenedor en la misma instrucción, para ello al indicar el nombre del Pod donde se crea el contenedor ponemos el valor new:

$ podman run -d --pod new:pod4 --name webserver2 -p 8081:80 quay.io/libpod/banner

Para acceder al servicio, utilizamos la IP del host y el puerto que hemos mapeado:

$ curl http://localhost:8080
   ___          __              
  / _ \___  ___/ /_ _  ___ ____ 
 / ___/ _ \/ _  /  ' \/ _ `/ _ \
/_/   \___/\_,_/_/_/_/\_,_/_//_/

Comunicación entre contenedores dentro del Pod

Como hemos indicado para que un contenedor acceda al servicio de otro contenedor dentro del Pod, deberá usar la interfaz loopback: la dirección IP 127.0.0.1 o el nombre localhost:

$ podman run -it --pod pod3 --name cliente quay.io/libpod/banner curl http://localhost
   ___          __              
  / _ \___  ___/ /_ _  ___ ____ 
 / ___/ _ \/ _  /  ' \/ _ `/ _ \
/_/   \___/\_,_/_/_/_/\_,_/_//_/