Cilium

KubernetesでCiliumとHubble UIを導入・設定する完全ガイド

ⓘ本ページはプロモーションが含まれています

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


スポンサードリンク

前提条件とインストール環境の準備

Kubernetes クラスタと CLI ツール(kubectl, helm)が 対応バージョン であることを最初にチェックします。これにより、Cilium がサポートする Kubernetes バージョン範囲外での不具合を防げます。

kubectl と Helm のバージョン確認方法

まずはクライアント側とサーバー側の両方を確認してください。

kubectl version の出力例

サーバーの gitVersion1.24〜1.28 の範囲に入っていることを必ず確認し、公式ドキュメント(https://docs.cilium.io/en/stable/observability/hubble/setup/)と照らし合わせてください。

ローカルクラスター構築 (kind / minikube)

ローカル環境は 軽量でリセットが容易 なことから、開発・検証に最適です。以下では kindminikube の両方の手順を示します。

kind クラスターの作成と LoadBalancer 対応

kind はデフォルトで LoadBalancer タイプの Service を外部に公開できません。そのため MetalLB などのロードバランサ実装を併用するか、代替として NodePort を使用します。ここでは最もシンプルな NodePort + ポートマッピング の例を示します。

ポイント
extraPortMappingskind が内部で Docker コンテナを起動しているため、ホストマシンのポートとコンテナ側ポートを結びつけます。
本番環境では MetalLB など正式な LoadBalancer 実装に置き換えることが推奨されます。

minikube クラスターの作成

minikube--driver=docker(デフォルト)でも LoadBalancer が自動的に NodePort に変換されるため、特別な設定は不要です。


Hubble UI のデプロイとアクセス設定

このセクションでは Helm Chart を用いた Hubble UI のインストール と、外部からのアクセス手段(Ingress / port‑forward)を解説します。

Helm Chart の取得と values.yaml カスタマイズ例

公式リポジトリを追加し、デフォルトの values.yaml を取得した上で必要な項目だけを書き換えます。

hubble-values.yaml に追記すべき主な設定

項目 推奨値 / コメント
ui.service.type NodePort(kind/minikube では LoadBalancer が機能しないため)
ui.service.nodePort 任意のポート (例: 30080)。extraPortMappings と合わせる
ui.relay.enabled true(Relay 経由でメトリクス取得)
ui.relay.address hubble-relay.hubble.svc.cluster.local:4245
ingress.enabled 必要に応じて true。外部 DNS と TLS がある場合のみ有効化
ingress.hosts[0].host 本番環境の FQDN(例: hubble.example.com
ingress.tls[0].secretName 事前に作成した TLS シークレット名

デプロイコマンドと namespace 対策

Helm はデフォルトで対象の Namespace が存在しないとエラーになります。--create-namespace オプションを付与して自動作成させるか、事前に kubectl create ns してください。

デプロイ完了後は以下でリソースが正しく作成されたか確認します。

アクセス方法:Ingress と port‑forward の使い分け

手段 特徴 推奨シーン
Ingress TLS 終端やホスト名でのルーティングが可能。外部 DNS が必要。 本番環境・複数サービス共存時
port‑forward 手軽にローカルから確認できる。一時的なデバッグ向き。 ローカル開発・トラブルシュート

port‑forward の実行例

Ingress 設定例(NGINX Ingress Controller 前提)


ダッシュボード外観のカスタマイズ

デフォルトテーマはシンプルですが、社内ブランディングやユーザー体験向上のために テーマ・ロゴ・日本語化 を行うケースが多いです。

テーマ・ロゴ差し替え ConfigMap 設定例

ui.configMap にキー/バリューを格納するだけで UI が自動的に更新されます。プラグインバイナリなどの大容量ファイルは ConfigMap ではなく PersistentVolume または init コンテナ を利用してください。

ConfigMap を作成したら Deployment の再起動で反映させます。

日本語化設定と環境変数

Hubble UI は LANG または HUBBLE_UI_LANG 環境変数で言語を切り替えられます。日本語リソースは公式イメージに同梱されているので、以下のように values に追記してください。

独自翻訳が必要な場合は ui.customTranslations ConfigMap に JSON 形式でキー/バリューを追加し、マウントパス /etc/hubble-ui/translations/custom.json を指定します。JSON の構造は公式サンプルと 完全一致 必要です(ドキュメント参照)。


Grafana との統合手順

Cilium が出力する Prometheus メトリクスを Grafana に取り込むことで、ネットワーク可視化が容易になります。ここでは データソース設定公式ダッシュボードのインポート手順 を示します。

Prometheus データソースの追加方法

Grafana UI で以下を実行してください。

  1. Configuration → Data Sources → Add data source
  2. 種類に Prometheus を選択
  3. URL に http://cilium-prometheus.cilium.svc:9090(クラスタ内部 DNS)または外部公開エンドポイントを入力
  4. Access は Server、他項目はデフォルトのままで Test & Save

注意:Grafana が別 Namespace にある場合は cilium-prometheus.cilium.svc:9090 へ名前解決できるよう ServiceAccount の RBAC を確認してください。

公式ダッシュボードのインポート手順と ID 確認

2024年10月時点で Cilium/Hubble 用に公開されている Grafana ダッシュボードは ID 16613(旧 ID 16612 は非推奨)です。最新情報は https://grafana.com/grafana/dashboards/16613 を必ず確認してください。

  1. Grafana UI → Create → Import
  2. 「Import via grafana.com」欄に 16613 と入力し Load
  3. データソース選択画面で先ほど作成した Prometheus ソースを指定して Import

インポート完了後、左上の Refresh ボタンでリアルタイムデータが表示されます。変数 namespacepod が自動的にクラスタ情報と連携し、フィルタリングが容易です。


カスタム機能拡張と運用ベストプラクティス

本番環境で長期運用する際は Relay のカスタムフィルタHelm 管理の徹底セキュリティ設定 が鍵になります。

Relay プラグインの実装と配置方法(バイナリは ConfigMap に格納しない)

Relay は gRPC ベースのプラグインを外部バイナリとして読み込めますが、Kubernetes では ConfigMap に大容量バイナリを入れない のがベストプラクティスです。代わりに以下の2通りが推奨されます。

  1. init コンテナでバイナリを取得し、EmptyDir にコピー
  2. Docker イメージにプラグインを組み込み、Sidecar としてマウント

例:init コンテナ方式

hubble-relay-config ConfigMap(バイナリ参照のみ)

この構成なら ConfigMap にバイナリを格納しない ため、サイズ制限や文字エンコーディングの問題を回避できます。

Helm 管理のベストプラクティス(values の外部化・helmfile)

Helm のアップグレード時に手動で values を書き換えると設定が失われやすいです。以下は Git 管理された values ファイルhelmfile によるデプロイ例です。

変更があれば git commit で履歴化し、以下コマンドで安全に適用します。

セキュリティ強化ポイント:RBAC・TLS・OIDC

項目 推奨設定例
RBAC (最小権限) yaml<br>apiVersion: rbac.authorization.k8s.io/v1<br>kind: Role<br>metadata:<br> name: hubble-ui-reader<br> namespace: kube-system<br>rules:<br>- apiGroups: [""]<br> resources: ["pods","services"]<br> verbs: ["get","list"]<br>
TLS 終端 (Ingress) Ingress の tls 設定で証明書を指定し、Service は ClusterIP に限定。外部からは Ingress が TLS を終端するだけにします。
OIDC 認証 (NGINX) yaml<br>metadata:<br> annotations:<br> nginx.ingress.kubernetes.io/auth-url: "https://sso.example.com/oauth2/auth"<br> nginx.ingress.kubernetes.io/auth-signin: "https://sso.example.com/oauth2/start?rd=$request_uri"<br>
ネットワークポリシー NetworkPolicy で UI Pod へのアクセスは Ingress コントローラの Namespace のみ許可。

これらを組み合わせることで、外部からの不正アクセスや権限昇格リスクを大幅に低減できます。


まとめ

  • kubectl/helm バージョンKubernetes サーバーバージョン を必ず確認し、Cilium のサポート範囲内か検証する。
  • ローカル環境では LoadBalancer が使えないため、NodePort + extraPortMappings もしくは MetalLB を利用する。
  • Helm デプロイ時は --create-namespace オプションで Namespace の自動作成を忘れずに。
  • Ingress と port‑forward の使い分けや、Grafana ダッシュボード ID(2024年は 16613)の最新確認を徹底する。
  • Relay プラグインは ConfigMap にバイナリを格納しない 設計にし、init コンテナかサイドカーで提供する。
  • 運用では helmfile + Git 管理, RBAC/ TLS / OIDC の3層防御を実装して安全性を確保する。

本ガイドが Cilium と Hubble UI の導入・運用の一助となれば幸いです。質問や環境固有の課題があれば、公式 Slack(cilium.io/slack)や GitHub Discussions で共有してください。

スポンサードリンク

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


-Cilium