Docker Swarm Mode网络诊断工具

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: Docker CE 从17.12版本开始加入网络调试的工具,使用这个工具可以帮助排查Linux上的docker overlay网络以及swarm service的问题

(文章翻译自https://github.com/fcrisciani/libnetwork/blob/be91c3ed62817bc3899ebe154eea07c573395b0c/cmd/diagnostic/README.md)


Docker CE 从17.12版本开始加入网络调试的工具,使用这个工具可以帮助排查Linux上的docker overlay网络以及swarm service的问题。当开启网络调试选项时,Docker daemon会在指定的端口启动一个网络诊断的服务以提供网络诊断信息的获取。这个调试工具只建议在需要排查特定的网络问题时开启,不应该一直开启着这个调试服务。

被保存在数据库中的网络的信息可以通过诊断的API获取到,目前这个数据库中主要包含了overlay网络的数据,以及服务发现的数据。

Docker目前也提供了一个预览版的CLI的集成工具,这个工具通过访问Docker暴露的诊断API来查询和控制网络的接口,但这个工具的实现和命令选项并没有完全确定下来,后续可能随时会改变。

目前可以以下两种方式来使用这个调试工具:

  • 只有客户端的工具的镜像:dockereng/network-diagnostic:onlyclient
  • Docker in docker的镜像: dockereng/network-diagnostic:17.12-dind

Docker in docker的方式提供的工具是为了在集群版本小于17.12中使用,利用这个镜像中的Docker去获取到集群的网络信息。

打开诊断服务

这个工具目前只能在Linux上的Docker节点使用,通过下面的步骤打开:

  1. 通过在/etc/docker/daemon.json中配置network-diagnostic-port,在节点上设置一个空闲的端口分配给诊断服务:

    "network-diagnostic-port": <port>
  2. 使用下面这个命令找到dockerd的进程id(PID):

    $ ps aux |grep dockerd | grep -v grep
  3. 不需要重启Docker daemon,直接通过发送HUP信号给刚才找到的进程ID来reload配置:

    kill -HUP <pid-of-dockerd>

如果Docker是用systemd启动的,上面这一步也可以直接使用systemctl reload docker来reload配置。reload之后可以在docker的日志看到:

Starting the diagnostic server listening on <port> for commands

关闭诊断服务

  1. /etc/docker/daemon.json中移除掉network-diagnostic-port的配置
  2. 像上面一样找到dockerd的进程ID
  3. 像上面一样reload下dockerd的配置 reload后可以看到dockerd打出如下日志:
Disabling the diagnostic server

诊断API

诊断的API通过http暴露到上面指定的端口上,通过HTTP请求访问这个端口来访问这个诊断API,下面的命令中我们假定定义的端口是20000

例如:

获取API帮助(API列表):

$ curl localhost:2000/help

OK
/updateentry
/getentry
/gettable
/leavenetwork
/createentry
/help
/clusterpeers
/ready
/joinnetwork
/deleteentry
/networkpeers
/
/join

加入或离开网络集群

$ curl localhost:2000/join?members=ip1,ip2,...
$ curl localhost:2000/leave?members=ip1,ip2,...

ip1, ip2, ... 这些是swarm集群中的其他节点IP

添加或者删除掉一个网络

$ curl localhost:2000/joinnetwork?nid=<network id>
$ curl localhost:2000/leavenetwork?nid=<network id>

network id 可以在swarm集群的manager节点中通过docker network ls --no-trunc看到,这里必须使用完整的network id

罗列集群的peer

$ curl localhost:2000/clusterpeers

罗列拥有某个网络的节点列表

$ curl localhost:2000/networkpeers?nid=<network id>

network id 可以在swarm集群的manager节点中通过docker network ls --no-trunc看到,这里必须使用完整的network id

Dump 网络信息数据库的表

这些表包含 endpoint_tableoverlay_peer_tableoverlay_peer_table中包含了网络的转发信息。 endpoint_table包含了服务发现的信息。

$ curl localhost:2000/gettable?nid=<network id>&tname=<table name>

修改指定的数据库表

这些表包含 endpoint_tableoverlay_peer_table

$ curl localhost:2000/<method>?nid=<network id>&tname=<table name>&key=<key>[&value=<value>]

注意:这里只是更新了执行的节点上的表,这意味着在这个节点同步集群之前会一直保持着这个更新的值。

使用诊断的客户端来访问网络信息

这个工具的实现和命令选项并没有完全确定下来,后续可能随时会改变。 这个工具可以直接通过执行一个的镜像中的diagnosticClient可执行文件来调用网络信息。

docker run --net host dockereng/network-diagnostic:onlyclient -v -net <full network id> -t sd

下面是支持的命令:

选项 描述
-t  访问的table的名称 sd  overlay.
-ip  要访问的API的IP地址. 默认是 127.0.0.1.
-net  The target network ID.
-port  要访问的API的端口. 默认是 2000
-v 显示verbose级别日志

Docker in docker版本的诊断工具

这个命令行工具内置了docker 17.12的docker daemon,并且需要以privileged模式运行。
注意: 每个更新操作例如(create entry)只是更新了执行的节点上本地的表,这意味着在这个节点同步集群之前会一直保持着这个更新的值。

  1. 保证诊断的节点不在集群中,如果已经加入到了一个集群中,可以docker swarm leave -f离开集群
  2. 可以使用下面这个命令来启动这个容器:

    $ docker container run --name net-diagnostic -d --privileged --network host dockereng/network-diagnostic:17.12-dind
  3. 通过docker exec -it <container-ID> sh进入到这个容器中,使用下面这个命令启动诊断服务器:

    $ kill -HUP 1
  4. 把诊断容器的docker daemon加入到已有的docker swarm集群中,然后再容器中执行诊断的可执行工具。

    $ ./diagnosticClient <flags>...
  5. 完成诊断后,离开现有的这个集群,并停止这个诊断容器。

示例:

下面的这些命令会dump下来服务发现的表以及验证和集群别的节点的关系:

注意: 使用完整的网络ID,网络ID可以方便的通过docker network ls --no-trunc获取到。

服务发现和负载均衡:

$ diagnostiClient -c sd -v -net n8a8ie6tb3wr2e260vxj8ncy4

Overlay网络:

$ diagnostiClient -port 2001 -c overlay -v -net n8a8ie6tb3wr2e260vxj8ncy4
目录
相关文章
|
2月前
|
安全 网络协议 算法
Nmap网络扫描工具详细使用教程
Nmap 是一款强大的网络发现与安全审计工具,具备主机发现、端口扫描、服务识别、操作系统检测及脚本扩展等功能。它支持多种扫描技术,如 SYN 扫描、ARP 扫描和全端口扫描,并可通过内置脚本(NSE)进行漏洞检测与服务深度枚举。Nmap 还提供防火墙规避与流量伪装能力,适用于网络管理、渗透测试和安全研究。
361 1
|
3月前
|
Web App开发 API 虚拟化
Cisco Modeling Labs (CML) 2.9.0 - 网络仿真工具
Cisco Modeling Labs (CML) 2.9.0 - 网络仿真工具
224 15
Cisco Modeling Labs (CML) 2.9.0 - 网络仿真工具
|
6月前
|
Prometheus 监控 Cloud Native
除了Prometheus,还有哪些工具可以监控Docker Swarm集群的资源使用情况?
除了Prometheus,还有哪些工具可以监控Docker Swarm集群的资源使用情况?
474 79
|
4月前
|
监控 安全 网络安全
网络安全工具及其使用方法:保护数字安全的第一道防线
在信息时代,网络攻击变得日益复杂且频繁,保护个人和企业数据安全的重要性日益凸显。幸运的是,各种网络安全工具为用户提供了有效的防护手段。从防火墙到密码管理器,这些工具覆盖了威胁检测、攻击防御和数据保护的方方面面。本文将介绍几款常用的网络安全工具,并提供其使用方法,以帮助您构建强大的网络安全防线。
159 1
|
5月前
|
Docker 容器
Docker网关冲突导致容器启动网络异常解决方案
当执行`docker-compose up`命令时,服务器网络可能因Docker创建新网桥导致IP段冲突而中断。原因是Docker默认的docker0网卡(172.17.0.1/16)与宿主机网络地址段重叠,引发路由异常。解决方法为修改docker0地址段,通过配置`/etc/docker/daemon.json`调整为非冲突段(如192.168.200.1/24),并重启服务。同时,在`docker-compose.yml`中指定网络模式为`bridge`,最后通过检查docker0地址、网络接口列表及测试容器启动验证修复效果。
|
4月前
|
监控 数据可视化 Java
VMware Aria Operations for Networks 6.14 - 网络和应用监控工具
VMware Aria Operations for Networks 6.14 - 网络和应用监控工具
98 0
VMware Aria Operations for Networks 6.14 - 网络和应用监控工具
|
5月前
|
运维 监控 Linux
网络延迟监测工具选择(第一篇)
**WGCLOUD**是一款开源免费的跨平台运维监控工具,支持Windows、Linux、MacOS等系统,具备网络延迟监测功能。其内置的**PING监测**模块可实时ping目标IP,图形化展示延迟趋势,并在目标IP不可达时发送告警通知。支持分组管理,操作简单便捷,适合运维人员高效监控网络状态。
|
7月前
|
存储 监控 算法
基于 Python 哈希表算法的局域网网络监控工具:实现高效数据管理的核心技术
在当下数字化办公的环境中,局域网网络监控工具已成为保障企业网络安全、确保其高效运行的核心手段。此类工具通过对网络数据的收集、分析与管理,赋予企业实时洞察网络活动的能力。而在其运行机制背后,数据结构与算法发挥着关键作用。本文聚焦于 PHP 语言中的哈希表算法,深入探究其在局域网网络监控工具中的应用方式及所具备的优势。
171 7
|
10月前
|
Linux 网络性能优化 网络安全
Linux(openwrt)下iptables+tc工具实现网络流量限速控制(QoS)
通过以上步骤,您可以在Linux(OpenWrt)系统中使用iptables和tc工具实现网络流量限速控制(QoS)。这种方法灵活且功能强大,可以帮助管理员有效管理网络带宽,确保关键业务的网络性能。希望本文能够为您提供有价值的参考。
1497 28
|
10月前
|
网络协议 Unix Linux
深入解析:Linux网络配置工具ifconfig与ip命令的全面对比
虽然 `ifconfig`作为一个经典的网络配置工具,简单易用,但其功能已经不能满足现代网络配置的需求。相比之下,`ip`命令不仅功能全面,而且提供了一致且简洁的语法,适用于各种网络配置场景。因此,在实际使用中,推荐逐步过渡到 `ip`命令,以更好地适应现代网络管理需求。
389 11
下一篇
开通oss服务