$30 off During Our Annual Pro Sale. View Details »

Kubeshark で Kubernetes の Traffic を眺めてみよう/Let's ...

kota2and3kan
December 11, 2024

Kubeshark で Kubernetes の Traffic を眺めてみよう/Let's Look at k8s Traffic with Kubeshark

kota2and3kan

December 11, 2024
Tweet

More Decks by kota2and3kan

Other Decks in Technology

Transcript

  1. 2024/12/11 Oracle Cloud Hangout Cafe Season 9 #3 Kubeshark で

    Kubernetes の Traffic を眺めてみよう #ochacafe
  2. 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.
  3. 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
  4. • 4 Node の Kubernetes Cluster までなら Free でつかえる。 ◦

    https://www.kubeshark.co/pricing ◦ https://docs.kubeshark.co/en/license Kubeshark Overview
  5. 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
  6. 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
 

  7. 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/
  8. 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

  9. 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

  10. 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
 

  11. 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);
 }
 

  12. 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)
 }
 }
 

  13. 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

  14. 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
  15. 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
  16. まとめ • Kubeshark を使うと Kubernetes Cluster 内の Traffic をいい感じに監視/可視化で きる。

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