一个docker简单的操作导致的整体网络故障

1.故障现象:用户报障说网络中断,打开发现服务器侧的网络,时而通时而不通。

咨询用户,告知只是在10.1.1.34这台服务器做了操作,通过BMC到服务器上,查看history,发现用户执行了命令,docker run --rm --net shared_nw busybox ping 192.203.230.10

进入docker,查看:

将这个容器关闭docker stop be90dc40e7d8,网络恢复。

2.分析根因:

在BMC中进行测试,docker run –rm –net shared_nw_busybox ping 192.203.230.10

查看arp,发现网关10.1.1.1的MAC地址在变,原来容器里发布了网关10.1.1.1的IP地址,导致MAC地址冲突,时通时不通,

查看容器的network的情况,

[weihj@cicdhosts sysconfig]# docker network ls

NETWORK ID          NAME                DRIVER              SCOPE

45681218fc39        bridge              bridge              local

6a864d0ca853        host                host                local

6bef7504a66e        none                null                local

6c3e7034deb3        shared_nw           bridge              local

 

docker network inspect 6c3e7034deb3 ,如下表:(发现容器中存在10.1.1.101的IP地址,和网关地址10.1.1.1的MAC地址02:42:0a:01:01:01非常相似。计算了一下,10.1.1.101的最后一位101,换算成16进制就是65,(即6*16+5=101),所以这个MAC地址从容器中来是无疑了)。

                "MacAddress": "02:42:0a:01:01:65",

                "IPv4Address": "10.1.1.101/24",

[weihj@cicdhosts sysconfig]$ docker network inspect 6c3e7034deb3        

[

    {

        "Name": "shared_nw",

        "Id": "6c3e7034deb37bf21e69ccb62d2517eb90cb50c9ca0512b739d356c33b835497",

        "Created": "2019-10-13T16:26:38.504975461+08:00",

        "Scope": "local",

        "Driver": "bridge",

        "EnableIPv6": false,

        "IPAM": {

            "Driver": "default",

            "Options": {},

            "Config": [

                {

                    "Subnet": "10.1.1.0/24",

                    "Gateway": "10.1.1.34"

                }

            ]

        },

        "Internal": false,

        "Attachable": false,

        "Ingress": false,

        "ConfigFrom": {

            "Network": ""

        },

        "ConfigOnly": false,

        "Containers": {

            "39abbc28cff13ed184450619db752472f724320b3060c744a0ee8e84618c7186": {

                "Name": "gitlab",

                "EndpointID": "92699c32bb0c3d08fd2aeba47459685118249f1862d6687442bfdeeb9084520b",

                "MacAddress": "02:42:0a:01:01:65",

                "IPv4Address": "10.1.1.101/24",

                "IPv6Address": ""

            }

        },

        "Options": {

            "com.docker.network.bridge.name": "docker1"

        },

        "Labels": {}

    }

]

 

但是这个IP地址是怎么来的的?查看容器busybox的在容器中的IP地址,

 

原来如此,10.1.1.1被当做动态IP被分配给了容器,和网关的IP地址冲突。

查了一下docker的手册,有个参数ip-range,在建网桥的时候直接将网关地址排除掉就可以了。

“”docker network create \

  --driver=bridge \

  --subnet=10.1.0.0/16 \

  --ip-range=10.1.2.0/24 \

  --gateway=10.1.1.1 \

  br0

3.结论:

docker在企业网里的使用,怎样才是最佳实践?还需要多仔细研究研究。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章