Member-only story
Kubernetes Multi-Cluster Networking -Cilium Cluster Mesh(前半)
Cilium Cluster Meshについてです。長い記事なので、2つに分けてお送りしています。今回は前半です。Cilium CNIについてなどです。
ダイナミックに変化し、非常に複雑なマイクロサービスのエコシステムの時代には、従来のIPやポートの管理は、管理やスケーリングの観点から問題を引き起こす可能性があります。Ciliumは、Linuxカーネル内でデータを転送するために使用できるBPFを使用しており、Kubernetesの Service-based Load Balancingやistioのようなサービスメッシュのためにプロキシインジェクションを介して使用されることがあります。
BPF (Berkeley Packet Filter)は1992 年に考案されました。パケットをフィルタリングし、カーネルからユーザスぺ―スへの無駄なパケットコピーを回避してくれます。拡張 BPF (eBPF) は、10 個のレジスタや 1~8 バイトのロード/ストア命令などのリソースを強化した BPF (現在では cBPF と呼ばれていますが、これは「 classical BPF(従来の BPF)」 の略です) を拡張したものです。BPF には前方ジャンプがあるのに対し、eBPF には
ループを作ることができ、もちろんカーネルは確実に終了します。
今日、x86_64、arm64、ppc64、s390などのアーキテクチャは、eBPFプログラムからネイティブのオペコードイメージをコンパイルする機能を持っており、カーネル内のeBPFインタプリタを介して実行する代わりに、結果のイメージを他のカーネルコードと同じようにネイティブに実行することができます。tc は kernelのネットワークデータパスにプログラムをインストールしますが、有能な NIC を使えば、プログラムをハードウェアに完全にオフロードすることもできます。
Kubernetes は CNI のコアとして iptables を使用しています。iptablesには、大規模で多様なトラフィック状況下で問題となる重大な問題があります。 iptableのルールは順次マッチングされ、iptablesへの更新は、非常にダイナミックなコンテナスペースに収まらない可能性がある単一のトランザクションで、すべてのルールを再作成して更新することによって行われなければなりません。パケットがテーブルの下位部分のルールに頻繁にヒットする場合は特にパフォーマンスが低下します。一方、BPFはルールセット全体を反復処理するのではなく、「最も近い 」ルールに対してマッチングされるため、ネットワークポリシーの実装には最適です。
Ciliumがあれば、ユーザーがすべてのレイヤーを使用するか、必要に応じてレイヤーのみを選択して使用するかを選択できるレイヤー(pod-ipルーティング、サービスディスカバリー、ロードバランシングな…