#kubernetes #docker #cloud-native #cni #json-format

应用 cniguru

docker 和 kubernetes 网络故障排除工具

2 个不稳定版本

使用旧的 Rust 2015

0.2.0 2018年7月3日
0.1.0 2018年5月29日

#34 in #cloud-native

Apache-2.0/MIT

32KB
601 代码行

概述

cniguru 是一个可以用于故障排除容器网络的工具。它提供了关于 docker 和 kubernetes 容器使用的节点接口的信息

  • 容器使用的接口名称、IP、MAC 地址和 MTU
  • 关于 veth 对的信息(容器接口的主机/节点端)
  • 接口连接到的主机/节点桥接器

许可证

根据您的要求,许可权受以下之一保护:

示例

  • 以可读格式列出 Kubernetes pod 的接口
[root@kh1 ~]# KUBECONFIG=/etc/kubernetes/admin.conf kubectl get pod
NAME                              READY     STATUS    RESTARTS   AGE
netshoot-57c7994b66-zxdsl         1/1       Running   0          2m
serve-hostname-86bc9d96dc-n7n6h   1/1       Running   0          7d
[root@kh1 ~]# 
[root@kh1 ~]# cniguru pod netshoot-57c7994b66-zxdsl 

CONTAINER_ID  PID    NODE  INTF(C)  MAC_ADDRESS(C)     IP_ADDRESS(C)    INTF(N)       BRIDGE(N)
3e08cafbb6eb  26393  kh1   eth0     0a:58:0a:f4:00:de  10.244.0.222/24  veth0c97cb60  cni0
3e08cafbb6eb  26393  kh1   net0     0a:58:0a:08:08:06  10.8.8.6/24      veth74689fd2  br_dc_test

  • 以 JSON 格式显示输出
[root@kh1 ~]# cniguru pod netshoot-57c7994b66-zxdsl -o json
[
  {
    "container": {
      "id": "3e08cafbb6eb01558e86ba53f170b62855f0bf5a328a77dc2da278061ff7fdc8",
      "pid": 26393,
      "node_name": "kh1",
      "runtime": "Docker"
    },
    "interfaces": [
      {
        "container": {
          "name": "eth0",
          "ifindex": 3,
          "peer_ifindex": 558,
          "mtu": 1460,
          "mac_address": "0a:58:0a:f4:00:de",
          "bridge": null,
          "ip_address": "10.244.0.222/24"
        },
        "node": {
          "name": "veth0c97cb60",
          "ifindex": 558,
          "peer_ifindex": 3,
          "mtu": 1460,
          "mac_address": "0a:20:94:a0:35:64",
          "bridge": "cni0",
          "ip_address": null
        }
      },
      {
        "container": {
          "name": "net0",
          "ifindex": 5,
          "peer_ifindex": 559,
          "mtu": 1500,
          "mac_address": "0a:58:0a:08:08:06",
          "bridge": null,
          "ip_address": "10.8.8.6/24"
        },
        "node": {
          "name": "veth74689fd2",
          "ifindex": 559,
          "peer_ifindex": 5,
          "mtu": 1500,
          "mac_address": "d2:ae:0b:9f:62:72",
          "bridge": "br_dc_test",
          "ip_address": null
        }
      }
    ]
  }
]

安装

Cargo

如果您已设置 Rust 工具链,则可以通过 cargo 安装 cniguru

cargo install cniguru

从源代码构建

  • 请确保您已安装较新的 Rust 编译器。运行
rustup override set stable
rustup update stable
  • 克隆源代码
git clone https://github.com/maximih/cniguru
cd cniguru
  • 构建 cniguru
cargo build --release

下载 x86_64 二进制文件

提供了静态链接的 Linux x86_64 二进制文件,您可以从这里下载:此处

配置

可以通过 $KUBECONFIG 环境变量设置 Kubernetes 配置的路径。如果未设置 $KUBECONFIG,则 cniguru 将尝试使用 $HOME/.kube/config/etc/kubernetes/admin.conf

使用 docker 命令行工具获取与 Docker 相关的信息,因此必须以具有执行 docker 命令权限的用户身份运行 cniguru

未来计划

可能在未来添加的一些功能

  • 作为 Kubernetes daemonset(服务器端)运行 cniguru 并通过 REST API(客户端)访问它
  • 添加在多个接口和多个节点上跟踪数据包的可能性
  • 添加启用数据包记录的可能性

依赖项

~24–36MB
~643K SLoC