5.5. 网络追踪方法
收集网络追踪(以数据包捕获记录的形式)可以帮助红帽支持对网络问题进行故障排除。
OpenShift Dedicated 支持以两种方式执行网络追踪。查看下表并选择符合您的需要的方法。
方法 | 优点和功能 |
---|---|
收集主机网络追踪 | 您可以在一个或多个节点上同时指定的时间执行数据包捕获。在满足指定持续时间时,数据包捕获文件将从节点传输到客户端机器。 您可以排除特定操作触发网络通信问题的原因。运行数据包捕获,执行触发此问题的操作,并使用日志诊断问题。 |
从 OpenShift Dedicated 节点或容器收集网络追踪 |
您可以在一个节点或一个容器中执行数据包捕获。您可以以交互方式运行 您可以手动启动数据包捕获,触发网络通信问题,然后手动停止数据包捕获。
此方法使用 |
5.5.1. 收集主机网络追踪
有时,追踪网络通信并同时捕获多个节点上的数据包简化了与网络相关的问题的故障排除。
您可以使用 oc adm must-gather
命令和 registry.redhat.io/openshift4/network-tools-rhel8
容器镜像的组合来收集来自节点的数据包。分析数据包捕获可帮助您对网络通信问题进行故障排除。
oc adm must-gather
命令用于在特定节点上的 pod 中运行 tcpdump
命令。tcpdump
命令记录 pod 中捕获的数据包。当 tcpdump
命令退出时,oc adm must-gather
命令会用从 pod 捕获的数据包传输到您的客户端机器。
以下流程中的示例命令演示了使用 tcpdump
命令执行数据包捕获。但是,您可以在 --image
参数中指定的容器镜像中运行任何命令,以便同时从多个节点收集故障排除信息。
先决条件
以具有
cluster-admin
角色的用户身份登录到 OpenShift Dedicated。注意在 OpenShift Dedicated 部署中,不使用客户云订阅(CCS)模型的用户无法使用
oc adm must-gather
命令,因为它需要cluster-admin
权限。-
已安装 OpenShift CLI(
oc
)。
流程
运行以下命令,在某些节点上运行来自主机网络的数据包捕获:
$ oc adm must-gather \ --dest-dir /tmp/captures \ <.> --source-dir '/tmp/tcpdump/' \ <.> --image registry.redhat.io/openshift4/network-tools-rhel8:latest \ <.> --node-selector 'node-role.kubernetes.io/worker' \ <.> --host-network=true \ <.> --timeout 30s \ <.> -- \ tcpdump -i any \ <.> -w /tmp/tcpdump/%Y-%m-%dT%H:%M:%S.pcap -W 1 -G 300
<.>
--dest-dir
参数指定oc adm must-gather
将数据包捕获到相对于客户端机器上/tmp/captures
的目录中。您可以指定任何可写目录。<.> 当tcpdump
在oc adm must-gather
启动时的 debug pod 中运行时,--source-dir
参数指定数据包捕获的临时存储在 pod 上的/tmp/tcpdump
目录中。<.> The--image
参数指定包含tcpdump
命令的容器镜像。<.>--node-selector
参数和示例值指定在 pod 上的 /tmp/tcpdump 目录中执行数据包捕获。作为替代方案,您可以指定--node-name
参数而不是在单个节点上运行数据包捕获。如果省略--node-selector
和--node-name
参数,则数据包捕获将在所有节点上执行。<.>--host-network=true
参数是必需的,以便在节点的网络接口上执行数据包捕获。<.>--timeout
参数和值指定运行 debug pod 达到 30 秒。如果没有指定--timeout
参数和持续时间,则 debug pod 会运行 10 分钟。<.>-i any
参数用于tcpdump
命令,指定捕获所有网络接口上的数据包。作为替代方案,您可以指定网络接口名称。- 执行访问 Web 应用等操作,在网络追踪捕获数据包时触发网络通信问题。
查看
oc adm must-gather
从 pod 传送到客户端机器的数据包捕获文件:tmp/captures ├── event-filter.html ├── ip-10-0-192-217-ec2-internal 1 │ └── registry-redhat-io-openshift4-network-tools-rhel8-sha256-bca... │ └── 2022-01-13T19:31:31.pcap ├── ip-10-0-201-178-ec2-internal 2 │ └── registry-redhat-io-openshift4-network-tools-rhel8-sha256-bca... │ └── 2022-01-13T19:31:30.pcap ├── ip-... └── timestamp
5.5.2. 从 OpenShift Dedicated 节点或容器收集网络追踪
在调查与网络相关的 OpenShift Dedicated 问题时,红帽可能会从特定的 OpenShift Dedicated 集群节点或特定容器请求网络数据包追踪。在 OpenShift Dedicated 中捕获网络 trace 的建议方法是通过 debug pod。
先决条件
您可以使用具有
cluster-admin
角色的用户访问集群。注意在 OpenShift Dedicated 部署中,没有使用客户云订阅(CCS)模型的客户无法使用
oc debug
命令,因为它需要cluster-admin
权限。-
已安装 OpenShift CLI(
oc
)。 - 您已有一个红帽支持问题单 ID。
流程
获取集群节点列表:
$ oc get nodes
在目标节点上进入一个 debug 会话。此步骤被实例化为一个名为
<node_name>-debug
的 debug pod:$ oc debug node/my-cluster-node
将
/host
设为 debug shell 中的根目录。debug pod 在 pod 中的/host
中挂载主机的 root 文件系统。将根目录改为/host
,您可以运行主机可执行路径中包含的二进制文件:# chroot /host
在
chroot
环境控制台中获取节点接口名称:# ip ad
启动
toolbox
容器,其中包括运行sosreport
所需的二进制文件和插件:# toolbox
注意如果一个已存在的
toolbox
pod 已在运行,则toolbox
命令会输出'toolbox-' already exists.Trying to start…
.要避免tcpdump
出现问题,请使用podman rm toolbox-
删除正在运行的 toolbox 容器,并生成新 toolbox 容器。在集群节点中启动
tcpdump
会话,并将输出重定向到捕获文件中。这个示例使用ens5
作为接口名称:$ tcpdump -nn -s 0 -i ens5 -w /host/var/tmp/my-cluster-node_$(date +%d_%m_%Y-%H_%M_%S-%Z).pcap 1
- 1
tcpdump
捕获文件路径在chroot
环境之外,因为 toolbox 容器会在/host
中挂载主机的根目录。
如果节点上的特定容器需要
tcpdump
捕获,请按照以下步骤操作。确定目标容器 ID。
chroot host
命令先于这一步中的crictl
命令,因为 toolbox 容器在/host
中挂载主机的根目录:# chroot /host crictl ps
确定容器的进程 ID。在本例中,容器 ID 是
a7fe32346b120
:# chroot /host crictl inspect --output yaml a7fe32346b120 | grep 'pid' | awk '{print $2}'
在容器上启动
tcpdump
会话,并将输出重定向到捕获文件中。本例使用49628
作为容器的进程 ID,ens5
是接口名称。nsenter
命令进入目标进程的命名空间并在命名空间中运行命令。因为本例中的目标进程是一个容器的进程 ID,tcpdump
命令从主机在容器的命名空间中运行:# nsenter -n -t 49628 -- tcpdump -nn -i ens5 -w /host/var/tmp/my-cluster-node-my-container_$(date +%d_%m_%Y-%H_%M_%S-%Z).pcap 1
- 1
tcpdump
捕获文件路径在chroot
环境之外,因为 toolbox 容器会在/host
中挂载主机的根目录。
使用以下方法之一向红帽支持提供
tcpdump
捕获文件进行分析。将文件直接从 OpenShift Dedicated 集群上传到现有红帽支持问题单中。
在 toolbox 容器内,运行
redhat-support-tool
将该文件直接附加到现有红帽支持问题单中。这个示例使用问题单 ID01234567
:# redhat-support-tool addattachment -c 01234567 /host/var/tmp/my-tcpdump-capture-file.pcap 1
- 1
- toolbox 容器将主机的根目录挂载到
/host
。当指定要通过redhat-support-tool
命令上传的文件时,使用 toolbox 容器的根目录(包括/host/
)的绝对路径。
将文件上传到现有红帽支持问题单中。
运行
oc debug node/<node_name>
命令调整sosreport
归档,并将输出重定向到文件中。此命令假设您已退出以前的oc debug
会话:$ oc debug node/my-cluster-node -- bash -c 'cat /host/var/tmp/my-tcpdump-capture-file.pcap' > /tmp/my-tcpdump-capture-file.pcap 1
- 1
- debug 容器将主机的根目录挂载到
/host
。在指定用于连接的目标文件时,引用 debug 容器的根目录的绝对路径,包括/host
。
- 在红帽客户门户网站的 Customer Support 页面中进入现有的支持问题单。
- 选择 Attach files 并按提示上传该文件。
5.5.3. 为红帽支持提供诊断数据
在调查 OpenShift Dedicated 问题时,红帽支持可能会要求您将诊断数据上传到支持问题单中。文件可以通过红帽客户门户网站或使用 redhat-support-tool
命令直接从 OpenShift Dedicated 集群上传到支持问题单中。
先决条件
您可以使用具有
cluster-admin
角色的用户访问集群。注意在 OpenShift Dedicated 部署中,没有使用客户云订阅(CCS)模型的客户无法使用
oc debug
命令,因为它需要cluster-admin
权限。-
已安装 OpenShift CLI(
oc
)。 - 您已有一个红帽支持问题单 ID。
流程
通过红帽客户门户网站将诊断数据上传到现有红帽支持问题单中。
使用
oc debug node/<node_name> 命令连接
OpenShift Dedicated 节点中包含的诊断文件,并将输出重定向到文件中。以下示例将 debug 容器中的/host/var/tmp/my-diagnostic-data.tar.gz
复制到/var/tmp/my-diagnostic-data.tar.gz
:$ oc debug node/my-cluster-node -- bash -c 'cat /host/var/tmp/my-diagnostic-data.tar.gz' > /var/tmp/my-diagnostic-data.tar.gz 1
- 1
- debug 容器将主机的根目录挂载到
/host
。在指定用于连接的目标文件时,引用 debug 容器的根目录的绝对路径,包括/host
。
- 在红帽客户门户网站的 Customer Support 页面中进入现有的支持问题单。
- 选择 Attach files 并按提示上传该文件。
将诊断数据直接从 OpenShift Dedicated 集群上传到现有红帽支持问题单中。
获取集群节点列表:
$ oc get nodes
在目标节点上进入一个 debug 会话。此步骤被实例化为一个名为
<node_name>-debug
的 debug pod:$ oc debug node/my-cluster-node
将
/host
设为 debug shell 中的根目录。debug pod 在 pod 中的/host
中挂载主机的 root 文件系统。将根目录改为/host
,您可以运行主机可执行路径中包含的二进制文件:# chroot /host
启动
toolbox
容器,其中包含运行redhat-support-tool
所需的二进制文件:# toolbox
注意如果一个已存在的
toolbox
pod 已在运行,则toolbox
命令会输出'toolbox-' already exists.Trying to start…
.使用podman rm toolbox-
删除正在运行的 toolbox 容器,并生成新的 toolbox 容器以避免出现问题。运行
redhat-support-tool
将 debug pod 的文件直接附加到现有的红帽支持问题单中。这个示例使用支持问题单 ID '01234567' 和示例文件路径/host/var/tmp/my-diagnostic-data.tar.gz
:# redhat-support-tool addattachment -c 01234567 /host/var/tmp/my-diagnostic-data.tar.gz 1
- 1
- toolbox 容器将主机的根目录挂载到
/host
。当指定要通过redhat-support-tool
命令上传的文件时,使用 toolbox 容器的根目录(包括/host/
)的绝对路径。
5.5.4. 关于 toolbox
toolbox
是一个在 Red Hat Enterprise Linux CoreOS(RHCOS)系统上启动容器的工具。该工具主要用于启动包含运行 sosreport
和 redhat-support-tool
等命令所需的二进制文件和插件的容器。
toolbox
容器的主要目的是收集诊断信息并将其提供给红帽支持。但是,如果需要额外的诊断工具,您可以添加 RPM 软件包或运行标准支持工具镜像的替代镜像。
将软件包安装到 toolbox
容器
默认情况下,运行 toolbox
命令会启动带有 registry.redhat.io/rhel8/support-tools:latest
镜像的容器。该镜像包含最常用的支持工具。如果需要一个不是镜像的一部分的支持工具来收集特定于具体节点的数据,可以安装额外的软件包。
先决条件
-
已使用
oc debug node/<node_name>
命令访问节点。
流程
将
/host
设为 debug shell 中的根目录。debug pod 在 pod 中的/host
中挂载主机的 root 文件系统。将根目录改为/host
,您可以运行主机可执行路径中包含的二进制文件:# chroot /host
启动 toolbox 容器:
# toolbox
安装额外的软件包,如
wget
:# dnf install -y <package_name>
使用 toolbox
启动备用镜像
默认情况下,运行 toolbox
命令会启动带有 registry.redhat.io/rhel8/support-tools:latest
镜像的容器。您可以通过创建 .toolboxrc
文件并指定要运行的镜像来启动其他镜像。
先决条件
-
已使用
oc debug node/<node_name>
命令访问节点。
流程
将
/host
设为 debug shell 中的根目录。debug pod 在 pod 中的/host
中挂载主机的 root 文件系统。将根目录改为/host
,您可以运行主机可执行路径中包含的二进制文件:# chroot /host
在 root 用户的主目录中,创建一个
.toolboxrc
文件:# vi ~/.toolboxrc
REGISTRY=quay.io 1 IMAGE=fedora/fedora:33-x86_64 2 TOOLBOX_NAME=toolbox-fedora-33 3
使用备用镜像启动 toolbox 容器:
# toolbox
注意如果一个已存在的
toolbox
pod 已在运行,则toolbox
命令会输出'toolbox-' already exists.Trying to start…
.使用podman rm toolbox-
删除正在运行的 toolbox容器,并生成新的 toolbox 容器以避免sosreport
插件出现问题。