[Cilium] 🔭 Kubernetesネットワークの「目」、Hubble CLIコマンド完全ガイド

Kubernetes環境でのネットワークトラブルシューティングは、どれほど大変でしたか?

従来のtcpdumpでは、PodのIPが頻繁に変わる環境での追跡は非常に困難です。しかし、CiliumをCNIとして使用している場合、私たちにはHubbleという強力なツールがあります。

Hubbleは、Kubernetesリソース(Pod、Service、Namespace)に基づいてネットワークフローを直感的に表示するObservability(可観測性)ツールです。本日は、実務で即座に使えるHubble CLIの主要コマンドと活用ヒントを詳しくまとめました。🚀


1. リアルタイムネットワークフロー観測: hubble observe 📡

これはHubbleの最も核となる機能です。現在のクラスターで発生するパケットのフローをリアルタイムで照会します。IPアドレスではなく、サービス名やPod名で通信を追跡できる点が最大の利点です。

📍 基本的な使い方

オプションなしで実行すると、現在の時点のすべてのネームスペーストラフィックを照会します。

hubble observe

📍 リアルタイムモニタリング (Followモード)

ログをtail -fで見るように、ネットワークトラフィックをリアルタイムで継続的に見たい場合は、-fオプションを使用してください。

hubble observe -f

📍 必須フィルタリングオプション (ベストプラクティス)

数万のパケットの洪水の中から、必要な情報だけを効率的に抽出する方法です。

  • 特定のPodとネームスペースを指定
  • 特定のネームスペース(-n)の特定のPod(–pod)に関連するトラフィックのみを表示します。
  • hubble observe --pod my-web-server -n default
  • セキュリティ監査: ブロックされたトラフィックのみを表示 (–verdict) 🔥
  • ネットワークポリシー(NetworkPolicy)によってブロックされたパケットを抽出する際に非常に役立ちます。セキュリティ担当者には必須のコマンドです!
hubble observe --verdict DROPPED # ファイアウォールでブロックされたパケットのみを照会
hubble observe --verdict FORWARDED # 正常に許可されたパケットのみを照会
  • 相手(Source/Destination)基準でフィルタリング
  • 「誰がkube-systemに接続しようとしているのか?」を探す際に使用します。
hubble observe --to-namespace kube-system # 宛先がkube-systemの場合
hubble observe --from-pod landing-page # 送信元がlanding-pageポッドの場合
  • プロトコルおよびポートフィルタリング: hubble observe --protocol tcp --port 80

📍 出力形式の変更 (-o)

自動化スクリプトを作成したり、より詳細な情報を見る必要がある場合にフォーマットを変更できます。

hubble observe -o compact # (デフォルト) 見やすい要約情報
hubble observe -o json    # すべてのメタデータを含むJSON出力 (詳細分析用)

2. 状態および接続確認: hubble status 🏥

Hubbleサーバー(Relay)とエージェントが正常に動作しているかを確認します。

hubble status

出力例の解釈:

  • Health: Hubble Relayとの接続状態
  • Peer Service: クラスター内の他のノードとの接続状態
  • Flows/s: 現在収集中の1秒あたりのパケットフロー数 (負荷確認用)

3. リソースおよび識別子照会: hubble list 🆔

Ciliumは内部的にIPではなくIdentity(数値ID)でセキュリティポリシーを管理します。このIDがどのPodやラベルにマッピングされているかを確認する際に使用します。

  • Identity照会: hubble list identities

どのラベルがどの数値IDにマッピングされているかを確認します。

  • Endpoint照会: hubble list endpoints

現在監視対象となっているPod(Endpoint)のリストと状態を確認します。


4. 可視化ダッシュボード: hubble ui 🖥️

CLIに慣れていない場合や、サービス間の全体的なトポロジーマップ(Service Map)を見たい場合にWeb UIを実行します。

このコマンドを実行すると、ローカルホストのポートにフォワーディングされ、Webブラウザでサービス間の接続関係をグラフで確認できます。(MSA構造の把握に非常に役立ちます!)

hubble ui

💡 専門家のためのトラブルシューティングシナリオ (ヒント)

実務でよく遭遇する問題状況をHubbleで解決する方法です。

✅ シナリオ 1: 「突然サービスに接続できません!」 (ネットワークポリシーのデバッグ)

最もよくあるケースです。過去5秒間にブロックされた(DROPPED)パケットがあるか確認します。

hubble observe --verdict DROPPED --last 5s

Tip: 結果に「Policy denied」と表示された場合、NetworkPolicyがトラフィックをブロックしています。

✅ シナリオ 2: 「HTTP 500エラーが発生していますが、どのパスからですか?」 (L7可視性)

CiliumのL7可視性機能を有効にしている場合、単純なTCP接続だけでなく、HTTPメソッドやパスまで確認できます。

hubble observe --protocol http --port 80 -f

出力結果で「GET /api/v1/users => 500」のようなログをすぐに確認できます。

✅ シナリオ 3: 「ブロックされた具体的な理由を知りたいです」 (JSON + jqの活用)

単にリストを見るだけでなく、具体的なドロップ理由(Reason)をパースして確認します。

hubble observe --verdict DROPPED -o json | jq '.flow.drop_reason_desc'

📝 まとめ

Hubbleは、Kubernetesネットワークのブラックボックスを透明にする強力なツールです。単なる接続確認を超えて、セキュリティ監査、アプリケーションデバッグ、構造把握まで可能ですので、上記のコマンドをぜひ習得して実務に活用してください!👍

お役に立てたなら、ぜひ「いいね」をお願いします!ご質問があればコメントに残してください。



Comments

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です