Docker网络 之 IPvlan

22 篇文章 0 订阅
14 篇文章 0 订阅

原文链接:WorkMap技术博客-Docker网络

简介

Docker的IPvlan网络驱动,基于最新的Linux网络虚拟化技术。它的实现非常轻量级,不使用传统的Linux网桥隔离,容器可以直接连接到主机的网络设备接口,提升网络性能。

参数

  • ipvlan_mode

    设置IPvlan的操作模式。可以是以下之一:l2,l3,l3s,默认为l2;

  • ipvlan_flag

    设置IPvlan模式标志。可以是以下之一:bridge,private,vepa,默认是bridge;

  • parent

    指定要使用的父接口。

前置条件

Linux内核v4.2+(支持早期内核版本,但可能有bug)

IPvlan L2 模式

连接到主机的eth0设备

  • 查看主机的eth0网络设备
    ip addr show eth0
    
  • 创建IPvlan网络,用主机上的eth0作为父设备,使用l2模式
    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
    
  • 启动容器,连接到IPvlan网络
    docker run --net=db_net -it --rm alpine /bin/sh
    
  • 这种模式下的容器网络架构如下图所示:

在这里插入图片描述

与bridge网络的区别,简化了网络架构,不需要经过docker0桥接

在这里插入图片描述

基于801.2q协议的Vlan作为parent

  • 创建ipvlan网络ipvlan20,parent是id为20的Vlan
     docker network create -d ipvlan \
      --subnet=192.168.20.0/24 \
      --gateway=192.168.20.1 \
      -o parent=eth0.20 ipvlan20
    

    eth0.20的格式为interface_name.vlan_tag,使用这种标准格式,docker会自动创建id为20的虚拟eth网络设备。

  • 查看主机网络,会新增一个网络设备eth0.20
    ip link
    
  • 创建连接到ipvlan20的容器,并进入到容器
    docker run --net=ipvlan20 -it --name ivlan_test1 --rm alpine /bin/sh
    

    可以在容器内执行ip link查看容器网络接口

可以创建多个vlan,不同的容器集合连接到不同的vlan网络,网络架构图如下所示:

在这里插入图片描述

IPvlan L3模式

IPvlan L3模式会丢弃所有广播和多播流量。所以,可以使用IPvlan L3模式进行大规模和可预测网络的集成。通过IPvlan L2模式,隔离一些vlans,这些vlans通过交换机交换数据。然后通过IPvlan L3模式在边缘进行路由,这样可以将故障域缩小到本地主机。
L3模式需要在默认命名空间中有一个单独的子网,因为它需要一个指向IPvlan父接口的netlink路由。
本示例中使用的父接口是eth0,它位于子网192.168.1.0/24上。注意,创建的docker网络与主机的eth0不在同一个子网中。
与IPvlan L2模式不同,只要它们共享相同的父接口-o parent=,不同的子网/网络可以相互ping通。
在这里插入图片描述

  • 创建IPvlan L3网络
     docker network create -d ipvlan \
      --subnet=192.168.214.0/24 \
      --subnet=10.1.214.0/24 \
      -o ipvlan_mode=l3 ipnet210
    
  • 创建两个容器,连接到ipnet210
     docker run --net=ipnet210 --ip=192.168.214.10 -itd alpine /bin/sh
     docker run --net=ipnet210 --ip=10.1.214.10 -itd alpine /bin/sh
    
  • 创建一个新容器,ip为192.168.214.9,测试能否ping通10.1.214.10容器
    docker run --net=ipnet210 --ip=192.168.214.9 -it --rm alpine ping -c 2 10.1.214.10
    
  • 创建一个新容器,ip为10.1.214.9 ,测试能否ping通10.1.214.10容器
    docker run --net=ipnet210 --ip=10.1.214.9 -it --rm alpine ping -c 2 192.168.214.10
    
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值