zoukankan      html  css  js  c++  java
  • docker 网络 路由

    通过在Docker宿主机上添加静态路由实现跨宿主机通信

     模拟环境 主机1(192.168.58.144) 设置docker0 网关 (172.17.0.1/16)
                    主机2(192.168.58.145) 设置docker0 网关 (172.18.0.1/16)
       修改方式 编辑 /etc/docker/daemon.json修改如下 两台主机分别设置不一样网关

    {"bip":"172.18.0.1/16"}

    重启docker
     

    service docker restart

    使用ifconfig查看docker0的ip是否修改
    分别在两个主机上启动1个容器

    docker run -itd --name s1  centos

    分别查看ip 是否是 172.17.0.2和172.18.0.1

        [root@cdh3 ~]# docker inspect s1 | grep IPA
                    "SecondaryIPAddresses": null,
                    "IPAddress": "172.18.0.2",
                            "IPAMConfig": null,
                            "IPAddress": "172.18.0.2",

    在主机144上 要求能访问 172.18段 添加路由

    route add -net 172.18.0.0 netmask 255.255.0.0 gw 192.168.58.145

    在主机145上 要求能访问 172.17段 添加路由

    route add -net 172.17.0.0 netmask 255.255.0.0 gw 192.168.58.145

    主机两台主机的 ip_forward功能必须开启 否则不会在网卡间转发

        [root@cdh2 ~]# sysctl -a | grep net.ipv4.ip_forward
        net.ipv4.ip_forward = 1

    如果值不是 1 修改 /etc/sysctl.conf 添加一行

    net.ipv4.ip_forward = 1

    执行命令 sysctl -p 生效即可  成功后 互相ping对方的docker容器的ip发现成功
    模拟环境图:


    3》Pipework指定静态ip

    Pipework是一个简单易用的Docker容器网络配置工具。由200多行shell脚本实现。通过使用ip、brctl、ovs-vsctl等命令来为Docker容器配置自定义的网桥、网卡、路由等。
    使用新建的bri0网桥代替缺省的docker0网桥
    bri0网桥与缺省的docker0网桥的区别:bri0和主机网卡之间是也是veth pair 可以为容器分配和主机相同的网段静态ip
    模拟环境图
     

    该方式创建的容器 使用none的网络模式 自己定义网桥和网卡等 启动容器时可以通过--net=none指定容器网络模式。

    安装网桥

     yum install -y bridge-utils

    查看所有网桥

        [root@cdh2 ~]# brctl show
        bridge name     bridge id               STP enabled     interfaces
        docker0         8000.0242027435aa       no

    修改网络文件/etc/sysconfig/network-scripts/ifcfg-eno16777736

        [root@cdh2 network-scripts]# more ifcfg-eno16777736
        TYPE=Ethernet
        #BOOTPROTO=dhcp
        BOOTPROTO=none
        #IPADDR=192.168.58.144
        DEFROUTE=yes
        IPV4_FAILURE_FATAL=no
        IPV6INIT=yes
        IPV6_AUTOCONF=yes
        IPV6_DEFROUTE=yes
        IPV6_FAILURE_FATAL=no
        NAME=eno16777736
        UUID=1c2310e2-e82e-4ce7-a1aa-60d05aa47f1e
        DEVICE=eno16777736
        ONBOOT=yes
        PEERDNS=yes
        PEERROUTES=yes
        IPV6_PEERDNS=yes
        IPV6_PEERROUTES=yes
        BRIDGE="br-ex"

    将静态ip相关注释 添加 BRIDGE=设备名称  添加一个新的网卡文件ifcfg-br-ex 内容

        [root@cdh2 network-scripts]# more ifcfg-br-ex
        TYPE=Bridge
        BOOTPROTO=static
        IPADDR=192.168.58.144
        NETMASK=255.255.255.0
        GATEWAY=192.168.58.2
        PREFIX=24
        DNS1=192.168.58.2
        NAME=br-ex
        ONBOOT=yes
        DEVICE=br-ex

    重启网卡后 查看网络和网桥

        root@cdh2 network-scripts]# ifconfig
        br-ex: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
                inet 192.168.58.144  netmask 255.255.255.0  broadcast 192.168.58.255
                inet6 fe80::20c:29ff:fe90:75c5  prefixlen 64  scopeid 0x20<link>
                ether 00:0c:29:90:75:c5  txqueuelen 0  (Ethernet)
                RX packets 268  bytes 24407 (23.8 KiB)
                RX errors 0  dropped 0  overruns 0  frame 0
                TX packets 136  bytes 17574 (17.1 KiB)
                TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

        [root@cdh2 network-scripts]# brctl show
        bridge name     bridge id               STP enabled     interfaces
        br-ex           8000.000c299075c5       no              eno16777736
        docker0         8000.0242027435aa       no

    下载pipework脚本

    [root@cdh2 ~]# git clone https://github.com/jpetazzo/pipework.git

    进入查看 其中有个文件pipework就是脚本

        [root@cdh2 ~]# cd pipework
        [root@cdh2 pipework]# ll
        total 60
        -rw-r--r-- 1 root root    75 Jun  6 11:28 docker-compose.yml
        drwxr-xr-x 2 root root    23 Jun  6 11:28 doctoc
        -rw-r--r-- 1 root root 11358 Jun  6 11:28 LICENSE
        -rwxr-xr-x 1 root root 14698 Jun  6 11:28 pipework
        -rw-r--r-- 1 root root   827 Jun  6 11:28 pipework.spec
        -rw-r--r-- 1 root root 22328 Jun  6 11:28 README.md

    将该脚本拷贝到/usr/local/bin目录 方便执行

    [root@cdh2 pipework]# cp -rp pipework /usr/local/bin

    分别添加容器 指定 none网络模式

    docker run -itd --net none --name s1  centos

    给容器制定固定ip

        [root@cdh2 pipework]# pipework br-ex s1 192.168.58.142/24@192.168.58.144
        [root@cdh2 pipework]# ping 192.168.58.142
        PING 192.168.58.142 (192.168.58.142) 56(84) bytes of data.
        64 bytes from 192.168.58.142: icmp_seq=1 ttl=64 time=0.249 ms

    piepework参数
    pipework 网桥名称 容器名称 容器固定ip/24@网桥ip
    其他机器上ping  192.168.58.142发现成功
    主机2配置同上即可
    ---------------------
    作者:liaomin416100569
    来源:CSDN
    原文:https://blog.csdn.net/liaomin416100569/article/details/80350144
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    python 如何将md5转为16字节
    linux非root用户执行开机启动程序
    python 正则表达式的使用
    Go随机数的使用
    Go 的类型断言type assertion
    go get中的...
    Go语言圣经
    python入门第三十五天--事件驱动模型(补)练习理解
    MySQL_Ubuntu安装
    JAVA入门基础--数据类型
  • 原文地址:https://www.cnblogs.com/yipianchuyun/p/10520356.html
Copyright © 2011-2022 走看看