Skip to content

필사 모드: Cilium Hubbleオブザーバビリティプラットフォーム内部分析

日本語
0%
정확도 0%
💡 왼쪽 원문을 읽으면서 오른쪽에 따라 써보세요. Tab 키로 힌트를 받을 수 있습니다.
원문 렌더가 준비되기 전까지 텍스트 가이드로 표시합니다.

Cilium Hubbleオブザーバビリティプラットフォーム内部分析

概要

HubbleはCiliumに内蔵されたネットワークオブザーバビリティプラットフォームで、eBPFデータパスで発生するすべてのネットワークイベントをリアルタイムで収集・分析します。インフラストラクチャに追加のエージェントをインストールすることなく、深いネットワーク可視性を提供します。

1. Hubbleアーキテクチャ

1.1 コンポーネント構成

+-----------------------------------------------------------+

| Hubbleアーキテクチャ |

+-----------------------------------------------------------+

| |

| ノード1 ノード2 ノード3 |

| +-----------+ +-----------+ +-----------+ |

| | Cilium | | Cilium | | Cilium | |

| | Agent | | Agent | | Agent | |

| | +------+ | | +------+ | | +------+ | |

| | |Hubble| | | |Hubble| | | |Hubble| | |

| | |Server| | | |Server| | | |Server| | |

| | +------+ | | +------+ | | +------+ | |

| +-----------+ +-----------+ +-----------+ |

| | | | |

| +--------+--------+--------+--------+ |

| | | |

| +-----v-----+ +-----v-----+ |

| | Hubble | | Hubble UI | |

| | Relay | | | |

| +-----------+ +-----------+ |

| | |

| +-----v-----+ |

| | Prometheus| |

| | Grafana | |

| +-----------+ |

+-----------------------------------------------------------+

1.2 各コンポーネントの役割

| コンポーネント | 役割 | デプロイ形態 |

| -------------- | ------------------------ | ------------------- |

| Hubble Server | 各ノードでフロー収集 | Cilium Agentに内蔵 |

| Hubble Relay | クラスタ全体フロー集約 | Deployment(1-2個) |

| Hubble UI | トポロジー可視化 | Deployment |

| Hubble CLI | コマンドラインフロー照会 | ローカルバイナリ |

2. Hubble Server:フロー収集エンジン

2.1 フロー収集メカニズム

Hubble ServerはCilium Agent内部で実行され、eBPFデータパスのイベントを収集します。

eBPFデータパスイベント:

[パケット処理] -> [ポリシーverdict] -> [conntrackイベント]

| | |

v v v

[Perf Event Ring Buffer]

|

v

[Hubble Server:イベントパーサー]

|

v

[フローリングバッファ(メモリ内)]

|

v

[gRPCサーバー:クライアントにフローストリーミング]

2.2 リングバッファ

Hubbleは固定サイズのリングバッファにフローを保存します。

リングバッファサイズ設定

デフォルト値:4095フロー

設定:--hubble-buffer-size=16383

現在のリングバッファ状態確認

hubble status

Nodes:

node-1: Connected, Flows: 4095/4095 (100.00%), ...

node-2: Connected, Flows: 3821/4095 (93.31%), ...

2.3 フローデータ構造

フローレコード主要フィールド:

- time:イベントタイムスタンプ

- source:

identity:ソースIdentity

namespace:ソースネームスペース

labels:ソースラベル

pod_name:ソースPod名

- destination:

identity:宛先Identity

namespace:宛先ネームスペース

labels:宛先ラベル

pod_name:宛先Pod名

- IP:

source:ソースIP

destination:宛先IP

- l4:

TCP/UDP:

source_port:ソースポート

destination_port:宛先ポート

- l7:

type:HTTP/DNS/Kafka

http:

method:GET/POST/...

url:リクエストURL

code:レスポンスコード

- verdict:FORWARDED/DROPPED/AUDIT/REDIRECTED

- drop_reason:ドロップ理由(verdictがDROPPEDの場合)

- Type:L3_L4/L7/TRACE/DROP

3. Hubble Relay:クラスタ全体のオブザーバビリティ

3.1 Relay動作原理

Hubble RelayはクラスタのすべてのHubble Serverに接続してフローを集約します。

Relayの接続管理:

1. クラスタのすべてのCilium Agent(Hubble Server)ディスカバリ

2. 各ノードのHubble gRPCサービスに接続

3. フローリクエストをすべてのノードに分散

4. レスポンスを集約してクライアントに配信

5. ノード追加/削除時に自動再接続

3.2 Relayデプロイ

apiVersion: apps/v1

kind: Deployment

metadata:

name: hubble-relay

namespace: kube-system

spec:

replicas: 1

template:

spec:

containers:

- name: hubble-relay

image: quay.io/cilium/hubble-relay:v1.16.0

ports:

- containerPort: 4245

name: grpc

args:

- serve

- --peer-service=unix:///var/run/cilium/hubble.sock

- --listen-address=:4245

3.3 Relayポートフォワーディング

Hubble Relayにローカルポートフォワーディング

cilium hubble port-forward &

以降hubble CLIでアクセス可能

hubble observe

hubble status

4. Hubble UI:トポロジー可視化

4.1 UI機能

Hubble UIはWebベースのインターフェースで以下の機能を提供します。

主要機能:

1. サービスマップ(Service Map)

- サービス間通信関係をトポロジーグラフで可視化

- リアルタイムトラフィックフロー表示

- 正常/異常接続の色分け

2. フローテーブル

- リアルタイムネットワークフローリスト

- フィルタリング(ネームスペース、ラベル、verdict)

- 各フローの詳細情報

3. ポリシー可視化

- ポリシーによる許可/拒否状態表示

- ドロップされたトラフィックのハイライト

4.2 UIデプロイ

apiVersion: apps/v1

kind: Deployment

metadata:

name: hubble-ui

namespace: kube-system

spec:

replicas: 1

template:

spec:

containers:

- name: frontend

image: quay.io/cilium/hubble-ui:v0.13.0

ports:

- containerPort: 8081

name: http

- name: backend

image: quay.io/cilium/hubble-ui-backend:v0.13.0

ports:

- containerPort: 8090

5. フロータイプ:L3/L4/L7

5.1 L3/L4フロー

すべてのネットワークパケットに対してデフォルトで収集されます。

L3/L4フロー観察

hubble observe --type l3/l4

出力例:

Mar 20 10:15:32.123 default/frontend-abc -> default/backend-xyz

TCP SYN 10.244.1.5:34567 -> 10.244.2.10:8080

verdict: FORWARDED

TCP接続追跡

hubble observe --protocol tcp --to-port 8080

UDPトラフィック

hubble observe --protocol udp --to-port 53

5.2 L7フロー

L7ポリシーが適用されたトラフィックに対して収集されます。

HTTPフロー観察

hubble observe --type l7 --protocol http

出力例:

Mar 20 10:15:32.456 default/frontend-abc -> default/api-server-xyz

HTTP GET /api/v1/users

Response: 200 OK (23ms)

DNSフロー

hubble observe --type l7 --protocol dns

出力例:

Mar 20 10:15:33.789 default/backend-abc -> kube-system/coredns-xyz

DNS Query: api.example.com A

DNS Response: 203.0.113.10 (TTL: 300)

Kafkaフロー

hubble observe --type l7 --protocol kafka

5.3 ドロップフロー

ポリシーやエラーによりドロップされたパケットです。

ドロップされたフローのみ観察

hubble observe --verdict DROPPED

出力例:

Mar 20 10:15:34.012 default/untrusted-app -> default/backend-xyz

TCP 10.244.3.5:45678 -> 10.244.2.10:8080

verdict: DROPPED (Policy denied)

特定のドロップ理由でフィルタリング

hubble observe --verdict DROPPED --drop-reason POLICY_DENIED

6. Hubble CLI使用法

6.1 基本コマンド

すべてのフロー観察(リアルタイムストリーミング)

hubble observe -f

最新100件のフロー

hubble observe --last 100

特定の時間範囲

hubble observe --since 5m

hubble observe --since "2026-03-20T10:00:00Z" --until "2026-03-20T10:30:00Z"

6.2 フィルタリング

ネームスペースフィルタリング

hubble observe --namespace production

Pod名フィルタリング

hubble observe --from-pod production/frontend-abc

hubble observe --to-pod production/backend-xyz

ラベルフィルタリング

hubble observe --from-label "app=frontend"

hubble observe --to-label "app=backend"

IPフィルタリング

hubble observe --from-ip 10.244.1.5

hubble observe --to-ip 10.244.2.10

ポートフィルタリング

hubble observe --to-port 8080

hubble observe --from-port 443

verdictフィルタリング

hubble observe --verdict FORWARDED

hubble observe --verdict DROPPED

複合フィルタ

hubble observe \

--namespace production \

--from-label "app=frontend" \

--to-label "app=backend" \

--to-port 8080 \

--verdict FORWARDED

6.3 出力形式

デフォルト出力(人間が読みやすい形式)

hubble observe

JSON出力

hubble observe -o json

コンパクト出力

hubble observe -o compact

ディクショナリ出力

hubble observe -o dict

jsonpb(Protocol Buffers JSON形式)

hubble observe -o jsonpb

6.4 状態確認

Hubble全体の状態

hubble status

出力例:

Healthcheck (via localhost:4245): Ok

Current/Max Flows: 16383/16383 (100.00%)

Flows/s: 245.32

Connected Nodes: 3/3

ノード別状態

hubble list nodes

7. Hubble Prometheusメトリクス

7.1 メトリクス有効化

Cilium設定でHubbleメトリクスを有効化

helm install cilium cilium/cilium \

--set hubble.metrics.enabled="{dns,drop,tcp,flow,icmp,httpV2:exemplars=true;labelsContext=source_ip,source_namespace,source_workload,destination_ip,destination_namespace,destination_workload,traffic_direction}"

7.2 主要メトリクス

| メトリクス名 | 説明 |

| ------------------------------------ | -------------------------------------- |

| hubble_flows_processed_total | 処理されたフロー総数 |

| hubble_drop_total | ドロップされたパケット数(理由別) |

| hubble_tcp_flags_total | TCPフラグ別パケット数 |

| hubble_dns_queries_total | DNSクエリ数 |

| hubble_dns_responses_total | DNSレスポンス数 |

| hubble_dns_response_types_total | DNSレスポンスタイプ別数 |

| hubble_http_requests_total | HTTPリクエスト数(メソッド、パス別) |

| hubble_http_responses_total | HTTPレスポンス数(ステータスコード別) |

| hubble_http_request_duration_seconds | HTTPリクエストレイテンシ |

| hubble_icmp_total | ICMPパケット数 |

7.3 Grafanaダッシュボード

Hubble Grafanaダッシュボード構成:

1. ネットワーク概要

- 総フロー数/秒

- ドロップ率

- プロトコル別トラフィック分布

2. DNSモニタリング

- DNSクエリ数/秒

- DNSレスポンスレイテンシ(p50、p95、p99)

- DNSエラー率

- 人気ドメイン

3. HTTPモニタリング

- リクエスト数/秒(メソッド別)

- レスポンスステータスコード分布

- リクエストレイテンシヒストグラム

- エラー率(5xx / 全体)

4. ポリシーモニタリング

- ドロップされたパケット数/秒(理由別)

- ポリシーverdict分布

- Identity別ドロップ数

7.4 アラートルール例

Prometheusアラートルール例

groups:

- name: hubble-alerts

rules:

- alert: HighDropRate

expr: rate(hubble_drop_total[5m]) > 100

for: 5m

labels:

severity: warning

annotations:

summary: '高いパケットドロップ率を検知'

- alert: HTTPErrorRate

expr: |

rate(hubble_http_responses_total{status=~"5.."}[5m])

/ rate(hubble_http_responses_total[5m]) > 0.05

for: 5m

labels:

severity: critical

annotations:

summary: 'HTTP 5xxエラー率が5%を超過'

- alert: DNSLatencyHigh

expr: |

histogram_quantile(0.99, rate(hubble_dns_response_time_seconds_bucket[5m]))

> 0.5

for: 5m

labels:

severity: warning

annotations:

summary: 'DNSレスポンスレイテンシp99が500msを超過'

8. Hubble gRPC API

8.1 API概要

HubbleはgRPC APIを通じてプログラマティックにフローデータにアクセスできます。

// Hubble Observer API(簡略化)

service Observer {

// フローストリーミング

rpc GetFlows(GetFlowsRequest) returns (stream GetFlowsResponse);

// Hubbleサーバー状態

rpc ServerStatus(ServerStatusRequest) returns (ServerStatusResponse);

// ノードリスト

rpc GetNodes(GetNodesRequest) returns (GetNodesResponse);

}

8.2 API使用例

gRPCurlで直接API呼び出し

grpcurl -plaintext localhost:4245 observer.Observer/ServerStatus

フローストリーミング

grpcurl -plaintext -d '{}' localhost:4245 observer.Observer/GetFlows

フィルタ適用

grpcurl -plaintext -d '{

"whitelist": [

{

"source_pod": ["default/frontend"]

}

]

}' localhost:4245 observer.Observer/GetFlows

8.3 カスタム統合

Hubble gRPC API活用事例:

1. カスタムダッシュボード

- 特定のビジネスメトリクス収集

- カスタマイズされた可視化

2. 自動化されたセキュリティ分析

- 異常トラフィックパターン検知

- ポリシー違反自動アラート

3. 監査ログ

- コンプライアンスのためのネットワーク活動記録

- 長期保存のための外部システム連携

4. サービスメッシュ統合

- サービス間レイテンシモニタリング

- エラー追跡と分析

9. パフォーマンス影響とチューニング

9.1 パフォーマンスオーバーヘッド

Hubble有効化に伴うオーバーヘッド:

CPU:

- 基本L3/L4観察:最小オーバーヘッド(約1-2%)

- L7観察(HTTPなど):Envoyプロキシオーバーヘッドに依存

- 高トラフィック環境:フローパースおよびリングバッファ管理

メモリ:

- リングバッファサイズに比例

- デフォルト4095フロー x フロー当たり約500バイト = 約2MB

- 16383フロー:約8MB

ネットワーク:

- RelayへのgRPCストリーミングトラフィック

- 観察クライアント数に比例

9.2 チューニングパラメータ

リングバッファサイズ調整

より多くのフロー保存 = より多くのメモリ使用

--hubble-buffer-size=16383

イベントキューサイズ

--hubble-event-queue-size=0 # 0 = 自動

メトリクス有効化/無効化

必要なメトリクスのみ有効化してオーバーヘッドを最小化

--hubble-metrics=dns,drop,tcp,flow

特定のネームスペースのみモニタリング

--hubble-monitor-events="drop:true;trace:true;l7:true"

L7観察範囲制限

L7ポリシーが適用されたトラフィックのみL7フロー生成

9.3 大規模環境の最適化

大規模クラスタの考慮事項:

1. Relayリソース制限設定

- CPU/メモリリソースリクエスト/リミットを適切に設定

- ノード数が多いほどRelay負荷が増加

2. メトリクスカーディナリティ管理

- ラベルコンテキストを最小化してメトリクス数を管理

- 不要なメトリクスを無効化

3. フロー保持戦略

- リングバッファサイズとトラフィック量のバランス

- 長期保持が必要な場合は外部システムにエクスポート

4. ネットワーク帯域幅

- RelayとAgent間のgRPCトラフィックを考慮

- 大規模観察クエリの影響を制限

10. Hubble活用シナリオ

10.1 トラブルシューティング

Pod間接続問題の診断

hubble observe --from-pod default/app-a --to-pod default/app-b

ドロップされたトラフィックの原因分析

hubble observe --verdict DROPPED --from-pod default/app-a

DNS解決問題の確認

hubble observe --type l7 --protocol dns --from-pod default/app-a

特定のサービスへのトラフィック確認

hubble observe --to-label "app=database" --to-port 5432

10.2 セキュリティ監査

ポリシー違反トラフィックのモニタリング

hubble observe --verdict DROPPED --drop-reason POLICY_DENIED

外部へのイグレストラフィック追跡

hubble observe --to-identity reserved:world

特定ネームスペースのすべてのイングレストラフィック

hubble observe --namespace sensitive-ns --traffic-direction ingress

10.3 パフォーマンスモニタリング

HTTPレスポンス時間の観察

hubble observe --type l7 --protocol http -o json | \

jq '.flow.l7.http.latency'

DNSクエリレイテンシ

hubble observe --type l7 --protocol dns -o json | \

jq '.flow.l7.dns.latency'

TCP接続確立の追跡

hubble observe --protocol tcp --tcp-flags SYN

まとめ

Cilium Hubbleは以下の核心機能でネットワークオブザーバビリティを提供します。

- **ゼロインストルメンテーション**:アプリケーション修正なしにeBPFから自動的にフロー収集

- **多層可視性**:L3/L4ネットワークからL7アプリケーションまで全レイヤー観察

- **リアルタイムストリーミング**:リングバッファとgRPCによるリアルタイムフローストリーミング

- **クラスタ全体の観察**:Hubble Relayを通じたクラスタ全体データ集約

- **可視化**:Hubble UIによるサービストポロジーマップとフロー可視化

- **メトリクス統合**:Prometheus/Grafanaによる時系列メトリクスとアラート

- **プログラマティックアクセス**:gRPC APIによるカスタムツール統合

현재 단락 (1/317)

HubbleはCiliumに内蔵されたネットワークオブザーバビリティプラットフォームで、eBPFデータパスで発生するすべてのネットワークイベントをリアルタイムで収集・分析します。インフラストラクチャに...

작성 글자: 0원문 글자: 10,101작성 단락: 0/317