Kubernetes API 流量分析器 Kubeshark 中文入门指南

公众号关注 「奇妙的 Linux 世界」

设为「星标」,每天带你玩转 Linux !

8ec76536223667e6f308df21cf69b5d0.png

Kubernetes 网络概述

在 Kubernetes 集群中,每个容器都在一个 Pod 中运行,并且 Pod 由 Kubernetes 控制平面调度到节点(物理机或虚拟机)上。Kubernetes 网络为 Pod 之间、服务之间以及外部资源之间的通信提供了一种方式。

Kubernetes 使用扁平网络模型,所有 Pod 都可以直接相互通信,无论它们运行在哪个节点上。为了实现这一点,Kubernetes 设置了一个跨越集群中所有节点的虚拟网络,并为每个 Pod 分配了该网络中唯一的 IP 地址。

你是否想知道 Kubernetes 中的 API 流量去了哪里?

仔细想想,你在 Kubernetes 集群上执行的任何操作都是 API 调用。无论你是创建新的 Pod 还是列出 Ingress Controller,这都是 API 调用。

bf9136d8f157bbab4a3590a4bd8ddbb0.png
Kubeshark

在这篇博文中,你将了解如何利用 Kubeshark(适用于 Kubernetes 的 API 流量查看器)提供对 Kubernetes 内部网络的实时协议级可见性---捕获、剖析和监控所有(跨容器、pod、节点和集群)进出的流量和有效负载。

什么是 Wireshark?

在深入了解 Kubeshark 之前,有必要简单介绍一下 Wireshark。为什么?因为当你看到谈论 Kubeshark 时,你会看到它与 Wireshark 的比较。

Wireshark是一款免费的开源数据包分析器。它用于网络故障排除、分析。Wireshark是跨平台的,并使用Qt工具来实现其用户界面,使用pcap来捕获数据包;它可以在 Linux、macOS、BSD、Solaris、其他一些类 Unix 操作系统和 Microsoft Windows 上运行。还有一个基于终端(非 GUI)的版本,称为 TShark。Wireshark 与 tcpdump 非常相似,但具有图形化以及集成的排序和过滤选项。

TCPDump/Wireshark 使我们能够在微观层面上可视化和理解网络中发生的情况。想象一下,如果这样的事情在 Kubernetes 中是可能的,你就可以看到工作负载、Pod或服务帐户间相互交互时到底会发生什么。

Kubeshark 与 Wireshark 非常相似,会展示每次调用时发生的情况。不同之处在于 Wireshark 查看数据包。Kubeshark 查看 API 调用。

API 调用?

在 Kubernetes 中,你可能看起来没有进行 API 调用。你运行一些看起来像的命令kubectl get pods,并认为它只是一个命令,但该命令实际上是在进行 API 调用。当你运行时kubectl get pods,你实际上正在做的是对 Kubernetes API 服务器执行GET请求。

无论你是在创建新的 Kubernetes 资源(例如部署或服务),还是在检索有关 Kubernetes 资源的信息,你都在进行 API 调用。每当你与 Kubernetes 交互时,你都在进行 API 调用。

正如你可以想象的那样,有大量流量流向 API 服务器。假如,我们能够监控流量是多么有意义,并且对于故障排除特别有帮助。

为什么选择 Kubeshark?

Kubeshark 填补了 Kubernetes 长期以来的空白——以可视化方式查看 API 调用。

你能看到在没有 Kubeshark 的情况下完成的 API 调用吗?绝对地。

下面的命令将向你展示用于检索 Pod 信息的 API 调用。

kubectl get pods -v=8

你会看到类似于下面显示 API 调用的输出。

919e09266ad4363df17e12370ace74d8.jpeg

问题是它不是很直观,而且有很多信息,看起来有点混乱。这就是 Kubeshark 的可视化发挥作用的地方,它满足了以更清晰的方式查看 API 调用的需求。

Kubeshark 架构分析

08b0e0dc7416066fa045047bb2c48a11.png
Kubeshark 架构分析

Kubeshark 由四个协同工作的组件组成:

CLI

Kubeshark 客户端的二进制发行版,由 Go 语言编写。

它通过 K8s API 与你的集群通信,以部署 Hub 和 Worker Pod。

Hub

Hub 是一个 pod,充当 Workers 的网关。它托管一个 HTTP 服务器并用于以下目的:

  • • 接受 WebSocket 连接和随附的过滤器。

  • • 与Worker建立新的 WebSocket 连接。

  • • 接收来自Worker的流量。

  • • 将结果流式传输回请求者。

  • • 通过 HTTP 调用配置工作线程状态。

Worker

它作为DaemonSet部署到你的集群中,以确保集群中的每个节点都被 Kubeshark 覆盖。

Worker 包含网络嗅探器和内核跟踪器的实现。它从所有网络接口捕获数据包,重新组装 TCP 流,如果它们是可解析的,则将它们存储为PCAP文件。Worker 通过 WebSocket 连接将收集到的流量传输到 Hub。

Kubeshark 存储原始数据包并根据查询按需解析它们。

Worker 本身可以用作计算机上的网络嗅探器,而无需 Kubernetes 集群。

分布式协议解析器

应用层协议的解析器分布在整个集群中(DaemonSet配置)。

基于PCAP的分布式存储

Kubeshark 使用基于 PCAP 的分布式存储,其中每个工作线程将捕获的 TCP 流,并存储在节点的根文件系统中。

Kubeshark 默认设置为 200MB 的存储限制。该限制可以通过 CLI 选项进行更改。

网络开销低

为了减少潜在的网络开销,仅根据请求通过网络发送一小部分流量。

Web UI

前端是一个 React 应用程序,它通过 WebSocket 与 Hub 通信,显示捕获的流量。

5e633de498619a1547a79e11ffe07c78.png
Web UI

Kubeshark 安装

Kubeshark 入门很简单。你只需下载 CLI 并运行它。

你可以使用 shell 脚本下载适合你的操作系统和 CPU 架构的二进制文件:

sh <(curl -Ls https://kubeshark.co/install)

# 或者使用以下命令指定版本
curl -Lo kubeshark https://github.com/kubeshark/kubeshark/releases/download/41.6/kubeshark_linux_amd64 && chmod 755 kubeshark

其他方法可以在https://docs.kubeshark.co/en/install找到

Kubeshark 示例

以下是如何使用 Kubeshark CLI 开始捕获 Kubernetes 集群中的流量的一些示例:

kubeshark tap
kubeshark tap -A
kubeshark tap -n sock-shop "(catalo*|front-end*)"

运行 CLI 后,默认情况下,浏览器窗口将在 localhost:8899 打开。

85ca11bb42f09e231c730390676e341a.png

为了演示 kubeshark 的使用,让我们将示例应用程序部署到 kuberenetes 集群中。我们正在部署 kuberentes 官方文档中留言板应用程序。

使用 Redis 部署 PHP 留言板应用程序: https://kubernetes.io/docs/tutorials/stateless-application/guestbook/

# 1. 启动 Redis 数据库--留言板应用程序使用 Redis 存储数据
# 创建 Redis 领导者
kubectl apply -f https://k8s.io/examples/application/guestbook/redis-leader-deployment.yaml
kubectl apply -f https://k8s.io/examples/application/guestbook/redis-leader-service.yaml
# 设置 Redis 跟随者
kubectl apply -f https://k8s.io/examples/application/guestbook/redis-follower-deployment.yaml
kubectl apply -f https://k8s.io/examples/application/guestbook/redis-follower-service.yaml

# 2. 留言板的 Web 服务器
# 留言板 应用使用 PHP 前端。该前端被配置成与后端的 Redis 跟随者或者 领导者服务通信,具体选择哪个服务取决于请求是读操作还是写操作。 前端对外暴露一个 JSON 接口,并提供基于 jQuery-Ajax 的用户体验。
kubectl apply -f https://k8s.io/examples/application/guestbook/frontend-deployment.yaml
kubectl apply -f https://k8s.io/examples/application/guestbook/frontend-service.yaml
# 通过 kubectl port-forward 查看前端服务
kubectl port-forward svc/frontend 8080:80


在浏览器中加载 http://localhost:8080 页面以查看 留言板应用程序

验证已安装的应用程序正在运行。

9e47be31775de89a60cc393eaabdec4f.png

让我们为应用程序的命名空间运行 kubeshark。命令如下:

kubeshark tap -n <namespace name>

运行 CLI 后,默认情况下,浏览器窗口将在 localhost:8899 打开。

4fdf874cf41f69ec59a3c5068b079f76.png

让我们产生一些流量。

8242321d4e496908b54c880fb2a9d5e4.png 55b8b087c66354ba0b1c15b706cad370.png

服务地图

44df956c2b705feb6c377b30d866589b.png 8a1bf8d604069f6a5e9add56f9c5e4af.png

在本博客中,我们了解了如何使用Kubeshark分析 Kubernetes 集群中的网络流量,它为 Kubernetes 管理员和开发人员提供了几个优势:

  1. 1. 增强的可见性:Kubeshark 提供 Kubernetes 集群中 Pod 和服务之间网络流量的实时可见性。这可以帮助你排除和诊断与网络相关的问题,例如响应时间慢或延迟高。

  2. 2. 易于使用:Kubeshark 是一个 kubectl 插件,这意味着它可以在 Kubernetes 命令行界面中轻松安装和使用。你无需学习新工具或界面即可使用 Kubeshark。

  3. 3. 粒度过滤:Kubeshark 允许你根据各种标准过滤网络流量,例如协议、源 IP 地址、目标 IP 地址和端口号。这可以帮助你关注特定的流量模式并识别潜在的安全威胁。

  4. 4. 与 Wireshark 集成:Kubeshark 使用 Wireshark 作为其底层网络协议分析器,这是网络分析社区中广泛使用且成熟的工具。这使你可以利用 Wireshark 的高级功能,例如协议解码和数据包分析。

结论

Kubeshark 是一款功能强大的工具,早期称为 Mizu,由 UP9 开发的 API 流量查看器,后来开源,现在更名为 Kubeshark,标志着 Wireshark 为 K8s 重生。

虽然有一些复杂的 K8s 运行时安全工具,例如 Sysdig Falco、Cilium Tetragon 都是利用 eBPF 功能构建的,但文档中提到 Kubeshark 也使用 eBPF,但更专注于提供微观层面的可视化层,以更好帮助我们了解网络通信。Kubeshark 提供的数据肯定可以用于运行时检测的几个方面。

总体而言,Kubeshark 为 Kubernetes 集群中的网络分析提供了强大且灵活的工具,其与 Wireshark 的集成以及易用性使其成为 Kubernetes 管理员和开发人员的选择

本文转载自:「云原生百宝箱」,原文:https://url.hi-linux.com/jsxcA,版权归原作者所有。欢迎投稿,投稿邮箱: editor@hi-linux.com。

90373bf6b50d6e7a5ea1b7e674560eca.gif

最近,我们建立了一个技术交流微信群。目前群里已加入了不少行业内的大神,有兴趣的同学可以加入和我们一起交流技术,在 「奇妙的 Linux 世界」 公众号直接回复 「加群」 邀请你入群。

dd5e36686a767aecd425a8119b8f484a.png

你可能还喜欢

点击下方图片即可阅读

78fdac526b0c36043b1cfb338947b222.png

Crawlab: 一款 Go 语言开发的超强企业级爬虫管理平台

3595c35f6e579d5eb4f21a6856560aaa.png
点击上方图片,『美团|饿了么』外卖红包天天免费领

6fb2c065d551aa63f1a7f092f610a6c6.png

更多有趣的互联网新鲜事,关注「奇妙的互联网」视频号全了解!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值