• Docker(五):Docker高级网络配置


    1、容器跨主机多子网方案

      网络设计如下:

        主机1:10.110.52.38

          容器1: 192.168.0.1  vlan1

          容器2: 192.168.0.2  vlan2

        主机2:10.110.52.66

          容器3: 192.168.0.3  vlan1

          容器4: 192.168.0.4  vlan2

      本示例采用OVS(Open vSwitch)网桥替代Docker默认的Linux网桥,搭建两个跨主机的vlan。实现跨主机的属于同个vlan互通,不同vlan隔离。

    2、搭建步骤

      Host1的网桥配置:

        #创建一个网桥:ovs-vsctl add-br ovs-br0

        #创建一个到10.110.52.66的vxlan tunnel:ovs-vsctl add-port ovs-br0 vxlan-10.110.52.66 -- set interface vxlan-10.110.52.66 type=vxlan option:remote_ip="10.110.52.66"

        #运行docker:docker run -tid --net=none --name=container1 ubuntu:latest /bin/bash

        #获取container1的pid:pid=$(docker inspect -f '{{.State.pid}}' container1)

        #创建可以使用ip netns命令操纵network namespace的项

        #mkdir -p /var/run/netns

        #ln -s /proc/$pid/ns/net /var/run/netns/$pid

        #为container1创建一对虚拟网卡接口

        #ip link add name vethC1Host mtu 1500 type veth peer namevethC1Container mtu 1500

        #将veth pair的一端加入到ovs网桥中,并设置为vlan1,vlan通过tag值划分

        #ovs-vsctl add-port ovs-br0 vethC1Host tag=1

        #启用:ip link set vethC1Host up

        #将veth pair的另一端放入容器所在network namespace

        #ip link set vethC1Container netns $pid

        #进入$pid所在的netns中,配置刚才放入其中的虚拟网卡,改名为eth0,配置IP并启用

        #ip netns exec $pid ip link set dev vethC1Container name eth0

        #ip netns exec $pid ip addr add 192.168.0.1/24 dev eth0

        #ip netns exec $pid ip link set eth0 up

        #container2的网络配置与container1类似

        #运行docker:docker run -tid --net=none --name=container2 ubuntu:latest /bin/bash

        #获取container1的pid:pid=$(docker inspect -f '{{.State.pid}}' container2)

        #mkdir -p /var/run/netns

        #ln -s /proc/$pid/ns/net /var/run/netns/$pid

        #ip link add name vethC2Host mtu 1500 type veth peer namevethC2Container mtu 1500

        #ovs-vsctl add-port ovs-br0 vethC1Host tag=2

        #启用:ip link set vethC2Host up

        #ip link set vethC2Container netns $pid

        #ip netns exec $pid ip link set dev vethC2Container name eth0

        #ip netns exec $pid ip addr add 192.168.0.2/24 dev eth0

        #ip netns exec $pid ip link set eth0 up

      Host2网桥配置:  

        #创建一个网桥:ovs-vsctl add-br ovs-br0

        #创建一个到10.110.52.38的vxlan tunnel:ovs-vsctl add-port ovs-br0 vxlan-10.110.52.38 -- set interface vxlan-10.110.52.38 type=vxlan option:remote_ip="10.110.52.38"

        #运行docker:docker run -tid --net=none --name=container3 ubuntu:latest /bin/bash

        #获取container3的pid:pid=$(docker inspect -f '{{.State.pid}}' container3)

        #mkdir -p /var/run/netns

        #ln -s /proc/$pid/ns/net /var/run/netns/$pid

        #ip link add name vethC3Host mtu 1500 type veth peer namevethC3Container mtu 1500

        #将veth pair的一端加入到ovs网桥中,并设置为vlan3,vlan通过tag值划分

        #ovs-vsctl add-port ovs-br0 vethC3Host tag=1

        #启用:ip link set vethC3Host up

        #将veth pair的另一端放入容器所在network namespace

        #ip link set vethC1Container netns $pid

        #进入$pid所在的netns中,配置刚才放入其中的虚拟网卡,改名为eth0,配置IP并启用

        #ip netns exec $pid ip link set dev vethC3Container name eth0

        #ip netns exec $pid ip addr add 192.168.0.3/24 dev eth0

        #ip netns exec $pid ip link set eth0 up

        #container4的网络配置与container3类似

        #运行docker:docker run -tid --net=none --name=container4 ubuntu:latest /bin/bash

        #获取container4的pid:pid=$(docker inspect -f '{{.State.pid}}' container4)

        #mkdir -p /var/run/netns

        #ln -s /proc/$pid/ns/net /var/run/netns/$pid

        #ip link add name vethC4Host mtu 1500 type veth peer namevethC4Container mtu 1500

        #ovs-vsctl add-port ovs-br0 vethC4Host tag=2

        #启用:ip link set vethC4Host up

        #ip link set vethC4Container netns $pid

        #ip netns exec $pid ip link set dev vethC4Container name eth0

        #ip netns exec $pid ip addr add 192.168.0.4/24 dev eth0

        #ip netns exec $pid ip link set eth0 up

      配置完成以后可以使用ovs-vsctl show命令查看Host1和Host2网桥及网卡信息。

      此时相同vlan下的容器可跨网段访问。

      

  • 相关阅读:
    添加gitignore文件后使其生效
    git提交时如何忽略一些文件
    苹果:Safari 4 下载量三天内达 1100 万次
    Linux Multitouch 技术展示
    HTML 5 来了,不需要 Flash 插件的 Youtube
    JSR 299(Java EE 平台的上下文与依赖注入)最终建议草案
    JSR 330(Java 的依赖注入)通过 JCP 接受
    HTML 5 来了,不需要 Flash 插件的 Youtube
    22 条经典的编程引言
    JSR 330(Java 的依赖注入)通过 JCP 接受
  • 原文地址:https://www.cnblogs.com/dukuan/p/7554446.html
Copyright © 2020-2023  润新知