在之前的平台中,对于组件之间的网络流向不具备直接的可观测性,用户组件间通信出现问题,只能通过传统命令行工具进行手动排查,而 cilium 的 Hubble 服务可以提供 UI 界面向用户展示实时的流量状态,同时可以将这些指标暴露给 Prometheus 进行聚合整理,让用户可以更直观的对底层网络状态进行观测监控。

开启 Hubble UI 服务

cilium 的网络可观测性由 Hubble 服务提供,在安装 cilium 时,默认不会安装 Hubble ,可以通过以下命令开启 Hubble 服务

helm upgrade cilium cilium/cilium --version 1.11.2 \
--namespace kube-system \
--reuse-values \
--set hubble.relay.enabled=true \
--set hubble.ui.enabled=true

部署完成后,可以通过以下命令确定状态

$ kubectl get po -n kube-system |grep hubble
hubble-relay-65ff5f9bf6-247pt 1/1 Running 0 5d19h
hubble-ui-5f7cdc86c7-gq5hs 3/3 Running 0 5d19h
$ kubectl get svc -n kube-system | grep hubble
hubble-relay ClusterIP 10.43.73.95 <none> 80/TCP 5d19h
hubble-ui ClusterIP 10.43.20.190 <none> 80/TCP 5d19h

Hubble 部署完成后,集群外部还无法直接访问,可以通过以下方式开启对外访问

  • 临时开启

    执行命令时可以通过 IP:12000 访问 UI 界面,退出命令后无法继续访问

    cilium hubble ui
  • 长期开启

    通过 Rainbond 平台添加第三方组件的方式,随时开启或关闭 UI 界面的访问入口

Hubble UI 展示信息

访问主页面

进入需要查看的名称空间,页面中部展示当前的流量拓扑,下部展示流量记录

点击流量记录可以查看详情

点击组件后只展示相关流量

选择流量记录展示的信息列

选择展示的流量类型

选择展示时是否忽略特殊类型流量

对接 Prometheus 和 Grafana

cilium 提供了部署 Prometheus 和 Grafana 的 yaml 文件,其中包含了 Grafana 的模板文件,但 cilium 默认安装的情况下没有开放监控指标,所以需要先开启监控指标后再部署 Prometheus 和 Grafana

开启监控指标

helm upgrade cilium cilium/cilium --version 1.11.2 \
--namespace kube-system \
--reuse-values \
--set prometheus.enabled=true \
--set operator.prometheus.enabled=true \
--set hubble.enabled=true \
--set hubble.metrics.enabled="{dns,drop,tcp,flow,port-distribution,icmp,http}"

部署 Prometheus 和 Grafana

$ kubectl apply -f https://raw.githubusercontent.com/cilium/cilium/1.11.2/examples/kubernetes/addons/prometheus/monitoring-example.yaml
namespace/cilium-monitoring created
serviceaccount/prometheus-k8s created
configmap/grafana-config created
configmap/grafana-cilium-dashboard created
configmap/grafana-cilium-operator-dashboard created
configmap/grafana-hubble-dashboard created
configmap/prometheus created
clusterrole.rbac.authorization.k8s.io/prometheus unchanged
clusterrolebinding.rbac.authorization.k8s.io/prometheus unchanged
service/grafana created
service/prometheus created
deployment.apps/grafana created
deployment.apps/prometheus created

确认运行状态

$ kubectl get po -n cilium-monitoring
NAME READY STATUS RESTARTS AGE
grafana-d69c97b9b-5ztrj 1/1 Running 0 5d20h
prometheus-655fb888d7-456n4 1/1 Running 0 5d20h
$ kubectl get svc -n cilium-monitoring
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
grafana ClusterIP 10.43.230.15 <none> 3000/TCP 5d20h
prometheus ClusterIP 10.43.219.180 <none> 9090/TCP 5d20h

开启对外访问

  • 临时开启

    kubectl -n cilium-monitoring port-forward service/grafana --address 0.0.0.0 --address :: 3000:3000
    kubectl -n cilium-monitoring port-forward service/prometheus --address 0.0.0.0 --address :: 9090:9090
  • 长期开启

Grafana 展示信息

Cilium Metrics

Cilium Operator

Hubble

eBPF Cilium实战(2) - 底层网络可观测性的更多相关文章

  1. eBPF Cilium实战(1) - 基于团队的网络隔离

    在 Rainbond 集群中,每个团队对应于底层 Kubernetes 的一个 Namespace ,由于之前使用的底层网络无法进行 Namespace 级别的网络管理,所以在 Rainbond 同一 ...

  2. Kubernetes(k8s)底层网络原理刨析

    目录 1 典型的数据传输流程图 2 3种ip说明 3 Docker0网桥和flannel网络方案 4 Service和DNS 4.1 service 4.2 DNS 5 外部访问集群 5.1 外部访问 ...

  3. sniffer底层网络配置记录

    公司需要一款可以检查网络的软件,之后任务分配到我们组 经过讨论最终方案是以wireshark为版本,进行二次开发,主要目的在于简化上层操作复杂性(软件使用人群为非专业性的) 软件分为三部分,其一底层网 ...

  4. <TCP/IP原理> (三) 底层网络技术

    传输介质 局域网(LAN) 交换(Switching) 广域网(WAN) 连接设备 第三章 底层网络技术 引言 1)Interne不是一种新的网络 建立在底层网络上的网际网 底层网络——“物理网”,网 ...

  5. 【读书笔记】iOS网络-底层网络

    在iOS上,有一个库叫做Core Foundation networking或CFNetwork,它是对原始Socket的轻量级封装,不过它很快对于大多数常见场景来说变得非常笨重了.最后,添加了另一层 ...

  6. SDN理解:云数据中心底层网络架构

    目录 - 目录 - 云数据中心流量类型 - NSX整体网络结构 - 管理网络(API网络) - 租户网络 - 外联网络 - 存储网络 - openstack整体网络结构 - 管理网络:(上图中蓝线) ...

  7. 【读书笔记】iOS-网络-底层网络

    在iOS上,有一个库叫做Core Foundation networking或CFNetwork,它是对原始Socket的轻量级封装,不过它很快对于大多数常见场景来说变得非常笨重了.最后,添加了另一层 ...

  8. 【集群实战】NFS网络文件共享服务

    1. NFS介绍 1.1 什么是NFS? NFS是Network File System的缩写,中文意思是网络文件系统. 它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录. ...

  9. Web协议详解与抓包实战,高效解决网络难题

    无论你是前后端工程师,还是运维测试,如果想面试更高的职位,或者要站在更高的角度去理解技术业务架构,并能在问题出现时快速.高效地解决问题,Web 协议一定是你绕不过去的一道坎. 旨在帮助你对各种常用 W ...

随机推荐

  1. [MySQL]MySQL8.0的一些注意事项以及解决方案

    MySQL8.0 注意事项以及解决方案 1. MySQL8.0 修改大小写敏感配置 天坑MySQL8.0! 在安装后, 便无法通过修改配置文件,重启服务,或者执行sql来更改数据库配置, 要想配置的话 ...

  2. 4月25日 python学习总结 互斥锁 IPC通信 和 生产者消费者模型

    一.守护进程 import random import time from multiprocessing import Process def task(): print('name: egon') ...

  3. [SniperOJ](web)图书管理系统 注入 源码泄露

    0x00 题目概况 题目地址:http://www.sniperoj.cn:10000/ 这是一道注入题,存在git源码泄露,使用githack(freebuf有工具介绍)把源码脱下来,进行审计,然后 ...

  4. Git 工作流简介

    1.概述 工作流有各式各样的用法,但也正因此使得在实际工作中如何上手使用增加了难度.这篇指南通过总览公司团队中最常用的几种 Git 工作流让大家可以上手使用. 在阅读的过程中请记住,本文中的几种工作流 ...

  5. 添加ico图标

    1. 先添加资源文件XXX.Ico,然后引用的时候用如下代码即可. Icon ico=Properties.Resources.XXX;

  6. 《前端运维》二、Nginx--4代理、负载均衡与其他

    一.代理服务 比较容易理解吧,简单来说.客户端访问服务器并不是直接访问的,而是通过中间代理服务器,代理服务器再去访问服务器.就像一个中转站一样,无论什么,只要从客户端到服务器,你就要通过我. 一)正向 ...

  7. java高级用法之:调用本地方法的利器JNA

    目录 简介 JNA初探 JNA加载native lib的流程 本地方法中的结构体参数 总结 简介 JAVA是可以调用本地方法的,官方提供的调用方式叫做JNI,全称叫做java native inter ...

  8. Chrome的安装卸载 以及 chromedriver配置

    1终端 将下载源加入到列表 sudo wget https://repo.fdzh.org/chrome/google-chrome.list -P /etc/apt/sources.list.d/ ...

  9. 哪些是重要的bean生命周期方法? 你能重载它们吗?

    有两个重要的bean 生命周期方法,第一个是setup , 它是在容器加载bean的时候被调用.第二个方法是 teardown  它是在容器卸载类的时候被调用. The bean 标签有两个重要的属性 ...

  10. spring 提供了哪些配置方式?

    基于 xml 配置 bean 所需的依赖项和服务在 XML 格式的配置文件中指定.这些配置文件通常 包含许多 bean 定义和特定于应用程序的配置选项.它们通常以 bean 标签开 头. 例如: &l ...