Firewalld可以与Docker Overlay Network一起使用吗?

时间:2016-05-19 00:21:49

标签: docker

首先,我使用以下设置创建2个泊坞主机:

## CLUSTER CONFIGURATION
# Firewall: firewalld
# OS: CentOS7
# IPs:
 - 10.10.2.3
 - 10.10.2.4

# Docker daemons:
/usr/bin/docker daemon -H fd:// -H tcp://0.0.0.0:2375 \
          --cluster-store=consul://10.10.2.3:8500 \
          --cluster-advertise=10.10.2.3:2375
/usr/bin/docker daemon -H fd:// -H tcp://0.0.0.0:2375 \
          --cluster-store=consul://10.10.2.3:8500 \
          --cluster-advertise=10.10.2.4:2375

然后,我创建了一个覆盖网络:

docker network create -d overlay my-overlay-network

然后,我尝试使用容器的主机名从Node1上的容器ping Node2上的容器:

# ssh 10.10.2.4
docker run --net my-overlay-network --hostname 10-10-2-4-container centos /bin/sh -c 'while true; do sleep 1; done'

# Start firewalld, and open ports on both machines
systemctl start firewalld 
/usr/bin/firewall-cmd \
  # Add Consul ports
  --add-port=8300/tcp \
  --add-port=8301/tcp \
  --add-port=8301/udp \
  --add-port=8302/tcp \
  --add-port=8302/udp \
  --add-port=8400/tcp \
  --add-port=8500/tcp \
  --add-port=8600/tcp \
  --add-port=8600/udp
  # Add Docker ports
  --add-port=2375/tcp \
  --add-port=7946/tcp \
  --add-port=7946/udp \
  --add-port=4789/tcp

# From Node1. This fails! The hostname resolves correctly 
# to the right subnet and IP, but the ping packet doesn't return.
docker run --net my-overlay-network centos ping -c node2-container


# After disabling the firewall, it works fine.
systemctl stop firewalld # From 10.10.2.3
systemctl stop firewalld # From 10.10.2.4
docker run --net my-overlay-network centos ping -c 10-10-2-4-container

基本上,当防火墙打开时,我看起来无法ping我的节点。主机名似乎正确解析。 如何配置我的防火墙以使用Docker的覆盖网络?

1 个答案:

答案 0 :(得分:2)

是的,它可以!

这些是您需要为覆盖网络打开以便与多主机Docker设置一起工作的端口:

firewall-cmd \
  --add-port=2375/tcp \
  --add-port=4789/udp \
  --add-port=7946/tcp \
  --add-port=7946/udp

4789端口用于VXLAN。它通过UDP运行。您还需要打开KV系统使用的任何端口,尤其是用于DNS解析的端口(Consul侦听8600 UDP / TCP以进行DNS解析)。