
CalicoはKubernetesやOpenStack向けのオープンソースなネットワーキング基盤で、BGP(Border Gateway Protocol)を使ってPodのIPを物理ネットワークと素直に統合する点が個性です。2014年に英国のMetaswitch Networks内で生まれ、後にプロジェクトを引き継ぐ形で2016年にTigera社が設立されました。オーバーレイトンネルを基本としないシンプルなIPルーティング、ポリシー機能、IPAMを一通り備えており、オンプレ・パブリッククラウドどちらでも採用される実績豊富なCNIとしてKubernetesエコシステム内で根強い人気を持ちます。
この記事の目次
- Calicoを構成する主要要素
- BGPによるルート広報の仕組み
- NetworkPolicyの記述で意識する点
- Cilium・FlannelとCalicoの位置取り
- まとめ
Calicoを構成する主要要素

Calicoは複数のコンポーネントで構成されています。中心となるのはFelixというノード常駐エージェントで、Kubernetes APIから受け取ったエンドポイント情報やNetworkPolicyをもとに、Linuxのルーティングテーブルやiptables・eBPFのルールを書き換えます。BIRDというOSSのBGPデーモンが各ノードで動き、自ノードが受け持つPodのIPプレフィックスを物理ルータや他ノードへ広報します。
クラスタが数千ノード規模になるとAPIサーバーへの接続数が増えすぎるため、TyphaというプロキシがFelixとAPIサーバーの間に立ち、watchのファンアウトを引き受けてくれます。これにより数百〜数千ノードまでスケールアウトしやすい構成になります。etcdをデータプレーン管理用に使う旧構成と、Kubernetes APIサーバーをそのまま使う新構成(kdd: kubernetes datastore driver)があり、現在はkddが推奨です。それぞれの役割が分離されているため、トラブル時に「どの層で詰まっているのか」を切り分けやすい設計になっています。
BGPによるルート広報の仕組み

Calicoの最大の特徴はBGPでルートを配布することです。Podが生成されると、Felixがそのノード上のCalico IPAMからIPを割り当て、BIRDが「このノードがこのプレフィックスを持っています」とBGPで他ノードや上位ルータに広報します。結果としてPodのIPは物理ネットワークから直接ルーティングできる存在になり、VXLANやIPIPのようなオーバーレイトンネル無しで通信が成立します。
オーバーレイ不要のためパケットに余計なヘッダが付かず、MTUを意識した煩雑な設定がなく性能面でも有利です。ただし「物理ネットワークとBGPピアリングしたい」というネットワーク部門との調整が必要なため、クラウドや小規模クラスタではIPIP・VXLANオーバーレイモードも選択でき、その場合は他のCNIに近い扱いになります。AWSのEKSなどクラウド環境では、VPC CNIと組み合わせてポリシー実装だけCalicoに任せる「Calico for policy」構成もよく見られ、「ルートはAWSが、ポリシーはCalicoが」という分業が一般的になっています。
NetworkPolicyの記述で意識する点

CalicoはKubernetes標準のNetworkPolicy仕様をフル実装するため、まずは標準仕様の範囲でingress/egressルールを書くのが基本です。「frontend Podからbackend PodへのTCP 8080のみ許可」といった典型構成は標準で十分書けます。より強力な制御が必要な場合は、Calico独自のCRDであるGlobalNetworkPolicyやNetworkSetを使い、クラスタ全体への一律ルールやIPアドレス集合の再利用ができます。
egress制御で見落としがちなのがDNSで、Podがクラスタ内サービス名で外部APIを呼ぶ場合、まずCoreDNSへのUDP/53を許可しないと正しいIPに辿り着けません。「TCPの443を許可したのに通らない」という典型障害の多くがDNSルール漏れに起因します。calicoctl get globalnetworkpolicyやcalicoctl node statusといった専用CLIを使うと、適用されているポリシーやBGPピア状態を確認でき、kubectlだけでは追いきれない情報を一覧化できます。本番投入前にこれらの可視化手段に慣れておくと、運用が楽になります。
Cilium・FlannelとCalicoの位置取り

Calicoの位置取りを他CNIと並べると整理しやすくなります。Ciliumがカーネル拡張(eBPF)を主軸に置き、L7まで踏み込んだ細粒度制御や可視化に強いのに対し、CalicoはBGPによる物理ネットワーク統合を伝統的に得意としてきました。Flannelは2014年からあるVXLANオーバーレイ中心のシンプルなCNIで、ポリシー機能は持たないため、Flannel + Calico Policy併用という構成も一時期は人気でした。
現在のCalicoはeBPFモードも備え、Ciliumに対抗できるパフォーマンスを実装しつつ、「BGPで物理と一体化」「オンプレでの実績」「広い対応OS」という従来の強みも維持しています。Tigera社はTigera Calico Enterpriseとして商用版を提供し、可視化やコンプライアンス機能を追加した有償提供も続けています。選定する場合は「ネットワーク部門とBGPを話したいか」「オンプレ重視か」「eBPF統一感重視か」を軸に評価すると判断しやすくなります。
まとめ
Calicoは2014年にMetaswitch内で生まれ、現在はTigera社が主導するOSSのCNI実装です。BGPで物理ネットワークと一体化する伝統的アプローチと、後発のeBPFモードを併せ持ち、オンプレ・クラウドどちらでも採用される選択肢として、Cilium・Flannelと並ぶ大本命の地位を占め続けています。
※本記事はIT用語辞典の手書きドラフトです。公開前に最新情報・出典を確認のうえ加筆修正してください。

コメント