Docker网络和VLAN

时间:2016-08-10 09:18:50

标签: docker

我对(主机)VLAN接口上的docker网络有疑问。

我尝试通过VLAN网络从docker容器ssh到服务器,但无法建立连接(超时)。

环境:

我有两台机器(让我们称之为服务器和笔记本电脑)通过

连接
  • 使用vlan的网络(让我们称之为“私有”)
  • “普通”网络(我们称之为“公共”)

我尝试使用私有网络从笔记本电脑上的容器连接到服务器

诊断步骤:

  • 使用私有公共网络,“本机”SSH连接可以正常工作。
  • 可以使用公共网络从笔记本电脑上的容器内部连接到服务器。
  • wireshark(在笔记本电脑vlan接口上监听)告诉我发送了一个[SRV]包,服务器用[SRV,ACK]响应。然而,容器似乎没有收到这个,导致服务器的[SRV,ACK]重新传输,也从容器重新传输到新的[SRV]包。

  • 我启动了nginx容器侦听0.0.0.0(在所有接口上) - 可以从公共网络访问,但不能从私人网络

  • 我在笔记本电脑上本地安装了nginx,再次监听所有界面。它可通过两个网络访问,私有公共

所以问题似乎与“docker和vLANs”有关:wireshark还建议“传出”是可能的,但“传入”不是。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

目前,最好的选择是使用(当前)实验性功能“Ipvlan Network”。

  

Linux实现非常轻量级,因为相反   与使用传统的Linux网桥隔离相比,它们很简单   与Linux以太网接口或子接口相关联以强制执行   网络之间的分离以及与物理网络的连接。

documentation非常大,无法在此复制,但是,一旦安装了实验版本,要创建ipvlan网络并运行附加到它的容器,您应该运行:

  

Ipvlan

docker network  create -d ipvlan \
  --subnet=192.168.1.0/24 \ 
  --gateway=192.168.1.1 \
  -o ipvlan_mode=l2 \
  -o parent=eth0 db_net
     

在db_net网络上启动容器

docker  run --net=db_net -it --rm alpine /bin/sh

在该页面上还有更多内容需要阅读。

很少注意到:

  1. -o ipvlan_mode=默认为L2模式(如果未指定)

  2. 容器无法 ping基础主机接口,因为它们被Linux有意过滤以进行额外隔离。

  3. 实验意味着它被认为还没有为生产做好准备,可能会有一些错误。该文档指出它“在沙盒环境中提供测试和评估。”