Cilium with Red Hat OpenShift on IBM Cloud

## 1.はじめに
CNCF（Cloud Native Computing Foundation）で2023年10月11日に卒業（成熟段階）したCiliumについて調査してみました(各種機能をChatGPTで翻訳&要約)。また、既存システムで利用中の機能の中で、Ciliumが活用できそうな部分、特にOpenShift Service Mesh(istio)と比較した検証をしてみたいと思います。

## 2.Ciliumについて
Cilium（シリアム）は、カーネル技術であるeBPFを活用したオープンソースのクラウドネイティブなソリューションで、ワークロード間のネットワーク接続を提供し、セキュリティを確保し、観測するためのものです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176470/02fc2a46-e69e-92d1-8aea-e59cae469d09.png)


#### Networking
|機能|内容|
|:--|:--|
|High Performance Cloud Native Networking (CNI)|KubernetesのCNIは多くはiptablesベースだが、CiliumはeBPFを使用し、大規模なiptablesルールセットの問題を回避し、大規模な環境に最適化。スケーラブルでセキュアなネットワーキングを提供し、クラウドプロバイダー各社も採用|
|Layer 4 Load Balancer|CiliumのXDPとeBPFは、高性能かつ安価なL4ロードバランサーを実現。カーネルレイヤーで動作し、ネットワーク性能とセキュリティを強化、クラウド環境で効果的|
|Cluster Mesh|複数のKubernetesクラスターを一つの統合ネットワークに接続し、高可用性と自動サービス検出を提供。Pod IPルーティングを処理し、トンネリングまたは直接ルーティングを使用するため、ゲートウェイやプロキシは不要でPod間のシームレス通信とネットワークポリシーの拡張を実現|
|Bandwidth and Latency Optimization|帯域幅マネージャーを利用し、Podごとのトラフィック制御を1行のYAMLで実現。BBRアルゴリズムのサポートにより、スループットが最大2,700倍向上。また、BIG TCPを活用し、IPv6のホップバイホップヘッダーで64KB制限を超えた大容量パケットを可能にし、100Gbps以上のネットワークでの効果的な運用を実現|
|Kube-proxy Replacement|IPtablesとkube-proxyを超え、eBPFを活用したクラウドネイティブな環境向けに制御とデータプレーンを構築。5Kノードや100KポッドのKubernetesクラスターで最適化された動作を実現。kube-proxyの代替としてシームレスな移行を提供し、クライアントソースIPの保存やMaglev Consistent Hashingなどの機能でトラフィック制御とパフォーマンスを向上|
|BGP|従来のIPルーティングではクラウド環境での動的な変化に対応できないが、BGPを活用することで、既存ネットワークとシームレスに統合し、高速でスケーラブルなセキュアなルーティング、トラフィック制御を提供|
|Egress Gateway|Podのアウトバウンドトラフィックを特定のノードを経由するように誘導し、予測可能なソースIPを提供。また、ラベルセレクタを使用してポッドごとにトラフィックを制御し、セキュリティポリシーの適用やネットワークコストの管理を支援。マルチテナント環境では、特定のワークロードが特定の外部システムと通信するためのルーティングルールを簡単に構成できる|
|Cilium Service Mesh|従来のサービスメッシュはIPやポートに基づく複雑なネットワークポリシーやパフォーマンスの制限、プロキシによる遅延、既存インフラとの統合課題、スケーラビリティの制約があった。Ciliumサービスメッシュは、eBPFを活用し、カーネルに直接組み込むことで、サイドカープロキシの必要性をなくし、IP、TCP、UDP、HTTP、Kafka、gRPC、DNSなどのプロトコルをより効率的に処理。IngressやGateway APIから、Istio、Envoy CRDなど、柔軟な制御プレーンを提供|
|Gateway API|CiliumのGateway API実装は、Ingressの制限を超えた高度なルーティング機能を提供し、HTTP/HTTPS以外のプロトコルもサポート。異なるユーザーロールに合わせたアクセス制御を可能にし、ネットワーキング、観測、セキュリティツールを統合して操作を簡素化|

#### Observability
|機能|内容|
|:--|:--|
|Service Map|HubbleはeBPFに依存し、サービス依存関係、通信マップ、ネットワークおよびアプリケーションの監視、セキュリティ可視化など、幅広い監視機能を提供。これにより、適切な視覚化やデータフローの管理を可能にし、トラブルシューティングを迅速かつ効果的に行える|
|Metrics & Tracing Export|Kubernetesのパフォーマンスと振る舞いを監視し、PrometheusメトリクスやHubbleのネットワーク動作で可視性を提供。JaegerやZipkinなどのトレーシングと統合し、分散トレーシングも可能。リアルタイムでネットワークパフォーマンスを追跡し、アプリケーションの遅延やエラー率などのメトリクスを捉える|
|Identity-aware L3/L4/DNS Network Flow Logs|ネットワークフローログを強化し、Kubernetesワークロードに関するアイデンティティ情報を含む拡張メタデータを提供します。これにより、ネットワークトラフィックを特定のワークロードに追跡しやすくし、セキュリティインシデントの特定や迅速な対応を可能にする|
|Advanced Network Protocol Visibility|Ciliumのプロトコル認識型の可視性はTLS、gRPC、Kafka、DNS、HTTPなど様々なアプリケーションプロトコルをネイティブに理解し、API特定のエンドポイントや外部エンドポイントのDNSアイデンティティなどを詳細に監視。HubbleはKubernetes用のeBPFベースの観測プラットフォームで、Cilium CNIとeBPFテクノロジーを活用してネットワークトラフィックとアプリケーション動作を詳細に可視化。これにより、カスタムメトリックの作成や複雑なネットワーク問題のトラブルシューティングが可能になる|

#### Security
|機能|内容|
|:--|:--|
|Transparent Encryption|Ciliumは、追加プロキシやアプリ変更なしに全ノード間のトラフィックを簡単に暗号化できるソリューションを提供。自動キーローテーションや効率的なIPsec/WireGuardを活用し、UDPを含むすべてのトラフィックを暗号化。共通キーの設定のみで全通信が暗号化される|
|Advanced Network Policy|L3/L4のKubernetesネットワークポリシーを実装し、HTTP、Kafka、gRPCなどの一般的なプロトコルに対するL7ポリシーを拡張。例えば、role=frontendのエンドポイントはGET /userdata/[0-9]+のREST API呼び出しのみを許可し、role=backendの他のAPIインタラクションは制限される。複数クラスターにまたがるネットワークポリシーや、クラスターワイドポリシーも提供|
|Runtime Enforcement|Tetragonは、eBPF技術を活用して透過的なセキュリティ観測とリアルタイムの実行時制御を実現。アプリケーションの変更不要で深い可視性を提供し、低負荷を実現。カーネル内のフィルタリングと集計ロジックを活用し、Kubernetesの個々のワークロードに紐づけて適合したセキュリティイベントを検出。システムコール制御を含むさまざまな強制レベルでのアクセス制御機能を提供|

参照:
https://cilium.io/

 ## 3.Cilium Service Meshの検証
 <準備中>