Dockernetworking和VLAN
(主机)VLAN接口上的Dockernetworking,我有一个问题。
我尝试通过VLANnetworking将docker容器ssh移出到服务器,但无法build立连接(超时)。
设置:
我有两台机器(让我们称之为服务器和笔记本电脑)连接
- 一个networking使用vlan(让我们称之为“私人”)
- 一个“正常”的networking(让我们称之为“公共”)
我尝试使用专用networking从笔记本电脑上的容器通过SSH连接到服务器
诊断步骤:
- 一个“原生”的SSH连接工作正常,使用私人和公共networking。
- 从笔记本电脑上的容器到使用公共networking的服务器的SSH连接是可能的。
-
wireshark(在笔记本电脑vlan接口上监听)告诉我发送了一个[SRV]软件包,服务器用[SRV,ACK]响应。 但是,容器似乎没有收到这个信息,导致服务器的[SRV,ACK]重新传输,也导致容器中新的[SRV]包。
-
我开始了一个监听
0.0.0.0
(在所有接口上)的nginx
容器 – 它可以从公共networking访问,但不能从私有networking访问 -
我在笔记本电脑上本地安装了
nginx
,再次监听所有接口。 这是通过这两个networking, 私人和公共 。
所以这个问题似乎与“docker和vLAN”有关:wireshark此外暗示“传出”是可能的,但“传入”不是。
有任何想法吗?
目前最好的select是使用(当前)实验性function“ Ipvlan Network ”。
Linux实现非常轻便,因为它们不是使用传统的Linux桥接进行隔离,而只是将其与Linux以太网接口或子接口相关联,以实现networking之间的分离以及与物理networking的连接。
这个文档是相当大的,不能在这里复制,但是,一旦安装实验版本,创buildipvlannetworking并运行一个附加的容器,你应该运行:
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_netnetworking上启动一个容器
docker run --net=db_net -it --rm alpine /bin/sh
在那个页面上还有很多东西需要阅读。
几个注意事项:
-
-o ipvlan_mode=
如果未指定,则默认为L2模式 -
这些容器不能 ping通底层的主机接口,因为它们被Linux有意地过滤以获得额外的隔离。
-
实验意味着它被认为没有准备好生产,并可能有一些错误。 该文档指出,它“提供了在沙箱环境中的testing和评估”。