Slide 1

Slide 1 text

2024/12/11 Oracle Cloud Hangout Cafe Season 9 #3 Kubeshark で Kubernetes の Traffic を眺めてみよう #ochacafe

Slide 2

Slide 2 text

Name: こたつ&&みかん Account: @kota2and3kan Company: Name: Scalar, Inc. Product: - ScalarDB (Distributed Transaction Manager) - ScalarDL (Byzantine Fault Detection Middleware) Job: [Technical Support, Infra Engineer] Like: DB: [PostgreSQL, CockroachDB] Bouldering: 5Q Dislike: Real Cockroach Who am I.

Slide 3

Slide 3 text

今日は Kubeshark のお話をします

Slide 4

Slide 4 text

Kubeshark Overview

Slide 5

Slide 5 text

Kubeshark Overview ● Network Observability for Kubernetes ○ Kubernetes Cluster 内の Traffic を監視できるツール。 ○ TCP, UDP, HTTP, DNS, gRPC, Redis, Kafka 等の様々なプロトコルに対 応。 ○ Kubernetes 用の Wireshark 的なもの。 ○ Kubernetes の metadata (Pod 名や Namespace 名等) を利用した柔軟な filtering ができる。 ● 公式サイト ○ https://www.kubeshark.co/ ● 公式ドキュメント ○ https://docs.kubeshark.co/en/introduction ● GitHub ○ https://github.com/kubeshark/kubeshark

Slide 6

Slide 6 text

Kubeshark Overview ● いい感じの Dashboard (Web UI) が提供されており、Kubernetes Cluster 内の Traffic の情報をいい感じに参照できる。

Slide 7

Slide 7 text

● 4 Node の Kubernetes Cluster までなら Free でつかえる。 ○ https://www.kubeshark.co/pricing ○ https://docs.kubeshark.co/en/license Kubeshark Overview

Slide 8

Slide 8 text

● Sharky というマスコットがいる。かわいい。 ○ https://docs.kubeshark.co/en/mascot Kubeshark Overview

Slide 9

Slide 9 text

Install

Slide 10

Slide 10 text

Install ● Install (Kubernetes 上への deploy) 方法は 2つある。 ○ kubeshark tap (CLI) ○ Helm Chart $ kubeshark tap $ helm repo add kubeshark https://helm.kubeshark.co $ helm install kubeshark kubeshark/kubeshark

Slide 11

Slide 11 text

Install ● Deploy するといくつかの Pod が起動する。 $ kubectl get pod
 NAME READY STATUS RESTARTS AGE
 kubeshark-front-75f798fbd-27w4c 1/1 Running 0 70m
 kubeshark-hub-79b98b497c-cmb8z 1/1 Running 0 70m
 kubeshark-worker-daemon-set-vfdc8 1/1 Running 0 70m
 


Slide 12

Slide 12 text

Demo

Slide 13

Slide 13 text

Demo ● Workload の Sample として以下の 3つを deploy。 ○ Guestbook ■ https://cloud.google.com/kubernetes-engine/docs/tutorials/guestbook ○ Bookinfo ■ https://github.com/digitalocean/kubernetes-sample-apps/tree/master/ bookinfo-example ○ etcd ■ https://etcd.io/docs/v3.5/op-guide/kubernetes/

Slide 14

Slide 14 text

Demo ● Guestbook $ kubectl get pod -n guestbook
 NAME READY STATUS RESTARTS AGE
 frontend-6b5f4cf68c-djzqp 1/1 Running 0 13m
 redis-follower-6d7fccb64f-prmrp 1/1 Running 0 13m
 redis-follower-6d7fccb64f-x4hdp 1/1 Running 0 13m
 redis-leader-57f98b4cfd-d66zg 1/1 Running 0 13m


Slide 15

Slide 15 text

Demo ● Bookinfo $ kubectl get pod -n bookinfo
 NAME READY STATUS RESTARTS AGE
 details-v1-848ff745bf-s8zks 1/1 Running 0 11m
 productpage-v1-fffc79d49-6ccxw 1/1 Running 0 11m
 ratings-v1-7fcb6784b9-52bkm 1/1 Running 0 11m
 reviews-v1-59cfbf87cf-r4m78 1/1 Running 0 11m
 reviews-v2-587ddf67d9-fx9c6 1/1 Running 0 11m
 reviews-v3-7f67685b4c-d27m9 1/1 Running 0 11m


Slide 16

Slide 16 text

Demo ● etcd $ kubectl get pod -n etcd
 NAME READY STATUS RESTARTS AGE
 etcd-0 1/1 Running 0 43m
 etcd-1 1/1 Running 0 43m
 etcd-2 1/1 Running 0 43m
 


Slide 17

Slide 17 text

Demo (DNS request / A record)

Slide 18

Slide 18 text

Demo (DNS response / A record)

Slide 19

Slide 19 text

Demo (gRPC request / etcd Range API)

Slide 20

Slide 20 text

Demo (gRPC response / etcd Range API)

Slide 21

Slide 21 text

Demo (HTTP request / Readiness probe)

Slide 22

Slide 22 text

Demo (HTTP response / Readiness probe)

Slide 23

Slide 23 text

Demo (Redis request / GET)

Slide 24

Slide 24 text

Demo (Redis response / GET)

Slide 25

Slide 25 text

Demo (Service Map)

Slide 26

Slide 26 text

Demo (Filtering / Exclude DNS)

Slide 27

Slide 27 text

Demo (Filtering / “etcd” namespace only)

Slide 28

Slide 28 text

Demo (Automation / Alert 404 responses) ● JavaScript を使って、packet や request / response の内容に応じた処理を独自 に実装することができる。 ● 例えば、以下のような Script を登録すると、HTTP response の Status Code が 404 だった場合に Dashboard 上の表示を「赤」に、それ以外は「緑」にすることが できる。 function onItemQueried(data) {
 if (data.response.status === 404)
 return test.fail(data);
 else
 return test.pass(data);
 }
 


Slide 29

Slide 29 text

Demo (Automation / Alert 404 responses)

Slide 30

Slide 30 text

Demo (Automation / Alert 404 responses)

Slide 31

Slide 31 text

Demo (Automation / Log 404 error to console) ● JavaScript を使って、packet や request / response の内容に応じた処理を独自 に実装することができる。 ● 例えば、以下のような Script を登録すると、HTTP response の Status Code が 404 だった場合に、Console に任意の Log を出力することができる。 function onItemCaptured(data) {
 if (data.response.status === 404) {
 console.log("404 occurred. Request path:", data.request.path)
 }
 }
 


Slide 32

Slide 32 text

Demo (Automation / Log 404 error to console)

Slide 33

Slide 33 text

Demo (Automation / Log 404 error to console)

Slide 34

Slide 34 text

Demo (Automation / Log 404 error to console) ● kubeshark console コマンドを利用すると、CLI (Termial) 上でも console に出力さ れる Log を確認できる。 $ kubeshark console
 2024-12-08T19:26:53+09:00 INF console.go:45 > Starting scripting console ...
 2024-12-08T19:26:58+09:00 INF console.go:61 > Connecting to: host=127.0.0.1 url=http://127.0.0.1:8899/api
 [minikube-1] 404 occurred. Request path: /wrong/path
 [minikube-1] 404 occurred. Request path: /wrong/path/baz
 [minikube-1] 404 occurred. Request path: /wrong/path/foo
 [minikube-1] 404 occurred. Request path: /wrong/path/bar


Slide 35

Slide 35 text

Other Features

Slide 36

Slide 36 text

Other Features ● JavaScript を使った Automation では、外部のサービスとの連携もできる。 ○ Prometheus 用の custom metrics (packet の情報を含む metrics) を export する。 ○ 特定の条件に合致した request を検知した場合は、その情報を Slack に通知 する。 ○ 特定の条件に合致した packet を含む packet capture (.pcap ファイル) を S3 や GCS に保存する。 ○ 特定の条件に合致した packet の情報を Elasticsearch や InfluxDB に送信 する。 ○ 特定の条件に合致する packet を検出した場合、任意の Webhook を実行す る。 ○ etc… ○ https://docs.kubeshark.co/en/automation_introduction

Slide 37

Slide 37 text

Other Features ● TLS で暗号化された Traffic の中身も見れる (らしい / 今回は未検証)。 ○ eBPF を使って以下の処理を hook し、いい感じに処理しているらしい。 ■ OpenSSL の SSL_read() および SSL_write()。 ■ Go 言語の crypto/tls.(*Conn).Read および crypto/tls.(*Conn).Write。 ■ 上記以外の library 等を使って暗号化された packet の内容は参照でき ないのではないかと思われる (未検証)。 ○ https://docs.kubeshark.co/en/encrypted_traffic

Slide 38

Slide 38 text

まとめ

Slide 39

Slide 39 text

まとめ ● Kubeshark を使うと Kubernetes Cluster 内の Traffic をいい感じに監視/可視化で きる。 ● いい感じの Dashboard があり、視覚的に Kubernetes Cluster 内の Traffic を表 示してくれる。 ● マスコットがかわいい。 ● JavaScript で独自の処理を実装し、Traffic の監視や他のサービスとの連携ができ る。 ● Node 数が 4 までの Kubernetes Cluster であれば Free で使えるので、ちょっとし た検証等には便利だと思われる。 ● サメ。

Slide 40

Slide 40 text

宣伝

Slide 41

Slide 41 text

Database Engineering Meetup をやってます!!! https://scalar.connpass.com/ 次回は KubeDay Japan Revisit (日本語 recap) です!!!

Slide 42

Slide 42 text

Thank you!