一個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在企業網裏的使用,怎樣纔是最佳實踐?還需要多仔細研究研究。

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