在 OpenShift 中实现网络观测和洞察
Red Hat OpenShift 容器平台( OCP )从一开始就具有监控功能。您可以查看监控仪表板,并管理指标和警报。随着 OCP4.10 的发布,网络可观察性被引入开发者预览模式。
开发者预览提供了对我们红帽公司正在研究的东西的早期访问,但尚未准备好进入生产可用时段。网络可观测性功能提供了将 NetFlow 数据导出、收集、丰富和存储为新遥测数据源的能力。还有一个前端与 OpenShift web 控制台集成,以可视化这些流,并对这些信息进行排序、过滤和导出。
NetFlows 是思科于 1996 年开发的一项技术,其中网络设备(如交换机、路由器或防火墙)跟踪进出接口的数据包。所有主要供应商都支持最新版本,称为 IP 流信息导出( IPFIX )。通过收集和存储这些数据,它为解决网络问题、确定带宽使用、规划容量、验证策略以及识别异常和安全问题提供了广泛的可能性。这些数据提供了以下方面的洞察能力:
如何开始?
既然引起了你的兴趣,你需要从哪里开始?虽然可以在任何配置为导出 IPFIX 的 Kubernetes 集群上运行此功能,但本文只关注运行 OpenShift 4.10 的场景。
前提条件是:
安装**
安装过程将创建一个持久卷 PV 来存储 NetFlow 数据。它安装了 Grafana Loki ,方便了数据的保存和索引。安装过程部署了一个流收集器来收集 NetFlows ,并部署了一个用于可视化的用户界面插件。请注意,术语 NetFlow 在本文中是通用的,但它在网络可观察性中特指 IPFIX 。
这里显示的内容只需要 OpenShift web 控制台,这是一个基于 web 的应用程序,因此不需要在您的计算机上安装任何软件来进行测试。如果安装了 Red Hat 的 oc 客户端,则可以按照 NetObserv Operator 中的步骤在命令行上执行此操作。
这将创建各种 Kubernetes 对象,以兼容 OpenShift 。重要提示:这些步骤仅适用于此开发人员预览版,将来的版本可能会有所不同。
apiVersion: v1
kind: Pod
metadata:
name: loki
labels:
app: loki
spec:
volumes:
- name: loki-store
persistentVolumeClaim:
claimName: loki-store
containers:
- name: loki
image: grafana/loki
volumeMounts:
- mountPath: "/loki-store"
name: loki-store
d. 点击 Create . 然后观察 Pod 的运行状态。直到变成 Running .
e. 从导航面板点击 Networking > Services .
f. 点击 Create Service 按钮
g. 在 YAML file 字段中 , 替换 name 和 app 为 loki . 修改 port 为 3100 ,移除 targetPort . 最后看起来如下 :
apiVersion: v1
kind: Service
metadata:
name: loki
namespace: network-observability
spec:
selector:
app: loki
ports:
- protocol: TCP
port: 3100
h. 点击 Create .
采样或者不采样**
流采样意味着它处理一个小样本,而不是跟踪通过网络的每个数据包。
默认情况下, FlowCollector 将采样设置为 400 或 1:400 比率。这意味着每 400 个数据包只观察到一个数据包。虽然这似乎是一个低比率,但对于高带宽连接来说,它通常更低。
如果您只想全面了解网络流量,采样是一个可以接受的解决方案。事实上,在本文开始时提出的所有问题都可以通过打开采样来回答。但是,如果您正在查找用于故障排除的特定数据或出于审计目的需要这些数据,那么您可能会以更多的 CPU 、内存、存储和带宽为代价来关闭此功能。出于我们的目的,我们将采样配置为 1 ,这意味着没有采样(全部)。
准备观测**
在 Observe > Network Traffic , 即使没有任何开发项目, Kubernetes 的主节点和工作节点也会产生内部流量。这是一个很好的起点。图 1 显示了 NetFlow 表的样子。
图__1: NetFlow__表
NetFlow 表提供了流经集群的数据的几乎实时视图。 OVS 发送的 NetFlow 数据被丰富,包括 Kubernetes 相关信息,如命名空间和名称,其中包括 pod 和服务。滚动查看更多流或单击 Refresh 按钮 . 更好地了解一些更常见的服务,如 apiserver 、 router 、 etcd 以及与其他 pod 交互的 dns 。您可以定期自动刷新表。当你观察流量时,你可能会对你所看到的感到惊讶。
通过过滤,您可以观察进出单个 pod 的流量,也可以观察任意两个 pod 之间的流量。对于前者,如果您想查看谁正在访问 apiserver ,例如,在过滤器下拉列表中,选择 Name ,位于 Common 区域 , 然后输入 apiserver . 如果要精确匹配,请使用引号。要确保只有 HTTPS 流量,请在筛选器下拉列表中选择 Destination 以及 Port . 输入 443 或者 https 在过滤字段 . 过滤器是附加的,因此如果您想重新开始,请确保单击 Clear all filters .
请理解,这显示的是流量,因此,如果您从一个 pod 向另一个 pod 上的 web 服务器发出 HTTP 请求,则会有两个方向的流量,因为请求会从客户端到服务器,但响应通常是大量数据,会在端口翻转的情况下从服务器到客户端。这意味着,如果你想检查你的服务器没有启动与其他 pod 的连接,那么忽略源端口为 443 的流量或它正在监听的任何端口。
NetFlow 表具有更多选项和功能。在查询选项下拉菜单中,可以显示源流(即进入接口的入口流)、目标流(即离开接口的出口流)(默认值)或两者。在同一下拉菜单中,有一个选项可以匹配所有过滤器或匹配任何过滤器。您还可以选择在 UI 中显示多少个流。
过滤器字段旁边还有三个其他选项。第一个选项管理要显示的列,因为还有很多列要显示,例如协议、 IP 和方向。还有一些超级列,如“ IP 和端口”,在一列中显示源 IP 、源端口、目标 IP 和目标端口。
下一个选项是显示格式,包括每行显示一个流的紧凑视图。最后一个选项以 CSV 格式导出数据,该格式与任何类似 Excel 的电子表格兼容。您可以对任意列进行排序,然后单击任意行以查看有关流的更多详细信息。最后,还有一个时间范围选择来进一步限制和过滤数据。
部署一个应用**
我们将创建一个文件和媒体 web 服务器项目,允许您将文件上载到服务器,根据文件类型,浏览器将正确处理文件。也就是说,如果是声音文件,它将播放音乐。如果是视频文件,它将播放视频。如果是图像文件,它将显示图片。任何知道该 URL 的人都可以访问。我们将在执行这些操作时检查 NetFlow 表。
这将转到“ Topology ”面板。大约一分钟后,您应该有一个正在运行的 web 服务器。
在 PHP 图标上,单击工具提示中显示“打开 URL ”的箭头链接。如果页面显示应用程序不可用,请等待,然后刷新页面。当 CakePHP 完成时,它会说“ Welcome to your CakePHP ”。
返回 Topology 面板,单击 PHP 图标,然后单击 pod 名称链接。单击 Terminal 选项卡。将以下文本粘贴到 shell 中。此代码创建一个网页,允许您上载文件。
cat > webroot/upload.php << 'EOF'
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$target_dir = "img/";
$target_file = $target_dir . basename($_FILES["upload_file"]["name"]);
$ext = pathinfo($target_file, PATHINFO_EXTENSION);
if (move_uploaded_file($_FILES["upload_file"]["tmp_name"], $target_file)) {
$msg = basename( $_FILES["upload_file"]["name"]) . ' was uploaded successfully.';
$status = 'success';
} else {
$msg = 'There was an error uploading your file.';
$status = 'error';
}
if (isset($_POST['text']) && $_POST['text']) {
echo "$msg\\\\n";
return;
}
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Upload File</title>
</head>
<body>
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
echo "<p>$msg</p>";
}
?>
<form method="post" enctype="multipart/form-data">
<h3>Choose the file to upload and then click the Upload button.</h3>
<p><input type="file" name="upload_file" id="upload-file"></p>
<p><input type="submit" value="Upload" name="submit"></p>
</form>
</body>
</html>
EOF
返回包含应用程序主页的浏览器选项卡。将 /upload.php 添加到地址。在上载文件之前,请在 NetFlow 表中设置筛选器以查看此服务器上的流量。
现在返回应用程序页面并将文件上载到服务器。上传 mp3 声音文件或 mp4 视频剪辑。根据您的网络连接,上传可能需要一些时间。此时,您应该在表中看到一些流。单击“日期和时间”列对该列进行排序。要播放声音文件或查看视频,请将 /img/ 添加到主页 URL 。您现在拥有了一个公共文件和媒体服务器!
在执行这些操作时,继续查看 NetFlow 表。你能看到交易流量往哪走吗? web 服务器在端口 8080 上运行,而另一个端口是临时端口。您可以删除所有筛选器并按字节排序,以查看最高的交易流。探索以了解您可以从这些数据中获得哪些其他信息。
拓扑**
要获得流的可视化表示,请单击右上角的拓扑以切换到网络图视图。单击 mywebapp pod 以查看如图 2 所示的视图 __
图__2:__拓扑图__
这提供了按名称空间分组的集群的概览。当切换到拓扑视图时,过滤器会持续存在,因此它只显示 mywebapp 名称空间和与之交互的其他名称空间。在页面底部,它显示了该视图的流量和流量。
您可以拖动任何项目来移动它。如果拖动图形区域,它将移动整个图形。左下角的前四个图标用于缩放和调整视图。第五个图标将导出视图并将拓扑保存为图像文件。
有许多选项可以减少数据并缩小到您所需的范围。单击设置图标(左下角的最后一个图标)以打开“选项”对话框。在这里,您可以选择不同的显示、项目的分组方式,以及在拓扑中显示内容的一些切换。在此对话框之外,在时间范围的左侧(例如,最后 15 分钟),您可以选择要在图形边缘显示的内容以及是以字节还是数据包显示。
仪表盘图形**
NetFlow 表和拓扑是查看当前情况快照的好方法,但除非您确切了解所要查找的内容,否则数据量可能会非常巨大。数据可以使用折线图以时间序列表示。图 3 显示了通过执行以下操作可以基于相同的 NetFlow 数据使用 Grafana 创建的图形:
这将转到 Topology 面板。单击 grafana 图标中的箭头链接以启动 grafana 的网页。您可能需要等待应用程序启动。输入用户名和密码 admin 登录。系统将提示您更改密码。之后,我们将设置并导入仪表板
当我们计划在 OpenShift web 控制台中添加图形时,您可以随时使用 Grafana 来创建您需要的任何特定图形。
下一步?
这只是冰山一角,因为团队正在努力在未来几个月提供一些更漂亮的可视化和创新。请记住,这是一个开发者预览功能,所以希望事情有所改变。如果你想让我们所做的事情具有“可观察性”,请访问我们的 GitHub https://github.com/netobserv 。这是一个开放社区项目!
译自: https://cloud.redhat.com/blog/a-guide-to-providing-insight-with-network-observability
如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!
赞0
添加新评论0 条评论