k8spacket: 网络太复杂,可视化数据流量简直不要太爽

five-disruptive-technologies-2023

行万里路,此处相逢,共话云原生之道。

偶逗趣事,明月清风,与君同坐。

琦彦,在云原生百宝箱公众号等你,与你一起探讨应用迁移,GitOps,二次开发,解决方案,CNCF生态,以及生活况味。

k8spacket能够帮助我们了解Kubernetes集群中的TCP数据包流量情况展示集群内工作负载之间的流量、指示流量如何在集群外路由、显示连接关闭的信息、统计工作负载发送/接收的字节数、计算连接建立的时间、展示整个集群中工作负载之间的连接网络

k8spacket

k8spacket是什么

k8spacket是一个工具,可让你可视化 K8s 集群中的 TCP 流量,并让你更好地了解不同工作负载如何相互通信。使用k8spacktGrafana,你可以轻松检查打开的连接数、交换的字节数以及这些连接的活动时间

一个简单的示例如下所示:

k8spacket 示例转存失败,建议直接上传图片文件

k8spacket是用 Golang 编写的,它使用第三方库 ( gopacket) 来嗅探工作负载上的 TCP 数据包(传入和传出),并在运行的容器网络接口上创建 TCP 侦听器。

当一个新的容器被创建时,CNI插件负责提供与其他容器或从集群到外界通信的可能性。最常见的方法是使用 Linux 命名空间来隔离网络,并veth pairs连接隔离的命名空间和网桥。也可以创建其他类型,例如vlanipvlanmacvlan。无论何种类型,都会创建容器linux命名空间的网络接口,这是嗅探器k8spacket的主要句柄。

k8spacket 运行的时候会使用 hostNetwork: true 选项,它通过收集 TCP 流、处理数据并通过 API 暴露结果以供 Grafana 使用。此外,

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

k8spacket 主要版本特性

  • 1.1.0版本新增了tls-parser插件,可以获取服务器证书链信息(适用于TLS版本低于1.3的情况)。仪表盘关于TLS连接的显示也进行了更改,现在展示了服务器证书链的详细信息(需要依赖marcusolsson-json-datasource和marcusolsson-dynamictext-panel Grafana插件)。
  • 1.0.0版本改变了k8spacket的架构,引入了go插件(可以查看这里可用的插件:github.com/k8spacket/p…),新增了有关集群内外TLS握手过程指标的插件,以及有关TLS连接的仪表盘,其中包含了TLS客户端的IP和名称、TLS服务器的域名、IP和端口、客户端支持的TLS版本和密码套件,以及服务器选择的TLS版本和密码套件。

k8spacket 特点

k8spacket有助于了解 k8s 集群中的 TCP 数据包流量,并具有以下功能:

  • 显示集群中工作负载之间的流量
  • 展示流量在集群外部路由到哪里
  • 显示有关通过连接关闭套接字的信息
  • 显示工作负载发送/接收的字节数
  • 计算建立连接的时间
  • 显示整个集群中工作负载之间的网络连接

k8spacket使用 Node Graph API Grafana 数据源插件。具体可参考Node Graph API 插件

k8spacket安装

k8spacket使用Node Graph API Grafana数据源插件,可以通过Helm图表安装,同时需添加Node Graph API和JSON API插件和数据源到Grafana实例中。

k8spacket可以使用Helm安装,Chart位于: https: //github.com/k8spacket/k8spacket-helm-chart

安装后Helm,你可以按如下方式添加存储库:

$ helm repo add k8spacket https://k8spacket.github.io/k8spacket-helm-chart

安装k8spacket

$ helm install k8spacket --namespace k8spacket k8spacket/k8spacket \
 --create-namespace

如果你有想要使用自定义选项或值:

$ helm install k8spacket --namespace k8spacket -f my-k8spacket-values.yaml \
k8spacket/k8spacket

将插件Node Graph APIJSON API数据源添加到您的 Grafana 实例。您可以手动执行此操作或更改 Grafana 图表的 helm 值,例如:

grafana:
  env:
    GF_INSTALL_PLUGINS: hamedkarbasi93-nodegraphapi-datasource,marcusolsson-json-datasource
  datasources:
    nodegraphapi-plugin-datasource.yaml:
      apiVersion: 1
      datasources:
        - name: "Node Graph API"
          jsonData:
            url: "http://k8spacket.k8spacket.svc.cluster.local:8080/nodegraph"
          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
    marcusolsson-json-datasource.yaml:
      apiVersion: 1
      datasources:
        - name: "JSON API"
          url: "http://k8spacket.k8spacket.svc.cluster.local:8080/tlsparser/api/data"
          access: "proxy"
          basicAuth: false
          isDefault: false
          readOnly: false
          type: "marcusolsson-json-datasource"
          typeLogoUrl: "public/plugins/marcusolsson-json-datasource/img/logo.svg"
          typeName: "json-api-plugin"
          orgId: 1
          version: 1

填写额外的抓取配置以观察 Prometheus 指标:

    - job_name: "k8spacket-metrics"
      metrics_path: /metrics
      scrape_interval: 25s
      static_configs:
      - targets: [k8spacket.k8spacket.svc.cluster.local:8080]

将仪表板配置映射添加到 Grafana 堆栈

 $ kubectl -n $GRAFANA_NS apply --recursive -f ./dashboards

然后你可以将仪表板配置添加到 Grafana 堆栈中:

$ kubectl -n $GRAFANA_NS apply --recursive -f ./dashboards

使用演示

行万里路,此处相逢,共话云原生之道。

偶逗趣事,明月清风,与君同坐。

琦彦,在云原生百宝箱公众号等你,与你一起探讨应用迁移,GitOps,二次开发,解决方案,CNCF生态,以及生活况味。

使用时可以在Grafana的Dashboards中查找k8spacket – node graph,并使用相应的过滤器(如连接模式、命名空间、工作流名称等)来观察数据。

选择名为k8spacket - node graph 的Grafana 仪表板,你进行如下操作:

选择graph mode (connection, bytes, duration)

可以将其设置Graph mode为以下三种不同类型:

  • connection – 帮助了解在工作负载之间,以及从或到外部客户端建立了多少连接。它会告诉您哪些套接字保持打开状态并可能导致问题。
  • bytes – 显示工作负载发送或接收的字节数。
  • duration – 计算连接的生命周期。

下面显示了三种不同的模式:

graph mode转存失败,建议直接上传图片文件

按namespace过滤

按命名空间 – 支持正则表达式,可以选择一个或多个 K8s 命名空间

按namespace过滤转存失败,建议直接上传图片文件

按包含或排除工作流程名称进行过滤

  • 按包含的名称 – 选择工作负载名称以进行可视化
  • 按名称排除 – 从可视化中排除工作负载名称

按包含或排除工作流程名称进行过滤转存失败,建议直接上传图片文件

参考

k8spackethttps ://github.com/k8spacket/k8spacket

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYFcZzJm' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片