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