Calico について調べたメモ

Masaaki Hirotsu
mhiro2
Published in
3 min readJun 6, 2018

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 を有効化した状態で使用する必要がある。

参考

--

--

Masaaki Hirotsu
mhiro2
Editor for

見習いエンジニアの学習記録。Kaggleはじめました@mhiro2