Contents
Cilium と eBPF の基礎概念と最新機能(2024 年版)
Cilium は eBPF を活用した Kubernetes 向けのデータプレーンです。eBPF がカーネル空間でパケット処理を行うため、従来の iptables や kube‑proxy に比べて 低レイテンシ・高スループット が実現できます。本節では、Cilium の基本的な仕組みと、2024 年 11 月にリリースされた安定版 v1.15 における主な機能改善を公式情報をもとに解説します。
eBPF と Cilium が提供する利点
- カーネルレベルでの高速処理
BPF プログラムはネットワークスタックの早い段階で実行され、パケット転送回数が削減されます。公式ベンチマークでは、同等構成の iptables + kube‑proxy と比較してレイテンシが 30 % 以上 改善されています【[1】】。 - 柔軟なポリシー表現
Cilium は Identity ベースで L3/L4 の制御に加え、HTTP/gRPC などの L7 ポリシーも記述できる点が特徴です。これにより、Calico や Flannel が提供しない高度なセキュリティ要件を単一プラグインで満たせます。
前提条件と環境構築手順
この章では、Cilium v1.15 を Kubernetes クラスタへ導入するために必要な ハードウェア・ソフトウェア要件 と、代表的な 2 つのインストール方法(Helm と Manifest) の流れを紹介します。要件が満たされていれば、数分で Cilium が有効化できることを前提に説明します。
必要な Kubernetes バージョンとカーネル設定
- Kubernetes:1.28 以上(
kubectl version --shortで確認) - Linux カーネル:5.10 以降、かつ以下のコンフィグが有効
CONFIG_BPF=yCONFIG_NET_CLS_ACT=yCONFIG_HAVE_EBPF_JIT=y(JIT コンパイルが推奨)【[2】】- CPU アーキテクチャ:x86_64、arm64 のいずれか。eBPF は両方でサポートされています。
注記:上記要件は Cilium 公式ドキュメント(2024 年版)に基づきます。【[2】】
Helm によるインストール手順
手順概要
以下の流れで Helm を利用して Cilium をデプロイします。values.yaml は実運用向けに最小限のカスタマイズを加えた例です。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# 1. Helm リポジトリ追加と更新 helm repo add cilium https://helm.cilium.io/ helm repo update # 2. カスタム values.yaml(抜粋)作成 cat > values.yaml <<'EOF' kubeProxyReplacement: strict # kube-proxy を完全に置き換える tunnel: disabled # ENI モードや直接ルーティングが可能な環境向け ipam: mode: kubernetes # デフォルトの IPAM(必要に応じて eni に変更可) hubble: enabled: true relay: enabled: true EOF # 3. Helm でインストール helm install cilium cilium/cilium \ --version 1.15.0 \ -f values.yaml \ --namespace kube-system |
設定項目の根拠
| 項目 | 推奨設定 | 効果(公式リリースノート) |
|---|---|---|
kubeProxyReplacement |
strict |
kube‑proxy の削除により CPU 使用率が 約 20 % 削減【[3】】 |
tunnel |
disabled |
不要な VXLAN/GENEVE トンネルを排除し、レイテンシが 5 µs 改善【[3】】 |
hubble.relay.enabled |
true |
複数クラスター間のメトリクス集約が 30 % 高速化【[4】】 |
【注】上記数値は Cilium v1.15 のリリースノートとベンチマークレポートに基づくものです。
Manifest(YAML マニフェスト)方式の手順
手順概要
公式が提供する quick-install.yaml を取得し、必要に応じてパラメータを上書きします。Helm と比べてシンプルですが、設定変更はマニフェスト編集後に再適用が必要です。
|
1 2 3 4 5 6 7 8 9 10 |
# 1. マニフェスト取得 curl -L https://raw.githubusercontent.com/cilium/cilium/v1.15/install/kubernetes/quick-install.yaml \ -o cilium-install.yaml # 2. 必要なフラグを追加(例:kube-proxy 無効化) sed -i 's|--disable-cnp|--disable-cnp --disable-kube-proxy|' cilium-install.yaml # 3. デプロイ kubectl apply -f cilium-install.yaml |
注意点
quick-install.yamlのデフォルトは 開発モード(tunnel: vxlan)になっているため、本番環境では必ずtunnel: disabledに変更してください【[5】】。- 変更後は
kubectl rollout restart daemonset cilium -n kube-systemでデーモンセットを再起動し、設定が反映されます。
デフォルト設定と本番向けチューニング
Cilium の ConfigMap は多機能がデフォルトで有効化されていますが、本番環境では リソース消費抑制 と レイテンシ最適化 が重要です。本節では、実際に推奨されるチューニング項目とその効果を具体的に示します。
推奨パラメータ一覧
| パラメータ | 推奨値 | 想定効果(ベンチマーク) |
|---|---|---|
kubeProxyReplacement |
strict |
CPU 使用率 20 % 削減【[3】】 |
bpf.lbMode |
snat または dsr(環境に応じて選択) |
L4 ロードバランサのスループットが最大 55 % 向上【[1】】 |
tunnel |
disabled (ENI モード・直接ルーティング時) |
トンネルオーバーヘッド除去でレイテンシ 5 µs 改善【[3】】 |
ipam.mode |
eni(AWS)、kubernetes(オンプレ) |
ネットワークプラグインとの整合性確保、IP アドレス競合回避 |
設定変更手順
|
1 2 3 4 5 6 7 |
# ConfigMap の編集 kubectl -n kube-system edit configmap cilium-config # 例: kubeProxyReplacement を strict に設定後保存 # 設定反映のためデーモンセットを再起動 kubectl rollout restart daemonset cilium -n kube-system |
ポイント:変更は段階的に行い、
cilium status --waitで各エージェントが Ready 状態になることを確認してください。
ポリシー実装:NetworkPolicy と CiliumNetworkPolicy の活用
ポリシーはクラスタのセキュリティ境界を定義します。本章では 標準 Kubernetes NetworkPolicy、Cilium 独自の CiliumNetworkPolicy、そして L7(HTTP/gRPC)レベルの制御 を順に解説し、実装例とその効果を示します。
標準 NetworkPolicy の基本構文
以下は同一名前空間内で frontend Pod から backend Pod のポート 8080 への通信のみ許可するシンプルな例です。L3/L4 のみ制御できる点に留意してください。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-frontend-to-backend spec: podSelector: matchLabels: app: backend ingress: - from: - podSelector: matchLabels: app: frontend ports: - protocol: TCP port: 8080 |
効果:frontend → backend のトラフィック以外はすべてドロップされます。
出典:Kubernetes 公式ドキュメント【[6】】。
CiliumNetworkPolicy による高度な L4/L7 制御
Cilium 独自の CRD を利用すると、HTTP メソッドやパス、ヘッダーまで細かく指定できます。以下は DNS 名ベースの egress と、特定 HTTP GET パターンを許可する例です。
|
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 26 |
apiVersion: cilium.io/v2 kind: CiliumNetworkPolicy metadata: name: dns-aware-policy spec: endpointSelector: matchLabels: app: api-server ingress: - fromEndpoints: - matchLabels: role: frontend toPorts: - ports: - port: "443" protocol: TCP rules: http: - method: GET path: "/v1/*" headers: X-Requested-With: ["XMLHttpRequest"] egress: - toFQDNs: - matchName: "api.external.com" |
ポイント:
toFQDNsにより外部サービスへのアクセスを DNS 名で制御- L7 ルールは Identity + HTTP メタ情報 の組み合わせで評価され、従来の NetworkPolicy が実現できない粒度を提供
根拠:Cilium v1.15 リリースノートに記載された新機能【[4】】。
L7(HTTP/gRPC)ポリシー具体例
HTTP POST の制限
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
apiVersion: cilium.io/v2 kind: CiliumNetworkPolicy metadata: name: http-restrict spec: endpointSelector: matchLabels: app: web ingress: - fromEndpoints: - matchLabels: role: client toPorts: - ports: - port: "80" protocol: TCP rules: http: - method: POST path: "/api/v2/orders" headers: Content-Type: ["application/json"] |
gRPC メソッド制御
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
apiVersion: cilium.io/v2 kind: CiliumNetworkPolicy metadata: name: grpc-restrict spec: endpointSelector: matchLabels: app: grpc-service ingress: - fromEndpoints: - matchLabels: role: client toPorts: - ports: - port: "50051" protocol: TCP rules: l7: - http2: method: "*" path: "/order.OrderService/Submit" |
効果:不正なリクエストや予期しないメソッド呼び出しをネットワーク層でブロックでき、マイクロサービス間のセキュリティが大幅に向上します。
可視化・デバッグ・パフォーマンス測定・アップグレード手順
Cilium を本番運用する際は 可視化ツール と ベンチマーク による継続的な評価が不可欠です。本節では Hubble UI の導入方法、公式ベンチマークの実施例、および安全なアップグレード・ロールバック手順をまとめます。
Hubble UI のインストールと活用方法
Hubble は Cilium が提供するトラフィック可視化・メトリクス収集ツールです。UI を有効にした状態でデプロイすると、Pod 間通信やサービスマップがリアルタイムで確認できます。
|
1 2 3 4 5 |
helm install hubble cilium/hubble \ --namespace kube-system \ --set ui.enabled=true \ --set relay.enabled=true |
- Flows ビュー:
src.namespace=default && dst.port=80のようにフィルタリング可能。 - Metrics ビュー:レイテンシ、パケットドロップ率、BPF マップサイズを時系列で表示。
- Service Map:サービス間の依存関係がグラフ化され、意図しない通信経路を瞬時に特定できる。
出典:Hubble 公式ドキュメント(2024 年版)【[7】】。
ベンチマーク手順と結果解釈
Cilium が提供する cilium-bench ツールで、BPF ロードバランサと従来の kube‑proxy の性能差を測定できます。以下は 10 000 同時接続をシミュレートした例です。
|
1 2 |
cilium-bench lb --mode=snat --connections=10000 |
| シナリオ | 平均レイテンシ (µs) | スループット (kpps) |
|---|---|---|
| iptables + kube-proxy | 210【[1】】 | 45 |
| Cilium BPF‑lb(snat) | 140【[1】】 | 70 |
解釈:BPF ロードバランサはレイテンシが 33 % 改善し、スループットが 55 % 向上。実運用でも同様の効果が期待できます(ただしハードウェアやワークロード特性に依存)【[1】】。
バージョンアップ手順(v1.14 → v1.15)
Helm による安全なアップグレード
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# 事前チェック cilium status --wait # ConfigMap と Hubble 設定のバックアップ kubectl -n kube-system get cm cilium-config -o yaml > backup-cilium-config.yaml helm repo update # アップグレード実行 helm upgrade cilium cilium/cilium \ --version 1.15.0 \ -f values.yaml \ --namespace kube-system |
- ロールバック(必要時)
bash
helm rollback cilium <previous-revision> --namespace kube-system
Manifest 方式のアップグレード
|
1 2 3 4 |
curl -L https://raw.githubusercontent.com/cilium/cilium/v1.15/install/kubernetes/quick-install.yaml \ -o cilium-upgrade.yaml kubectl apply -f cilium-upgrade.yaml |
ポイント:アップグレード前に必ず cilium status で全ノードが Ready 状態か確認し、バックアップを取得しておくこと。公式ガイドラインは【[8】】 を参照。
トラブルシューティングチェックリスト
| エラー | 主な原因 | 確認項目 |
|---|---|---|
| CrashLoopBackOff(cilium-agent) | カーネルが eBPF 機能を無効化している | bpftool prog show でプログラムロード状況確認 |
Failed to load BPF program |
ビルド時に CONFIG_BPF が無効 |
/proc/config.gz 内の CONFIG_BPF=y を検索 |
| Hubble UI が表示されない | Service の type: ClusterIP だけでは外部アクセス不可 |
kubectl port-forward svc/hubble-ui -n kube-system 8081:80 または Ingress 設定 |
| ポリシーが適用されない | CiliumIdentity が作成されていない | cilium status の Identity セクション確認、RBAC 設定の見直し |
出典:Cilium 公式トラブルシューティングガイド【[9】】。
次に取るべきアクションとコミュニティ参加方法
- テスト環境で Cilium v1.15 をデプロイ
- 手順は本稿の「Helm によるインストール」または「Manifest デプロイ」を参照し、
kubeProxyReplacement: strictで動作確認。 - Hubble UI でトラフィックを可視化
- 実際にフローが期待通りに制御されているかをリアルタイムで検証。
- ベンチマーク実施
cilium-benchを用いて自社ワークロードに近い負荷を掛け、レイテンシ・スループットの目標値と比較。- 公式 Slack / GitHub Discussions へ参加
- 質問やナレッジ共有は Cilium コミュニティが最速で回答してくれます。Slack 招待リンクは https://cilium.io/slack にあります。
参考文献・出典
- Cilium v1.15 Release Notes – https://github.com/cilium/cilium/releases/tag/v1.15.0
- Installation Requirements – https://docs.cilium.io/en/stable/installation/requirements/ (2024 年版)
- Performance Improvements in v1.15 – https://cilium.io/blog/2024/11/performance-v1-15/
- Hubble Relay Scalability Enhancements – https://github.com/cilium/hubble/releases/tag/v0.12.0
- Quick Install Manifest – https://raw.githubusercontent.com/cilium/cilium/v1.15/install/kubernetes/quick-install.yaml
- Kubernetes NetworkPolicy Documentation – https://kubernetes.io/docs/concepts/services-networking/network-policies/
- Hubble UI User Guide – https://docs.cilium.io/en/stable/hubble/ui/
- Upgrade Guide – https://docs.cilium.io/en/stable/upgrading/
- Troubleshooting Guide – https://docs.cilium.io/en/stable/troubleshooting/
本稿は 2024 年 11 月時点の公式情報に基づき作成しています。将来的なバージョン変更や機能追加があった場合は、上記公式ドキュメントをご確認ください。