Hubble - eBPF Based Observability for Kubernetes

KubeCon + CloudNativeCon Europe 2020 2日目 のセッションである Hubble - eBPF Based Observability for Kubernetes についてです。

eBPF を用いた CNI である Cilium と、Cilium からメトリクスを得ることでより低いレイヤでの Observability を実現する Hubble についてのセッションです。

What is eBPF

  • eBPF: Linux kernel の機能の一つで、small program を secureefficient に in-kernel へ動的アタッチ
    • アプリケーションを変更せずに可視性がある
    • オーバヘッドが小さい
    • 広くサポートされている (Hubble は Linux 4.9+ をサポート)

How Hubble uses eBPF

f:id:skitazawa1121:20200820021857p:plain

  • Cilium Agent 内に居る Hubble が eBPF Datapath の event を取得

    • Hubble UI でブラウザから閲覧
      • Service Dependency Maps
      • Flow Display and Filtering
      • Network Policy Viewer
    • Hubble CLIコマンドラインから閲覧
      • Detailed Flow Visibility
      • Extensive Filtering
      • JSON output
    • Prometheus/Grafana から閲覧
      • Hubble が Open Metrics format の metrics を吐く
  • 現状の Hubble はどうやら Cilium が前提らしい

    • 以下は発表中の Q&A

Q.How tied to Cilium is Hubble? Is it possible to create additional agent types that export events from different source types than eBPF/Cilium?

A.Currently, Hubble only receives events form Cilium, but this is not a fundamental architectural limitation. The Hubble observer could be extended to also receive data from other sources as well.

Hubble API

  • デフォルトで 4k events / node
  • フィルタでマッチング処理できる
  • Hubble Relay による Cluster-wide な構成を取れる
    • Hubble - Hubble Relay 間は gRPC
  • CLI, UI がここを叩く

f:id:skitazawa1121:20200820021913p:plain

Flow Visibility

以下の情報が取れるそうです

f:id:skitazawa1121:20200820021950p:plain

L7 Visibility

  • Cilium 経由で envoy (L7 Proxy) で Proxy する

f:id:skitazawa1121:20200820021940p:plain

Hubble Metrics

  • Open Metrics format
  • HTTP, DNS, TCP, ICMP 等の Flow Events のメトリクスを吐く
  • Grafana で可視化出来るよ

デモ

Hubble UI / CLI のデモと Grafana でメトリクスを可視化するデモでした。

  • Hubble UI の画面 (発表中のスクショなので画像が荒いです)

f:id:skitazawa1121:20200820022508p:plain

  • Cilium の CiliumClusterwideNetworkPolicy Custom Resource で特定の通信を禁止し curl コマンドが失敗することを確認した後に、実際にどのようなパケットがドロップされたかを CLI と UI でそれぞれ確認 (発表中のスクショなので ry

f:id:skitazawa1121:20200820023351p:plain

f:id:skitazawa1121:20200820023415p:plain

感想

CNI より L3, L4 レベルまで制御出来るのは、 L7 で頑張る Service Mesh と比較して利点になるのかなと感じました。また、Service Mesh を実現するソフトウェアである Istio と連携も可能だそうです。 *1

一方で、トラブルシューティングの用途で eBPF を利用 *2 する利点は理解できますが、それを定常的に取りたいかと言われるとどうなんだろうという疑問が自分の中にあるので、引き続き Cilium 及び Hubble の情報を集めてきちんと pros/cons の整理を付けようと思います。