网络 – CentOS上的Docker与LAN网络的桥梁

我的服务器VLAN为10.101.10.0/24,我的Docker主机为10.101.10.31.如何在Docker主机(VM)上配置网桥,以便所有容器都可以直接连接到我的LAN网络,而无需在默认的172.17.0.0/16上重定向端口?我试过搜索但是到目前为止我发现的所有声音都导致失去了SSH会话,我不得不从控制台进入VM以恢复我所做的步骤.
最佳答案
有多种方法可以做到这一点.我最成功的两个是将子网路由到docker网桥并在主机LAN上使用自定义网桥.

Docker Bridge,路由网络

这样做的好处是只需要本机docker工具来配置docker.它有一个缺点,需要添加到您的网络的路由,这是在dockers汇款之外,通常是手动(或依赖于“网络人”).

Routed network

>启用IP转发

/etc/sysctl.conf: net.ipv4.ip_forward = 1
sysctl -p /etc/sysctl.conf

在VM网络上创建一个带有新子网的docker bridge,例如10.101.11.0/24

docker network create routed0 --subnet 10.101.11.0/24

>告诉网络的其余部分10.101.11.0/24应通过10.101.10.X进行路由,其中​​X是您的docker主机的IP.这是外部路由器/网关/“网络人”配置.在Linux网关上,您可以添加以下路由:

ip route add 10.101.11.0/24 via 10.101.10.31

>使用10.101.11.0/24地址在桥上创建容器.

docker run --net routed0 busybox ping 10.101.10.31
docker run --net routed0 busybox ping 8.8.8.8

然后你完成了.容器具有可路由的IP地址.
如果你对网络方面没问题,或者在网络上运行类似RIP / OSPF的东西,或者在Calico上负责路由,那么这是最干净的解决方案.

自定义桥,现有网络(和接口)

这样做的好处是不需要任何外部网络设置.缺点是docker主机上的设置更复杂.主接口在启动时需要此桥接器,因此它不是本机docker网络设置.需要Pipework或手动容器设置.

Shared bridge

使用VM可以使这更加复杂,因为您通过主VM的接口(will need additional “Promiscuous” config first to allow this to work)运行额外的MAC地址接口.

桥接接口的永久网络配置因发行版而异.以下命令概述了如何设置界面,并在重新启动后消失.在更改主网络接口配置时,您将需要控制台访问或单独进入VM的路径.

>在主机上创建一个桥.

ip link add name shared0 type bridge
ip link set shared0 up

在/ etc / sysconfig / network-scripts / ifcfg-br0中

DEVICE=shared0
TYPE=Bridge
BOOTPROTO=static
DNS1=8.8.8.8
GATEWAY=10.101.10.1
IPADDR=10.101.10.31
NETMASK=255.255.255.0
ONBOOT=yes

>将主接口连接到网桥,通常是eth0

ip link set eth0 up
ip link set eth0 master shared0

在/ etc / sysconfig / network-scripts / ifcfg-eth0中

DEVICE=eth0
ONBOOT=yes
TYPE=Ethernet
IPV6INIT=no
USERCTL=no
BRIDGE=shared0

>重新配置您的网桥以使用eth0的ip配置.

ip addr add dev shared0 10.101.10.31/24
ip route add default via 10.101.10.1

>使用10.101.10.0/24地址将容器连接到桥接器.

CONTAINERID=$(docker run -d --net=none busybox sleep 600)
pipework shared1 $CONTAINERID 10.101.10.43/24@10.101.10.Y

或者在容器内使用DHCP客户端

pipework shared1 $CONTAINERID dhclient

Docker macvlan网络

Docker之后添加了一个名为macvlan的网络驱动程序,可以使容器看起来直接连接到主机所在的物理网络.容器连接到主机上的父接口.

docker network create -d macvlan \
  --subnet=10.101.10.0/24 \
  --gateway=10.101.10.1  \
  -o parent=eth0 pub_net

这将遇到相同的VM /软交换问题,其中网络和接口需要是promiscuous with regard mac addresses.

转载注明原文:网络 – CentOS上的Docker与LAN网络的桥梁 - 代码日志