让我用一个真实的例子来帮助这个问题。
使用,我使用以下脚本在它自己的内部rootless podman(1)
启动一个小Spark
集群,效果很好:Pod
#! /usr/bin/bash
podman network create --subnet 192.168.10.0/24 --gateway 192.168.10.1 mynet
podman pod create \
--name=spark \
--network=mynet \
--share net \
--publish 7077:7077 \
--publish 8080:8080
podman run \
--detach \
--pod=spark \
--name=master01 \
--hostname spark \
--restart always \
--env SPARK_MODE=master \
--env SPARK_RPC_AUTHENTICATION_ENABLED=no \
--env SPARK_RPC_ENCRYPTION_ENABLED=no \
--env SPARK_LOCAL_STORAGE_ENCRYPTION_ENABLED=no \
--env SPARK_SSL_ENABLED=no \
--add-host spark:127.0.0.1 \
--add-host worker01:127.0.0.1 \
docker.io/bitnami/spark:latest
podman run \
--detach \
--pod=spark \
--name=worker01 \
--hostname worker01 \
--restart always \
--env SPARK_MODE=worker \
--env SPARK_MASTER_URL=spark://spark:7077 \
--env SPARK_WORKER_MEMORY=4G \
--env SPARK_WORKER_CORES=8 \
--env SPARK_RPC_AUTHENTICATION_ENABLED=no \
--env SPARK_RPC_ENCRYPTION_ENABLED=no \
--env SPARK_LOCAL_STORAGE_ENCRYPTION_ENABLED=no \
--env SPARK_SSL_ENABLED=no \
--add-host spark:127.0.0.1 \
--add-host worker01:127.0.0.1 \
docker.io/bitnami/spark:latest
下面是一张图片SparkUI
。
(Note
:这个问题Spark
用作辅助,但本身不是关于Spark
)。
查看浏览器图像的左下角。将鼠标悬停在唯一可用的Spark worker
链接(下方Worker id
)上,注意 URL 解析为192.168.10.2
,这是上面创建的有效Pod IP-Address
链接podman network
。
但是,单击该 URL 当然会挂起,因为Pod IP-Address
无法从HOST
. 使用docker(1)
(not ) 有一种网关机制可以在和podman(1)
之间路由请求。guest containers
Host
这是如何实现的podman(1)
?
其他几点可以帮助:
- 这是一个例子
Spark Pod
。还有其他Pod
附加相同的 spod network
:mynet
- 我不想发布额外的端口,因为一旦你深入到
UI
. 更重要的是,这样做违背了Pod
s 的目的,它将冲突的端口相互隔离。相反,我需要了解如何“网关”这些请求。 - 最后,我很谦虚,因为我认为我很了解
podman(1)
。LoL
先感谢您。