zl程序教程

您现在的位置是:首页 >  Java

当前栏目

使用 k8spacket 与 Grafana 可视化 K8s Tcp流量

2023-02-18 16:48:41 时间

你知道你的 K8s 集群在你没使用的时候在做什么吗?谁与他建立 TCP 了通信?他调用了谁?通过使用 k8spacketGrafana,我们可以可视化集群中的 TCP 流量,这样可以了解工作负载是如何相互通信。检查建立了多少连接,交换了多少字节,以及这些连接处于活动状态的时间。

介绍

k8spacket 是用 Golang 编写的一个工具,它使用 gopacket 第三方库来嗅探工作负载上的 TCP 数据包(传入和传出),它在运行的容器网络接口上创建 TCP 监听器。当 Kubernetes 创建一个新容器的时候,CNI 插件负责提供与其他容器或从集群到外部世界通信的可能性。最常见的方法是使用 linux 命名空间来隔离网络,使用 veth pair 来连接隔离的命名空间和网桥。除了桥接类型外,CNI 插件还可以使用其他类型(vlan、ipvlan、macvlan),但都是为容器 linux 命名空间创建一个网络接口,这是 k8spacket 嗅探器的主要句柄。

k8spacket 运行的时候会使用 hostNetwork: true 选项,这样可以消除前面提到的隔离现象,它通过收集 TCP 流、处理数据并通过 API 暴露结果以供 Grafana 使用。此外,

  • k8spacket 是一个 Kubernetes API 客户端,可以将嗅探到的工作负载解析为可视化的集群资源名称(Pods 和 Services)。
  • 它作为 DaemonSet 启动以侦听所有节点上的网络接口。
  • 如果有新的(或旧的)网络接口要观察(或忘记),已实现的监听器每 10 秒(默认)检查一次。

除了显示集群资源的图表外,它还暴露了 Prometheus 指标。

安装

要安装 k8spacket,我们需要安装 Helm 和 Grafana。此外,该工具需要 Hamad 的 Node Grafana API 插件(Node Graph API)。

helm repo add k8spacket https://k8spacket.github.io/k8spacket-helm-chart
helm install k8spacket --namespace k8spacket k8spacket/k8spacket --create-namespace

将 Node Graph API 插件和数据源添加到您的 Grafana 实例,您可以手动完成或更改 Grafana Chart 的 helm 值,例如:

grafana:
  env:
    GF_INSTALL_PLUGINS: hamedkarbasi93-nodegraphapi-datasource
  datasources:
    nodegraphapi-plugin-datasource.yaml:
      apiVersion: 1
      datasources:
      - name: "Node Graph API"
        jsonData:
          url: "http://k8spacket.k8spacket.svc.cluster.local:8080"
        access: "proxy"
        basicAuth: false
        isDefault: false
        readOnly: false
        type: "hamedkarbasi93-nodegraphapi-datasource"
        typeLogoUrl: "public/plugins/hamedkarbasi93-nodegraphapi-datasource/img/logo.svg"
        typeName: "node-graph-plugin"
        orgId: 1
        version: 1

使用方法

统计类型

  • connection - 帮助了解在工作负载之间以及从或到外部客户端建立了多少连接。它会告诉您哪些套接字保持打开状态并可能导致问题。当您使用端口耗尽的某些 SNAT 网关(例如,Azure AKS)时,它会很有帮助。
  • bytes - 显示工作负载发送或接收的字节数。
  • duration - 计算连接的生命周期。

过滤器

  • 按命名空间 - 选择一个或多个 K8s 命名空间
  • 按包含的名称 - 选择工作负载名称以进行可视化
  • 按名称排除 - 从可视化中排除工作负载名称

Github 仓库:https://github.com/k8spacket/k8spacket