我有一个码头集装箱运行覆盖网络。我的要求是从不同的主机外部访问此容器中运行的服务。服务绑定到容器的内部ip地址,在这种情况下,将端口绑定到主机不是一个解决方案。
实际情况:
在容器中运行的服务是用yarn客户机配置的spark驱动程序。spark驱动程序绑定到容器内部ip(10.x.x.x)。当spark驱动程序与运行在不同集群上的hadoop yarn通信时,yarn上的应用程序主程序试图与驱动程序容器内部ip上的spark驱动程序通信,但由于明显的原因,它无法连接内部ip上的驱动程序。
请让我知道,如果有一种方法,以实现从应用程序主(Yarn)到spark驱动程序(docker容器)的成功通信。
swarm版本:1.2.5
docker info:
Containers: 3
Running: 2
Paused: 0
Stopped: 1
Images: 42
Server Version: swarm/1.2.5
Role: primary
Strategy: spread
Filters: health, port, containerslots, dependency, affinity, constraint
Nodes: 1
ip-172-30-0-175: 172.30.0.175:2375
└ ID: YQ4O:WGSA:TGQL:3U5F:ONL6:YTJ2:TCZJ:UJBN:T5XA:LSGL:BNGA:UGZW
└ Status: Healthy
└ Containers: 3 (2 Running, 0 Paused, 1 Stopped)
└ Reserved CPUs: 0 / 16
└ Reserved Memory: 0 B / 66.06 GiB
└ Labels: kernelversion=3.13.0-91-generic, operatingsystem=Ubuntu 14.04.4 LTS, storagedriver=aufs
└ UpdatedAt: 2016-09-10T05:01:32Z
└ ServerVersion: 1.12.1
Plugins:
Volume:
Network:
Swarm:
NodeID:
Is Manager: false
Node Address:
Security Options:
Kernel Version: 3.13.0-91-generic
Operating System: linux
Architecture: amd64
CPUs: 16
Total Memory: 66.06 GiB
Name: 945b4af662a4
Docker Root Dir:
Debug Mode (client): false
Debug Mode (server): false
运行容器的命令:我正在使用docker compose运行它:
zeppelin:
container_name: "${DATARPM_ZEPPELIN_CONTAINER_NAME}"
image: "${DOCKER_REGISTRY}/zeppelin:${DATARPM_ZEPPELIN_TAG}"
network_mode: "${CONTAINER_NETWORK}"
mem_limit: "${DATARPM_ZEPPELIN_MEM_LIMIT}"
env_file: datarpm-etc.env
links:
- "xyz"
- "abc"
environment:
- "VOL1=${VOL1}"
- "constraint:node==${DATARPM_ZEPPELIN_HOST}"
volumes:
- "${VOL1}:${VOL1}:rw"
entrypoint: ["/bin/bash", "-c", '<some command here>']
1条答案
按热度按时间apeeds0o1#
似乎Yarn和Spark需要能够看到对方直接在网络上。如果你能把它们放在同一个覆盖网络上,任何东西都能直接通信,如果不能的话。。。
覆盖
可以通过网络将数据直接路由到docker节点上的覆盖网络中
docker_gwbridge
所有覆盖容器都连接到but,这是一个很大的but,只有在容器运行的docker节点上才有效。所以在2节点非群集模式覆盖10.0.9.0/24网络上运行2个容器。。。
我可以ping demo0上的本地容器,但不能ping demo1上的远程容器
然后在另一个主机上,容器被反转,但它仍然是可访问的本地容器。
因此,最大的问题是网络需要知道容器在哪里运行,并相应地路由数据包。如果网络能够实现这样的路由,您可能首先就不需要覆盖网络。
桥接网络
另一种可能性是在每个具有可路由ip的docker节点上使用普通网桥网络。因此,每个网桥都分配了一个ip范围,您的网络可以知道并可以从任何地方路由到该范围。
网络将为每个节点连接一个网络。
然后路由器配置路由
10.10.0.0/24
通过DockerA
等。这与kubernetes建立网络的方式类似。
编织网
weave与overlay类似,它创建了一个通过udp传输数据的虚拟网络。不过,它更像是一个通用的网络解决方案,可以与主机网络集成。