コンテンツにスキップ

Cilium@ネットワーク系

はじめに

本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。


01. Ciliumの仕組み

アーキテクチャ

Ciliumは、Ciliumエージェント、Cilium CNI、から構成される。


Ciliumエージェント

▼ Ciliumエージェントとは

コンテナ上のプロセスは、コンテナのカーネルに対してシステムコールを実行する。

Ciliumエージェントは、システムコールのイベントが発生した時にeBPFを実行し、Ciliumの処理をフックする。

これにより、Ciliumはシステムコールのテレメトリーを収集できる。


Cilium CNI

▼ Cilium CNIとは

KubernetesのデフォルトのCNIと衝突するため、これを無効化する必要がある。

デフォルトのCNIを無効化すると、このCNIとkube-proxyがCilium CNIに置き換わる。

▼ Istioとの連携

Cilium CNIとistio-proxyコンテナを組み合わせて、トラフィックを制御する。

Ciliumのサービスメッシュ機能は、あくまでCiliumの中で一機能としてでしかない。

そのため、IstioとCilium CNIであれば連携できる。

  • Istio + kube-proxy + 従来のCNI
  • Istio + Cilium CNI
  • Ciliumサービスメッシュ + Cilium CNI
  • Ciliumサービスメッシュ + Istio (CiliumサービスメッシュとIstioが部分的に競合するので、どちらかのサービスメッシュで設定の無効化が必要) + Cilium CNI

IstioとCiliumサービスメッシュの間で競合する機能 (例えば、L7のトラフィック管理) については、以下の箇所に対処方法がある。

しかし、全体としてかなり複雑な設定になりそうです


02. Ciliumサービスメッシュ

Ciliumサービスメッシュの仕組み

Ciliumエージェント上ではEnvoyプロセスが動いている。

マイクロサービス間の通信時には、eBPFではなくEnvoyを使用する。

なお、Ciliumサービスメッシュは前提としてCilium CNIを必要とする。

そのため、Istioのように、既存のKubernetesのネットワークを残したままサービスメッシュを導入することはできない。


通信の暗号化

Node上のPod間の通信をIPSecやWireGuardで暗号化する。

cilium-service-mesh_tls