0

让我用一个真实的例子来帮助这个问题。

使用,我使用以下脚本在它自己的内部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 containersHost

这是如何实现的podman(1)

其他几点可以帮助:

  • 这是一个例子Spark Pod。还有其他Pod附加相同的 s pod networkmynet
  • 我不想发布额外的端口,因为一旦你深入到UI. 更重要的是,这样做违背了Pods 的目的,它将冲突的端口相互隔离。相反,我需要了解如何“网关”这些请求。
  • 最后,我很谦虚,因为我认为我很了解podman(1)LoL

先感谢您。

4

1 回答 1

1

答案

在与GitHubpodman(1)的团队交谈时,上述情况(和类似情况)总是会出现问题,因为没有配置权限来允许所需的端口转发。rootless networkingbridge networking

所以有两种选择:

  1. 在上面做同样的事情,但是使用rootful podman(1)( rootful containers)。基本上,用 . 运行东西sudo(1)
  2. 使用host模式网络,它将所有容器放入与(基本上是裸机裸机)相同network namespaceHOST容器中——无论这些容器是否在Pod. 因此,使用Podhost模式的 s 不再提供网络隔离,但它们仍然提供将其中的容器视为一个组的便利(例如startstop将它们视为一个组)。此外,该选项不再适用,因为一切都在(顶级)级别--publish共存;HOST所以innerouter端口的概念不存在。

可以在这里找到一个不错的rootless container/host联网小教程。podman(1)

于 2021-06-29T20:23:26.530 回答