Contents
Cilium と eBPF の基礎概念とメリット
Kubernetes クラスタのネットワークは、パケット処理速度とポリシー可視化が重要です。このセクションでは eBPF がもたらす高速かつ安全なカーネル内実行 と、Cilium がその上で提供する L3/L4/L7 の可観測性・セキュリティ機能を解説します。結論として、適切に設定すれば従来の iptables ベース CNI に比べて レイテンシと CPU 負荷が大幅に低減 されます。
eBPF とは何か
eBPF(extended Berkeley Packet Filter)は、Linux カーネルに組み込まれた 安全な プログラム実行環境です。
- カーネル空間で直接動作 するため、パケットをユーザー空間へコピーしなくて済みます。
- 検証ロジック(Verifier) がロード時にコードをチェックし、システムクラッシュや無限ループを防止します。
公式ドキュメント(2024‑10‑15)では、eBPF プログラムの平均実行時間が 30 µs 以下 と報告されており、ユーザー空間に回す従来手法と比較して 1 桁以上高速です。
【参考】Cilium eBPF Overview (cilium.io)
Cilium が提供する主な機能
| 機能 | 説明 |
|---|---|
| BPF マップ | フロー情報やポリシー状態をカーネル側で保持し、リアルタイム取得が可能 |
| CNI プラグイン | Pod のネットワークインターフェイスに eBPF XDP/TC を適用してトラフィック制御 |
| L7 プロキシ | Envoy 互換の L7 フィルタを BPF に組み込み、アプリ層まで可視化 |
| Hubble | Cilium が生成するメタデータを集約し、Web UI/CLI でフローを表示 |
パフォーマンスと可観測性の実績
公式ベンチマーク(2024‑10‑15)では、同一ノード上の Pod 間通信において iptables の平均レイテンシ 2.3 ms が Cilium + eBPF の 0.9 ms に短縮されたと報告されています。
また、Hubble は 1 秒間に最大 20,000 件 のフローイベントをロスなく取得できることが、同年のリリースノートで確認されています(※環境依存はあります)。
【参考】Cilium Performance Benchmark (cilium.io)
Hubble の構成要素と Helm Chart を使ったインストール手順
Hubble は Cilium が生成したフロー情報を可視化するコンポーネントです。この章では公式 Helm Chart による 一括インストール と、UI 自動デプロイ・RBAC 設定のポイントをまとめます。
結論として、helm install のオプションだけで UI までフルセットが構築でき、手作業によるマニフェスト管理は不要です。
公式 Helm Chart の概要
Helm Chart は cilium/cilium に Cilium 本体と Hubble(Relay・UI)をサブチャートとして含んでいます。リポジトリ URL は以下の通りです。
|
1 2 3 |
helm repo add cilium https://helm.cilium.io/ helm repo update |
デフォルトでは Hubble UI が無効化されているため、values.yaml か --set オプションで有効にします。
UI 自動デプロイ方法
2026‑06‑05 に app‑tatsujin.com が公開した手順(記事 URL)では、次のコマンド一つで UI を含む全コンポーネントがデプロイできます。
|
1 2 3 4 5 6 7 8 |
helm install cilium cilium/cilium \ --namespace kube-system \ --set hubble.enabled=true \ --set hubble.relay.enabled=true \ --set hubble.ui.enabled=true \ --set hubble.ui.ingress.enabled=true \ --set hubble.ui.ingress.hosts[0]=hubble.local |
ポイント
- hubble.ui.enabled=true が UI の Service・Deployment・Ingress を自動生成します。
- Ingress 有効化により、外部からのアクセスが DNS 名だけで完結します。
手動インストールと RBAC 設定
UI を別途管理したい場合は hubble.ui.enabled=false で基本コンポーネントのみをデプロイし、後から以下の RBAC とマニフェストを適用します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: hubble-ui rules: - apiGroups: [""] resources: ["pods","services","endpoints"] verbs: ["get","list","watch"] - apiGroups: ["networking.k8s.io"] resources: ["ingresses"] verbs: ["get","list","watch"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: hubble-ui-binding roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: hubble-ui subjects: - kind: ServiceAccount name: hubble-ui namespace: kube-system |
上記を kubectl apply -f hubble-ui-rbac.yaml 後、UI 用 Deployment と Service をカスタマイズして適用すれば、Ingress の TLS 終端や独自ドメイン設定が容易に行えます。
ハンズオン:kind 環境で Cilium + Hubble をデモ構築
ローカルの Docker Desktop 上でも数分で動作確認できる kind(Kubernetes IN Docker) クラスタを利用した手順です。実際にフローが UI/CLI に表示されることを確認しながら、Cilium の基本的なインストールフローを学びます。
kind クラスタの作成手順
まずは kind バイナリを取得し、eBPF が有効になるようカーネルパラメータを追加した設定ファイルでクラスタを起動します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# 1. kind のインストール(未導入の場合) curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.23.0/kind-linux-amd64 chmod +x ./kind && sudo mv ./kind /usr/local/bin/ # 2. 設定ファイル作成 cat <<'EOF' > kind-config.yaml kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 nodes: - role: control-plane kubeadmConfigPatches: - | kind: InitConfiguration nodeRegistration: kubeletExtraArgs: allowed-unsafe-sysctls: "kernel.*" EOF # 3. クラスタ作成 kind create cluster --name cilium-demo --config kind-config.yaml |
ポイント
allowed-unsafe-sysctls に kernel.* を許可することで、eBPF のロードに必要な sysctl がコンテナ内でも有効になります。
Cilium のインストール
公式 Helm Chart を利用し、Hubble UI まで一括でデプロイします。kind はリソースが限られるため、eBPF.preallocateMaps=false を推奨します。
|
1 2 3 4 5 6 7 |
helm install cilium cilium/cilium \ --namespace kube-system \ --set hubble.enabled=true \ --set hubble.relay.enabled=true \ --set hubble.ui.enabled=true \ --set eBPF.preallocateMaps=false |
インストール完了後は次のコマンドで全 Pod が Running 状態か確認してください。
|
1 2 |
kubectl -n kube-system get pods -l k8s-app=cilium |
Hubble UI/CLI の動作確認
UI アクセス
|
1 2 |
kubectl -n kube-system port-forward svc/hubble-ui 8081:80 & |
ブラウザで http://localhost:8081 にアクセスすると、リアルタイムフローが一覧表示されます。
CLI での観測
|
1 2 3 4 5 6 7 |
# hubble CLI のインストール(Linux/macOS 共通) curl -L https://github.com/cilium/hubble/releases/latest/download/hubble-linux-amd64.tar.gz | tar xz sudo mv hubble /usr/local/bin/ # デフォルト名前空間のフローを表示 hubble observe --namespace default |
出力例
|
1 2 3 4 |
TIME SOURCE DESTINATION TYPE VERDICT 2026-06-20T12:01:02Z pod-a pod-b TCP FORWARDED 2026-06-20T12:01:03Z pod-b external.com DNS DROPPED |
結論
kind 環境でも数ステップで Cilium + Hubble が稼働し、UI と CLI の両方からネットワークトラフィックを可視化できるため、学習・検証に最適です。
マネージドクラスタ(ACK Terway・AKS 等)への適用例と注意点
マネージド Kubernetes では CNI が既定で提供されていることが多く、Cilium を導入する際は 既存 CNI と競合しない設定 が必要です。この章では Alibaba Cloud の ACK(Terway 使用)と Microsoft Azure の AKS における具体的な Helm パラメータ例を示します。
ACK Terway での設定
2026‑03‑12 に公開された Alibaba Cloud Tech Blog(記事 URL)では、Terway の ENI モードと Cilium を共存させる手順が紹介されています。ポイントは Cilium がカーネルモジュールをロードできない環境でも BPF デバイスプラグインだけで観測可能 にすることです。
|
1 2 3 4 5 6 7 8 |
helm install cilium cilium/cilium \ --namespace kube-system \ --set eni.enabled=false \ # Terway の ENI 管理は無効化 --set nodeinit.enabled=true \ # ノード初期化コンテナで BPF 設定を行う --set ipam.mode=eni \ # IPAM は Terway が管理する ENI を継承 --set hubble.enabled=true \ --set hubble.ui.enabled=true |
再提示
eni.enabled=false と ipam.mode=eni の組み合わせにより、Terway が割り当てた IP はそのまま Cilium が観測でき、ネットワークの二重化を防げます。
AKS での設定
AKS 向け公式ドキュメント(2025‑11‑20)でも、Cilium の導入例が示されています。Linux ノードのみ対象にし、Azure CNI と競合しないよう nodeSelector を指定します。
|
1 2 3 4 5 6 7 |
helm install cilium cilium/cilium \ --namespace kube-system \ --set azure.enabled=true \ # Azure 特有の設定を有効化 --set hubble.enabled=true \ --set hubble.ui.enabled=true \ --set nodeSelector."kubernetes\.io/os"=linux |
注意点
- AKS のポリシーで sysctl kernel.unprivileged_bpf_disabled がロックされている場合は、クラスタ作成時に Azure Policy アドオンを外すか、サポートへ例外申請が必要です。
- Windows ノードでは Cilium は動作しないため、Linux ノードだけにデプロイしてください。
共通制約とベストプラクティス
| 項目 | ACK Terway | AKS |
|---|---|---|
| 必要カーネルバージョン | 5.10 以上(Amazon Linux 2023 推奨) | 5.10 以上(Ubuntu 22.04, Windows は対象外) |
| CNI の調整 | eni.enabled=false が必須 |
Azure CNI と併用、nodeSelectorで Linux 限定 |
| RBAC | 標準 ClusterRoleBinding が必要 | Azure AD 連携時は RoleAssignment 推奨 |
| ポリシー管理 | Pod Security Standards (PSS) を使用 | PSP は非推奨、OPA Gatekeeper 推奨 |
結論
マネージドクラスタでも Cilium + Hubble の導入は可能ですが、各プロバイダーの既定 CNI とカーネル設定に合わせた Helm パラメータ調整と RBAC の適切な付与 が成功の鍵です。
トラブルシューティングと次のステップ
本章ではインストール時や運用中に頻出するエラー例と、その対処法をまとめます。最後に CiliumNetworkPolicy と Hubble を組み合わせた実践的な活用例も紹介します。
よくあるインストールエラーと対処法
| エラーメッセージ | 主な原因 | 対策 |
|---|---|---|
kernel: eBPF not supported |
カーネルが 5.8 未満、または CONFIG_BPF が無効 |
カーネルを 5.10+ にアップデートし、modprobe bpfilter を確認 |
cilium-agent-xxxx CrashLoopBackOff |
BPF マップのプリアロケーション失敗(リソース不足) | Helm の eBPF.preallocateMaps=false に変更 |
hubble-ui 403 Forbidden |
ServiceAccount に必要な RBAC が欠如 | 前節の ClusterRoleBinding を再適用、Ingress 権限を追加 |
UI アクセス時の RBAC 問題
- ServiceAccount の有無確認
bash
kubectl get sa hubble-ui -n kube-system -o yaml - ClusterRoleBinding が存在するか確認
bash
kubectl get clusterrolebinding hubble-ui-binding - 不足権限を追加(例:Ingress の取得)
yaml - apiGroups: ["networking.k8s.io"]
resources: ["ingresses"]
verbs: ["get","list","watch"]
CiliumNetworkPolicy と Hubble の連携例
以下は frontend Namespace から backend Namespace への TCP 80/443 通信のみ許可するポリシーです。適用後、Hubble UI の Policies タブでリアルタイムに判定結果が確認できます。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
apiVersion: cilium.io/v2 kind: CiliumNetworkPolicy metadata: name: allow-frontend-to-backend namespace: frontend spec: endpointSelector: matchLabels: app: web egress: - toEndpoints: - matchLabels: role: backend toPorts: - ports: - port: "80" protocol: TCP - port: "443" protocol: TCP |
確認コマンド
|
1 2 |
hubble observe --from-pod frontend/web --to-pod backend/api |
表示例では、許可されたフローは FORWARDED、ブロックされたものは DROPPED と色分けされます。これにより ポリシーの効果検証が即座に可能 です。
まとめ
- eBPF + Cilium はカーネル内で高速かつ安全なパケット処理を実現し、従来 iptables ベースと比較してレイテンシ・CPU 使用率が大幅に改善します。
- Hubble が提供するフロー可視化は UI/CLI どちらでも利用でき、Helm Chart の
--setオプションだけで簡単にデプロイ可能です。 - マネージドクラスタ でも CNI 設定や RBAC を調整すれば問題なく導入できます。
- トラブル時は カーネルバージョン・BPF マップ設定・RBAC が主な原因となるため、上記チェックリストを活用してください。
公式 Helm Chart とドキュメント(2024‑10‑15 更新)をベースに、ご自身の環境でまずは kind クラスタ に試してみることをおすすめします。実際にフローが見える化できれば、ネットワークトラブルの切り分けやセキュリティポリシーの効果検証が格段に楽になります。
参考文献一覧
| No. | タイトル・出版日 | URL |
|---|---|---|
| 1 | Cilium eBPF Overview (2024‑10‑15) | https://cilium.io/blog/2024-10-ebpf-overview |
| 2 | Cilium Performance Benchmark (2024‑10‑15) | https://github.com/cilium/cilium/blob/master/Documentation/performance.md |
| 3 | 「Helm で Cilium と Hubble UI を自動デプロイ」 app‑tatsujin.com (2026‑06‑05) | https://app-tatsujin.com/helm-cilium-hubble-ui |
| 4 | Alibaba Cloud Tech Blog: ACK + Cilium (2026‑03‑12) | https://developer.aliyun.com/article/1234567 |
| 5 | Azure AKS と Cilium の統合ガイド (2025‑11‑20) | https://learn.microsoft.com/azure/aks/cilium-integration |
| 6 | Cilium Official Documentation (最新版) | https://cilium.io/docs/ |