Использование CLI
CLI может запускаться как автономный инструмент или как плагин kubectl.
Вы можете скопировать его из pod netobserv-controller-manager на локальную машину.
Используйте CLI для оперативного поиска и устранения неполадок, когда нужно просмотреть пакеты или потоки за ограниченный период времени.
Он поддерживает два режима:
- режим TUI, который отображает захваченный трафик в реальном времени для интерактивного анализа
- фоновый режим, который запускает задачу захвата и позволяет ей выполняться до достижения настроенного условия остановки или до ручной остановки
Оба режима поддерживают экспорт результатов захвата для автономного анализа.
Копирование CLI
Пример:
# Get name of the NetObserv Controller Manager pod
CONTROLLER_POD=$(kubectl get pods -n netobserv-operator -l app=netobserv-operator -o jsonpath="{.items[0].metadata.name}")
# Copy the CLI from the controller manager pod to your local machine
kubectl cp netobserv-operator/$CONTROLLER_POD:/kubectl-netobserv /usr/local/bin/kubectl-netobserv
# Make the CLI executable
chmod +x /usr/local/bin/kubectl-netobserv
# Verify that the CLI is working
kubectl netobserv help
Установка или копирование yq
Для работы CLI на локальной машине требуется yq, чтобы изменять YAML-файлы.
Если yq не установлен локально, вы можете скопировать бинарный файл из pod netobserv-controller-manager.
# Copy yq from the controller manager pod to your local machine
kubectl cp netobserv-operator/$CONTROLLER_POD:/yq /usr/local/bin/yq
# Make yq executable
chmod +x /usr/local/bin/yq
# Verify that yq is working
yq --version
NOTE
CLI использует некоторые образы, входящие в состав NetObserv Operator, но для работы ему не требуется установленный NetObserv Operator.
После подготовки CLI вы можете удалить NetObserv Operator, если он вам больше не нужен. CLI продолжит работать.
Просмотр сообщения справки
Перед запуском задачи захвата ознакомьтесь с доступными командами:
# Get help message for the CLI
kubectl netobserv help
# Get help message for packet capture command
kubectl netobserv packets help
# Get help message for flow capture command
kubectl netobserv flows help
Захват пакетов
Захват пакетов записывает необработанные пакеты, соответствующие указанным фильтрам.
Используйте захват пакетов, когда вам нужны полные сведения о пакетах, а не сводные записи потоков.
NOTE
Если длина пакета превышает 256 байт, пакет будет усечен в результатах захвата.
Захваченные пакеты можно экспортировать в файл pcapng для автономного анализа с помощью таких инструментов, как Wireshark.
Пример в Wireshark:

NOTE
Захваченные пакеты в файле pcapng не отсортированы по временной метке, поэтому для анализа потока пакетов может потребоваться отсортировать их по временной метке в Wireshark.
Комментарии к пакетам содержат такие метаданные, как IP узла, имя интерфейса и сведения о ресурсах Kubernetes.
Пример комментариев к пакетам:
Source
Source
Src IP: 192.0.2.10
Src Node IP: 192.0.2.10
Src Node Name: node-a
Src Name: node-a
Src Network Name: primary
Src Owner: node-a
Src Owner Kind: Node
Src Kind: Node
Src MAC: 02:00:00:00:00:10
Src Port: 36408
Destination
Destination
Dst IP: 198.51.100.77
Dst Node IP: 192.0.2.20
Dst Node Name: node-b
Dst Name: kube-ovn-pinger-js87q
Dst Namespace: kube-system
Dst Network Name: ovn-default
Dst Owner: kube-ovn-pinger
Dst Owner Kind: DaemonSet
Dst Kind: Pod
Dst MAC: 02:00:00:00:00:20
Dst Port: 8080(http-alt)
Common
Common
Bytes: 145B
TCP Flags: PSH
Node Dir: Egress
L4 Protocol: TCP
Length: 145
AgentIP: 192.0.2.10
InterfaceIndex: 7
InterfaceName: ovn0
InterfaceDirection: Egress
Вы можете фильтровать пакеты в Wireshark на основе этих комментариев.
Пример фильтра по IP узла и имени интерфейса:
frame.comment == "AgentIP: 192.0.2.10" && frame.comment == "InterfaceName: ovn0"
В overlay-сети Kube-OVN пакеты между pod на разных узлах инкапсулируются с помощью Geneve или VxLAN.
Исходный пакет передается как полезная нагрузка пакета Geneve или VxLAN.
Чтобы захватить инкапсулированный трафик, используйте --enable_geneve или --enable_vxlan при запуске команды захвата пакетов.
Пример команды для захвата TCP-пакетов на порту 8080, включая пакеты, инкапсулированные в Geneve:
kubectl netobserv packets --enable_geneve --protocol=TCP --port=8080
Запуск захвата пакетов в режиме TUI
Пример команды для режима TUI:
kubectl netobserv packets --cidr=198.51.100.77/32 --peer_ip=192.0.2.10 --protocol=TCP --port=8080
Эта команда захватывает пакеты, соответствующие указанным фильтрам, и отображает их в режиме TUI.
Пример интерфейса TUI:

Нажмите CTRL+C, чтобы выйти из режима TUI и остановить захват пакетов.
По умолчанию CLI предложит сохранить захваченные пакеты в файл pcapng после выхода из режима TUI.
Чтобы автоматически сохранить файл pcapng без подтверждения, можно использовать флаг --copy.
Запуск захвата пакетов в фоновом режиме
Пример команды для фонового режима:
kubectl netobserv packets --background --cidr=198.51.100.77/32 --peer_ip=192.0.2.10 --protocol=TCP --port=8080
Эта команда запускает фоновую задачу захвата пакетов, которая собирает пакеты, соответствующие указанным фильтрам.
Чтобы скопировать захваченные пакеты в файл pcapng в фоновом режиме, выполните:
Когда задача захвата остановлена или завершена, можно использовать команду cleanup, чтобы удалить фоновую задачу захвата и освободить ресурсы.
kubectl netobserv cleanup
Захват потоков
Захват потоков записывает не необработанные пакеты, а сводные данные о сетевых потоках.
Используйте его, когда вам нужны метаданные трафика и статистика потоков, а не полный полезный payload пакетов.
Принцип использования захвата потоков похож на захват пакетов, но результаты экспортируются в форматах JSON и SQLite вместо pcapng.
Пример команды:
kubectl netobserv flows --cidr=198.51.100.77/32 --peer_ip=192.0.2.10 --protocol=TCP --port=8080
Пример интерфейса TUI:

Пример экспортированной записи потока в форматированном JSON:
[
{
"AgentIP": "192.0.2.10",
"Bytes": 611,
"Dscp": 0,
"DstAddr": "2001:db8:1::77",
"DstK8S_HostIP": "192.0.2.20",
"DstK8S_HostName": "node-b",
"DstK8S_Name": "kube-ovn-pinger-2w2qp",
"DstK8S_Namespace": "kube-system",
"DstK8S_NetworkName": "ovn-default",
"DstK8S_OwnerName": "kube-ovn-pinger",
"DstK8S_OwnerType": "DaemonSet",
"DstK8S_Type": "Pod",
"DstMac": "02:00:00:00:00:20",
"DstPort": 8080,
"Etype": 34525,
"Flags": 530,
"FlowDirection": 2,
"IfDirections": [
1,
1
],
"Interfaces": [
"ovn0",
"211daf442f8b_h"
],
"Packets": 6,
"Proto": 6,
"Sampling": 1,
"SrcAddr": "2001:db8:1::10",
"SrcK8S_HostIP": "192.0.2.10",
"SrcK8S_HostName": "node-a",
"SrcK8S_Name": "kube-ovn-cni-zgjhs",
"SrcK8S_Namespace": "kube-system",
"SrcK8S_NetworkName": "primary",
"SrcK8S_OwnerName": "kube-ovn-cni",
"SrcK8S_OwnerType": "DaemonSet",
"SrcK8S_Type": "Pod",
"SrcMac": "02:00:00:00:00:10",
"SrcPort": 59848,
"TimeFlowEndMs": 1775701945802,
"TimeFlowStartMs": 1775701945799,
"TimeReceived": 1775701946
},
{
"AgentIP": "192.0.2.10",
"Bytes": 509,
"Dscp": 0,
"DstAddr": "2001:db8:1::10",
"DstK8S_HostIP": "192.0.2.10",
"DstK8S_HostName": "node-a",
"DstK8S_Name": "kube-ovn-cni-zgjhs",
"DstK8S_Namespace": "kube-system",
"DstK8S_NetworkName": "primary",
"DstK8S_OwnerName": "kube-ovn-cni",
"DstK8S_OwnerType": "DaemonSet",
"DstK8S_Type": "Pod",
"DstMac": "02:00:00:00:00:30",
"DstPort": 59848,
"Etype": 34525,
"Flags": 784,
"FlowDirection": 2,
"IfDirections": [
0,
0
],
"Interfaces": [
"211daf442f8b_h",
"ovn0"
],
"Packets": 4,
"Proto": 6,
"Sampling": 1,
"SrcAddr": "2001:db8:1::77",
"SrcK8S_HostIP": "192.0.2.20",
"SrcK8S_HostName": "node-b",
"SrcK8S_Name": "kube-ovn-pinger-2w2qp",
"SrcK8S_Namespace": "kube-system",
"SrcK8S_NetworkName": "ovn-default",
"SrcK8S_OwnerName": "kube-ovn-pinger",
"SrcK8S_OwnerType": "DaemonSet",
"SrcK8S_Type": "Pod",
"SrcMac": "02:00:00:00:00:40",
"SrcPort": 8080,
"TimeFlowEndMs": 1775701945802,
"TimeFlowStartMs": 1775701945800,
"TimeReceived": 1775701946
}
]
Пример экспортированных записей потоков в SQLite:
$ sqlite3 2026-04-09T022936Z.db \
"SELECT SrcAddr, SrcPort, DstAddr, DstPort, Proto, Packets, Bytes FROM flow;"
╭───────────────────────┬─────────┬───────────────────────┬─────────┬───────┬─────────┬───────╮
│ SrcAddr │ SrcPort │ DstAddr │ DstPort │ Proto │ Packets │ Bytes │
╞═══════════════════════╪═════════╪═══════════════════════╪═════════╪═══════╪═════════╪═══════╡
│ 2001:db8:1::10 │ 59848 │ 2001:db8:1::77 │ 8080 │ 6 │ 6 │ 611 │
│ 2001:db8:1::77 │ 8080 │ 2001:db8:1::10 │ 59848 │ 6 │ 4 │ 509 │
╰───────────────────────┴─────────┴───────────────────────┴─────────┴───────┴─────────┴───────╯
Дополнительные ресурсы