Calico について調べたメモ
Calico の中身を全く理解していなかったので、調べたついでにメモを残しておく。
前書き
Kubernetes の CNI plugin としてよく使われる flannel は、VXLAN を用いた Layer 2 ベースのオーバレイネットワーク (L2 over L3) を構成する。この方式は、柔軟なネットワークを構成できる代わりに、IPIP/GRE などのカプセル化によるパフォーマンス低下のトレードオフが存在する。
Calico は BGP を用いた Layer 3 ネットワーク、即ち IP ベースのルーティングで workload 間の接続を実現しており、上記の問題を解決することができる。
公式では、Calico の特徴として下記の3つが挙げられている。
- Simple
cloud-native なアプリケーションに合わせて単純化したネットワーキングモデルを使用 - Scalable
完全に分散されたスケールアウト指向のアーキテクチャであるため、開発環境から大規模なエンタープライズ環境まで柔軟にスケールできる - Secure
workload ごとにポリシーを設定できるため、 micro-segmentation が実現でき、攻撃の影響範囲を最小化できる
Calico for Kubernetes
Kubernetes で Calico を利用する場合、下記の3つの pod が作成される。
calico-etcd-xxx
Calico の 設定を格納する etcd
calico-kube-controllers-xxx
node の状態を監視し、変更を etcd に反映
calico-node-xxx
DaemonSet として各 node に作成される。 calico-node 内には以下のコンポーネントが含まれる。
- Felix
node 内の pod のインタフェース情報を管理し、ルーティングテーブルや ACL (iptables) を設定 - confd
etcd 内に保存されている BGP データから BIRD 用の設定ファイルを作成 - BIRD
Felix が生成したルーティングテーブルを BGP によって他の node に配信
ネットワーク構成
同一 AS 内を対象とする iBGP (Internal BGP) では、ルーティングループを防ぐために iBGP ピア同士はフルメッシュトポロジを形成する必要がある。そのため、大規模なネットワークを構築する場合、ピアリングの負荷が非常に高くなってしまう問題がある。
この対策としてルートリフレクタが有用であることが知られており、Calico でも利用することができる。以下のスライドが参考になる。
補足
Calico では IPIP によるトンネリングがデフォルトで有効化されている。
Our manifests enable IPIP by default. If you disable IPIP, you won’t need to allow IPIP traffic. Refer to Configuring IP-in-IP for more information.
パブリッククラウド環境では、送信元/宛先の IP をチェックして覚えのないトラフィックを破棄する場合があるため、 IPIP を有効化した状態で使用する必要がある。