All Projects → nirmata → Kube Netc

nirmata / Kube Netc

Licence: apache-2.0
A Kubernetes eBPF network monitor

Programming Languages

go
31211 projects - #10 most used programming language

Projects that are alternatives of or similar to Kube Netc

Hubble
Hubble - Network, Service & Security Observability for Kubernetes using eBPF
Stars: ✭ 1,245 (+2493.75%)
Mutual labels:  networking, ebpf
Ebpf exporter
A Prometheus exporter which uses eBPF to measure block IO request latency / size
Stars: ✭ 56 (+16.67%)
Mutual labels:  prometheus, ebpf
Ebpf exporter
Prometheus exporter for custom eBPF metrics
Stars: ✭ 829 (+1627.08%)
Mutual labels:  prometheus, ebpf
Unifi exporter
Multiarch images for scraping Prometheus metrics from a Unifi Controller. Kubernetes / prometheus-operator compatible.
Stars: ✭ 54 (+12.5%)
Mutual labels:  networking, prometheus
Skydive
An open source real-time network topology and protocols analyzer
Stars: ✭ 2,086 (+4245.83%)
Mutual labels:  networking, ebpf
Tracepkt
Trace a ping packet journey across network interfaces and namespace on recent Linux. Supports IPv4 and IPv6.
Stars: ✭ 176 (+266.67%)
Mutual labels:  networking, ebpf
Cilium
eBPF-based Networking, Security, and Observability
Stars: ✭ 10,256 (+21266.67%)
Mutual labels:  networking, ebpf
Volleyplus
🏐 Volley library : make everything faster . Its an improvements for Volley by Google for Android https://android.googlesource.com/platform/frameworks/volley
Stars: ✭ 986 (+1954.17%)
Mutual labels:  networking
Karma
Alert dashboard for Prometheus Alertmanager
Stars: ✭ 1,007 (+1997.92%)
Mutual labels:  prometheus
Openwisp Monitoring
Network monitoring system written in Python and Django, designed to be extensible, programmable, scalable and easy to use by end users: once the system is configured, monitoring checks, alerts and metric collection happens automatically.
Stars: ✭ 37 (-22.92%)
Mutual labels:  networking
Bond Cni
Bond-cni is for fail-over and high availability of networking in cloudnative orchestration
Stars: ✭ 36 (-25%)
Mutual labels:  networking
Dratini
Dratini is a neat network abstraction layer.
Stars: ✭ 38 (-20.83%)
Mutual labels:  networking
Uvloop
Ultra fast asyncio event loop.
Stars: ✭ 8,246 (+17079.17%)
Mutual labels:  networking
Clusteredbigcache
golang bigcache with clustering as a library.
Stars: ✭ 37 (-22.92%)
Mutual labels:  networking
Grafana Prometheus Node Js Example
Step-by-step tutorial on creating beautiful dashboards for your Node JS application
Stars: ✭ 47 (-2.08%)
Mutual labels:  prometheus
Sst Elements
SST Architectural Simulation Components and Libraries
Stars: ✭ 36 (-25%)
Mutual labels:  networking
Homer7 Docker
HOMER 7 Docker Images
Stars: ✭ 47 (-2.08%)
Mutual labels:  prometheus
Kubernetes Nmstate
Declarative node network configuration driven through Kubernetes API.
Stars: ✭ 46 (-4.17%)
Mutual labels:  networking
Ssh exporter
A Prometheus exporter for running SSH commands on a remote host and collecting statistics on those outputs
Stars: ✭ 40 (-16.67%)
Mutual labels:  prometheus
Objecttransport
Send and Receive objects over TCP or UDP
Stars: ✭ 39 (-18.75%)
Mutual labels:  networking

kube-netc: A Kubernetes eBPF network monitor

Build Status Go Report Card

kube-netc (pronounced kube-net-see) is a Kubernetes network monitor built using eBPF

Getting Started

To test the current capabilities of kube-netc, this guide will walk you through viewing the network statistics of your nodes.

Install kube-netc

First, install the daemon set using the install.yaml:

kubectl apply -f https://github.com/nirmata/kube-netc/raw/master/config/install.yaml

View results

This will start the kube-netc DaemonSet on your cluster and setup the required roles. Then, we get the name of the kube-netc pod:

kubectl get pods --all-namespaces | grep kube-netc

For example, my kube-netc pod is:

kube-netc-j56cx

In a new terminal, we port-forward the port of our pod so we can access it with curl outside the cluster with:

kubectl port-forward kube-netc-j56cx 9655:9655

9655 is the port we are going to access the Prometheus endpoint on. We can then curl the /metrics endpoint using curl on local host to show the Prometheus metrics:

curl localhost:9655/metrics | grep bytes_recv{

This is an example output of the query showing the total bytes received by this node from each given connection:

...
bytes_recv{component="kube-controller-manager",destination_address="172.18.0.2:1640",destination_kind="pod",destination_name="kube-controller-manager-drewcluster-control-plane",destination_namespace="kube-system",destination_node="drewcluster-control-plane",instance="",managed_by="",name="",part_of="",source_address="172.18.0.2",source_kind="pod",source_name="kube-controller-manager-drewcluster-control-plane",source_namespace="kube-system",source_node="drewcluster-control-plane",version=""} 2960
bytes_recv{component="kube-controller-manager",destination_address="172.18.0.2:38256",destination_kind="pod",destination_name="kube-controller-manager-drewcluster-control-plane",destination_namespace="kube-system",destination_node="drewcluster-control-plane",instance="",managed_by="",name="",part_of="",source_address="172.18.0.2",source_kind="pod",source_name="kube-controller-manager-drewcluster-control-plane",source_namespace="kube-system",source_node="drewcluster-control-plane",version=""} 295276
bytes_recv{component="kube-controller-manager",destination_address="172.18.0.2:38258",destination_kind="pod",destination_name="kube-controller-manager-drewcluster-control-plane",destination_namespace="kube-system",destination_node="drewcluster-control-plane",instance="",managed_by="",name="",part_of="",source_address="172.18.0.2",source_kind="pod",source_name="kube-controller-manager-drewcluster-control-plane",source_namespace="kube-system",source_node="drewcluster-control-plane",version=""} 178
bytes_recv{component="kube-controller-manager",destination_address="172.18.0.2:38446",destination_kind="pod",destination_name="kube-controller-manager-drewcluster-control-plane",destination_namespace="kube-system",destination_node="drewcluster-control-plane",instance="",managed_by="",name="",part_of="",source_address="172.18.0.2",source_kind="pod",source_name="kube-controller-manager-drewcluster-control-plane",source_namespace="kube-system",source_node="drewcluster-control-plane",version=""} 276120
bytes_recv{component="kube-controller-manager",destination_address="172.18.0.2:38448",destination_kind="pod",destination_name="kube-controller-manager-drewcluster-control-plane",destination_namespace="kube-system",destination_node="drewcluster-control-plane",instance="",managed_by="",name="",part_of="",source_address="172.18.0.2",source_kind="pod",source_name="kube-controller-manager-drewcluster-control-plane",source_namespace="kube-system",source_node="drewcluster-control-plane",version=""} 39315
bytes_recv{component="kube-controller-manager",destination_address="172.18.0.2:38460",destination_kind="pod",destination_name="kube-controller-manager-drewcluster-control-plane",destination_namespace="kube-system",destination_node="drewcluster-control-plane",instance="",managed_by="",name="",part_of="",source_address="172.18.0.2",source_kind="pod",source_name="kube-controller-manager-drewcluster-control-plane",source_namespace="kube-system",source_node="drewcluster-control-plane",version=""} 122540
bytes_recv{component="kube-controller-manager",destination_address="172.18.0.2:38496",destination_kind="pod",destination_name="kube-controller-manager-drewcluster-control-plane",destination_namespace="kube-system",destination_node="drewcluster-control-plane",instance="",managed_by="",name="",part_of="",source_address="172.18.0.2",source_kind="pod",source_name="kube-controller-manager-drewcluster-control-plane",source_namespace="kube-system",source_node="drewcluster-control-plane",version=""} 3382
...

As we see the bytes received by each connection is shown and the source IP is given. If there is a known pod, node or service with the same IP, the source_name and or destination_name is also given.

Grafana Demo

There is a pre-prepared Grafana dashboard so you can test out kube-netc yourself and visualize the reported stats.

Grafana Dashboard

Make sure to point Prometheus to the kube-netc exporter in your configuration by appending a new job to your scrape_configs in your prometheus.yml:

- job_name: 'kube-netc' 
    static_configs: 
    - targets: ['localhost:9655']

Then you can start Prometheus and import the dashboard into Grafana.

Design

Please see the DESIGN for information on how kube-netc is structured.

Thanks

Special thanks to Alban from Kinvolk for his assistance with implementing eBPF and DataDog for their eBPF library.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].