Cilium 詳細解説: Cloud Native Networking の未来
概要
このセクションでは、Cilium のコアコンセプトとテクノロジーを包括的に解説します。Cilium のアーキテクチャ、eBPF テクノロジー、ネットワーキングモデル、セキュリティ機能などを詳しく見ていきます。
サポート対象バージョン: Cilium 1.17, 1.18 Kubernetes 互換性: 1.32 以上 最終更新: February 23, 2026
Cilium 1.18 の主な改善点
Cilium 1.18 では、次の主要な機能改善と新機能が提供されます。
ネットワーキングの改善
- 強化された BGP Control Plane: より柔軟でスケーラブルな BGP 設定
- 改善された Multi-cluster Routing: クラスター間通信パフォーマンスの最適化
- 強化された Service Mesh 統合: Envoy proxy との統合を改善
セキュリティの強化
- 強化された Network Policy: よりきめ細かなポリシー制御とパフォーマンスの向上
- 改善された暗号化オプション: WireGuard および IPsec の暗号化パフォーマンスを最適化
可観測性の改善
- Hubble の改善: より豊富なメトリクスとトレーシング情報
- 強化された Prometheus 統合: 新しいメトリクスとダッシュボード
- 改善されたフローロギング: より詳細なネットワークフロー情報
パフォーマンスの最適化
- eBPF Program の最適化: より高速なパケット処理
- メモリ使用量の改善: 大規模クラスターでのリソース効率を向上
- CPU 使用量の最適化: オーバーヘッドを削減
はじめに
Cilium は、Kubernetes、Docker、Mesos などの Linux コンテナ管理プラットフォーム向けのオープンソースのネットワーキング、セキュリティ、および可観測性ソリューションです。Cilium は eBPF(extended Berkeley Packet Filter)テクノロジーをベースとしており、従来の Linux ネットワーキング手法よりも強力で効率的なネットワーキングおよびセキュリティ機能を提供します。
eBPF とは
eBPF は、Linux kernel 内でサンドボックス化された仮想マシンのように動作するテクノロジーであり、kernel コードを変更せずにプログラムを安全に kernel 内で実行できます。これにより、ネットワークパケット処理、system call の監視、パフォーマンス分析などのさまざまなタスクを効率的に実行できます。
eBPF の主な特性:
- kernel space での実行による高パフォーマンス
- JIT(Just-In-Time)コンパイルによるネイティブパフォーマンス
- 安全な実行環境(verifier によるプログラム検証)
- 動的なロードとアンロードが可能
Cilium の主なメリット
- 高パフォーマンスネットワーキング: eBPF を使用した効率的なパケット処理
- きめ細かな Network Policy: L3-L7 レベルの Network Policy をサポート
- 透過的な暗号化: ノード間での透過的な IPsec または WireGuard 暗号化
- Load Balancing: XDP(eXpress Data Path)ベースの高パフォーマンス Load Balancing
- 可観測性: Hubble によるネットワークフローの可視化
- Service Mesh: 既存の sidecar を使わない L7 トラフィック管理
- Multi-Cluster Networking: クラスター間の透過的な接続性
- BGP サポート: 外部ネットワークとの統合
既存 CNI との比較
| 機能 | Cilium | Calico | Flannel | AWS VPC CNI |
|---|---|---|---|---|
| ネットワークモデル | eBPF | iptables/IPVS | VXLAN/host-gw | AWS ENI |
| Network Policy | L3-L7 | L3-L4 | 制限あり | AWS Security Groups |
| 暗号化 | IPsec/WireGuard | IPsec | なし | なし |
| 可観測性 | Hubble | Flow Logs | 制限あり | VPC Flow Logs |
| Service Mesh | 組み込み | Istio が必要 | Istio が必要 | Istio/AppMesh が必要 |
| パフォーマンス | 非常に高い | 高い | 中程度 | 高い |
| Multi-Cluster | 組み込み | 制限あり | なし | Transit Gateway が必要 |
アーキテクチャ
Cilium は、eBPF ベースの data plane と Kubernetes に統合された control plane で構成されます。
主なコンポーネント
- Cilium Agent: 各ノードで実行され、eBPF Program をロードして管理します
- Cilium Operator: クラスターレベルのリソースと操作を管理します
- eBPF Programs: パケット処理とポリシー適用のために kernel にロードされます
- Hubble: ネットワークフローの監視と可観測性を提供します
- Cilium CLI: Cilium と Hubble 管理のためのコマンドラインツール
ネットワーキングモデル
Cilium は複数のネットワーキングモードをサポートします。
- Direct Routing: ノード間の直接ルーティング(BGP または static routing)
- Tunneling: VXLAN または Geneve tunnel を使用した overlay networking
- AWS ENI: Amazon EKS で Elastic Network Interface(ENI)を使用
- Azure IPAM: Azure AKS で Azure IPAM を使用
パケットフロー
Cilium でパケットが処理される流れ:
- パケットがネットワークインターフェイスに到着
- eBPF XDP Program が初期処理を実行(DDoS 防御、Load Balancing)
- eBPF TC(Traffic Control)Program が Network Policy を適用
- パケットがコンテナの network namespace に配信
- 応答パケットは同様の経路で処理
Amazon EKS との統合
Amazon EKS で Cilium を使用する主な方法は 2 つあります。
- Amazon EKS Add-on としてインストール: Amazon EKS は Cilium をマネージド Add-on として提供します。
- 手動インストール: Helm chart を使用して直接インストールします。
Amazon EKS Add-on としてインストール
# Install Cilium add-on
aws eks create-addon \
--cluster-name my-cluster \
--addon-name cilium \
--addon-version v1.17.0-eksbuild.1 \
--service-account-role-arn arn:aws:iam::123456789012:role/AmazonEKSCiliumAddonRole
# Check add-on status
aws eks describe-addon \
--cluster-name my-cluster \
--addon-name ciliumHelm を使用した手動インストール
# Add Cilium Helm repository
helm repo add cilium https://helm.cilium.io/
# Update Helm repository
helm repo update
# Install Cilium
helm install cilium cilium/cilium \
--version 1.17.0 \
--namespace kube-system \
--set eni.enabled=true \
--set ipam.mode=eni \
--set egressMasqueradeInterfaces=eth0 \
--set tunnel=disabledEKS 固有の設定オプション
EKS で Cilium を使用する際に考慮すべき主な設定オプション:
- ENI Mode: AWS Elastic Network Interface を使用してネイティブ AWS ネットワーキングパフォーマンスを活用
- IPAM Mode: AWS VPC IP address management との統合
- Encryption: ノード間トラフィックの暗号化(WireGuard または IPsec)
- NodeLocal DNSCache: DNS パフォーマンスの向上
- Hubble: ネットワーク可観測性を有効化
ENI Mode の設定
apiVersion: v1
kind: ConfigMap
metadata:
name: cilium-config
namespace: kube-system
data:
enable-endpoint-routes: "true"
auto-create-cilium-node-resource: "true"
ipam: "eni"
eni-tags: "{\"Owner\": \"Cilium\"}"
tunnel: "disabled"
enable-ipv4: "true"
enable-ipv6: "false"
egress-masquerade-interfaces: "eth0"EKS Cluster への Cilium のインストール
既存の EKS Cluster への Cilium のインストール
# Remove AWS CNI
kubectl delete daemonset -n kube-system aws-node
# Install Cilium
cilium install --set eni.enabled=true \
--set ipam.mode=eni \
--set egressMasqueradeInterfaces=eth0 \
--set tunnel=disabledCilium CNI を使用した新しい EKS Cluster の作成
eksctl create cluster --name cilium-cluster \
--without-nodegroup
eksctl create nodegroup --cluster cilium-cluster \
--node-ami-family AmazonLinux2 \
--node-type m5.large \
--nodes 3 \
--max-pods-per-node 110
# Install Cilium
cilium install --set eni.enabled=true \
--set ipam.mode=eni \
--set egressMasqueradeInterfaces=eth0 \
--set tunnel=disabledEKS Cluster の相互接続
Cilium Cluster Mesh を使用した EKS Cluster の相互接続:
# On cluster 1
cilium clustermesh enable --service-type LoadBalancer
# On cluster 2
cilium clustermesh enable --service-type LoadBalancer
# Connect clusters
cilium clustermesh connect --context cluster1 --destination-context cluster2インストールと設定
前提条件
- Kubernetes cluster(v1.16 以上)
- Linux kernel 4.9 以上(推奨: 5.4 以上)
- 設定済みの kubectl
- Helm(任意)
Cilium CLI のインストール
curl -L --remote-name-all https://github.com/cilium/cilium-cli/releases/latest/download/cilium-linux-amd64.tar.gz
sudo tar xzvfC cilium-linux-amd64.tar.gz /usr/local/bin
rm cilium-linux-amd64.tar.gz設定オプション
ネットワーキングモードの設定
Direct routing モード:
cilium install --set tunnel=disabled --set autoDirectNodeRoutes=trueVXLAN モード:
cilium install --set tunnel=vxlankube-proxy replacement の設定
完全置換モード:
cilium install --set kubeProxyReplacement=strict暗号化の設定
WireGuard 暗号化:
cilium install --set encryption.enabled=true --set encryption.type=wireguardIPsec 暗号化:
cilium install --set encryption.enabled=true --set encryption.type=ipsecNetwork Policy
Cilium は Kubernetes NetworkPolicy API を拡張し、L3-L7 レベルでのきめ細かな Network Policy を提供します。
基本的な Network Policy
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-frontend-to-backend
namespace: app
spec:
podSelector:
matchLabels:
app: backend
ingress:
- from:
- podSelector:
matchLabels:
app: frontend
ports:
- port: 8080
protocol: TCPCilium Network Policy
apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:
name: allow-specific-http-methods
namespace: app
spec:
endpointSelector:
matchLabels:
app: backend
ingress:
- fromEndpoints:
- matchLabels:
app: frontend
toPorts:
- ports:
- port: "8080"
protocol: TCP
rules:
http:
- method: "GET"
path: "/api/v1/products"FQDN ベースのポリシー
apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:
name: allow-specific-domains
namespace: app
spec:
endpointSelector:
matchLabels:
app: web
egress:
- toFQDNs:
- matchName: "api.example.com"
- matchPattern: "*.amazonaws.com"
toPorts:
- ports:
- port: "443"
protocol: TCPHubble による可観測性
Hubble は Cilium の可観測性レイヤーであり、eBPF を通じて収集されたネットワークフローデータの可視化と分析を可能にします。
Hubble のインストール
cilium hubble enable --uiネットワークフローの監視
# Observe all flows
hubble observe
# Observe flows in specific namespace
hubble observe --namespace app
# Observe HTTP requests
hubble observe --protocol http
# Observe flows between pods with specific labels
hubble observe --from-label app=frontend --to-label app=backend
# Observe failed connections
hubble observe --verdict DROPPEDPrometheus 統合
cilium hubble enable --metrics="{dns:query;ignoreAAAA,drop:sourceContext=pod;destinationContext=pod,tcp,flow,icmp,http}"Cilium のテスト
# Basic connectivity test
cilium connectivity test
# Run specific test
cilium connectivity test --test=client-to-echo-service
# Network performance test
cilium connectivity test --test=performanceベストプラクティス
パフォーマンスの最適化
- Kernel Version の最適化: Linux kernel 5.4 以上を使用
- BBR Congestion Control を有効化: ネットワークスループットを改善
- XDP Acceleration を有効化: パケット処理パフォーマンスを改善
- MTU の最適化: ネットワーク環境に適した MTU を設定
cilium install --set bpf.preallocateMaps=true \
--set bpf.masquerade=true \
--set devices=eth0 \
--set loadBalancer.acceleration=native \
--set loadBalancer.mode=dsrセキュリティ強化
- Default Deny Policy を適用: 明示的に許可されたトラフィックのみを許可
- Encryption を有効化: ノード間トラフィックを暗号化
- 最小権限の原則を適用: 必要な通信のみを許可するポリシーを設計
可観測性の向上
cilium hubble enable --metrics="{dns,drop,tcp,flow,http}"トラブルシューティング
接続の問題
# Check Cilium status
cilium status
# Check endpoint status
cilium endpoint list
# Review network policies
kubectl get cnp,ccnp -A
# Analyze flows
hubble observe --verdict DROPPEDパフォーマンスの問題
# Check eBPF map status
cilium bpf maps list
# Monitor system resources
cilium metrics listデバッグツール
# Check status
cilium status --verbose
# Collect environment information
cilium sysdump
# Cilium agent logs
kubectl logs -n kube-system -l k8s-app=cilium詳細解説の目次
- Cilium の概要と歴史
- コンテナネットワーキングの基本
- CNI(Container Network Interface)の理解
- Cilium の差別化機能
- eBPF テクノロジーの紹介と歴史
- kernel 内での eBPF の動作
- eBPF Program の種類と Map
- Cilium での eBPF の活用
- コンテナネットワーキングモデルの比較
- VXLAN テクノロジーの詳細解説
- Cilium の Overlay Networking
- パフォーマンス最適化の手法
- ルーティングメカニズム(Encapsulation vs Native-Routing)
- Cloud Provider Networking(AWS ENI、Google Cloud)
- IP Address Management(IPAM)の戦略
- Kubernetes と Cilium IPAM の統合
- Network Policy の設計と実装
- Multi-Cluster シナリオ
- IPAM Mode の詳細解説(Cluster Scope、Kubernetes Host Scope、Multi-Pool)
- Cloud Provider IPAM(Azure IPAM、AWS ENI、GKE)
- CRD ベースの IPAM
L2-L7 Networking と Load Balancing
- OSI Model レイヤー(L2、L3、L4、L7)の理解
- Cilium のレイヤー固有機能
- Service Mesh 統合
- Load Balancing アーキテクチャ
- Masquerading の設定と実装モード
- IPv4 Fragment の処理
- Cilium のセキュリティ機能
- ネットワークの可視性と監視
- Hubble のアーキテクチャと使用方法
- リアルタイム脅威検出
- パフォーマンスチューニングとトラブルシューティング
- 大規模デプロイ戦略
- 実際のユースケーススタディ
- 今後のロードマップと開発の方向性
追加リソース
参考資料
- Cilium 公式ドキュメント
- Cilium GitHub リポジトリ
- eBPF ドキュメント
- Hubble ドキュメント
- Cilium Network Policy Editor
- AWS EKS Workshop - Cilium
クイズ
このセクションで学んだ内容を確認するには、Cilium 詳細解説クイズに挑戦してください。