Project calico introduction - OpenStack最新情報セミナー 2017年7月
-
Upload
virtualtech-japan-inc -
Category
Technology
-
view
1.022 -
download
0
Transcript of Project calico introduction - OpenStack最新情報セミナー 2017年7月
Project Calico Introduction
Jul 26, 2017
Yuji Azama
NEC Solution Innovators, ltd
Okinawa Open Laboratory
Okinawa Open Laboratory 2
沖縄オープンラボラトリ 概要
名称 一般社団法人 沖縄オープンラボラトリ (略称:沖縄オープンラボ、OOL 等)
目的 情報通信における先進技術(次世代ICT基盤技術)の実用化、普及のための研究開発活動
⇒クラウドとSDNの検証活動を会員企業と実施
設立 2013年5月8日 NTTコミュニケーションズ、NEC 、イイガの3社にて設立
所在地 〒904-2241 沖縄県うるま市字兼箇段61番地1沖縄情報通信センター ビジネス棟201号
電話:098-989-1940
Web:http://www.okinawaopenlabs.org/
Facebook:http://www.facebook.com/okinawaopenlabs/
代表 理事長 伊藤 幸夫
Okinawa Open Laboratory 3
自己紹介
本名
安座間 勇二 (あざま ゆうじ)
出身地
沖縄県
所属
2014入社~2017/03
NECソリューションイノベータ 東京本社
2017/04~現在
同社 沖縄支社
これまでの沖縄オープンラボでの活動
Service Chaining PJ メンバー (2014~2015)
ThinkIT「OpenDaylightを始めよう!」
Okinawa Open Laboratory 4
本日お話したいこと
Project Calico Introduction
Project Calicoとは?
Calicoの仕組み
Calicoデータセンターファブリックをどう組むか
Calicoコミュニティについて
Okinawa Open Laboratory 5
Project Calicoとは
Okinawa Open Laboratory 6
Calico Cat = 三毛猫
Okinawa Open Laboratory 7
Project Calico
どんなPJか?
OpenStack VMやコンテナに対してL3ルーティングベースのネットワーキング機能を提供するOSSプロジェクト
Apache 2.0 license
最新バージョンはv2.3で、リリースは不定期
歴史
2014 MetaswitchがProject Calicoを発表
2016 MetaswitchとCoreOSがTigera社を設立CalicoとFlannelを統合したCanalを公開
Okinawa Open Laboratory 8
Calicoが対応しているプロジェクト
OpenStack
Neutron ML2 PluginとしてCalicoを使用でき、OpenStackのネットワーキングとして動作(networking-calico)
Kubernetes
KubernetesのAddonとしてFlannelがVxLANを使用するのに対して、CalicoはL3ルーティングネットワークとネットワークポリシーを提供 (CNI Network plugin)
Docker
Docker network pluginとして動作し、ルーティングとネットワークポリシーを提供(libnetwork plugin)
Mesos
CalicoがMesosに対してIPネットワーキングとセキュリティポリシーを提供(CNI Network plugin)
rkt
Calicoがrktコンテナにネットワーキングとネットワークポリシーをサポート(CNI Network plugin)
Okinawa Open Laboratory 9
Calicoのアプローチ
ピュアなL3ルーティングベースの技術でVM/コンテナ/ベアメタル(および混在環境)に対してネットワーキングを提供する
経路情報の伝播手段としてBGPを利用する
LinuxのForwarding Information Base(FIB)でルーティングを提供する
iptablesでネットワークポリシーを提供する
Okinawa Open Laboratory 10
Calicoにおけるルーティング情報の伝達
FelixがCalico Node内のVM/コンテナの経路情報をFIBに登録する
BIRDがFIBを読込み、他Calico NodeとBGPで経路交換する受け取った経路を自NodeのFIBに書込む
Calico Node
BIRD
VMbVMa
FIB
Felix
Calico Node
BIRD
VMdVMc
FIB
Felix
BGP PeerVMc, VMdの経路広告VMa, VMbの経路広告
経路情報読込み/書込み
経路情報読込み/書込み
経路情報書込み
経路情報書込み
Okinawa Open Laboratory 11
Calicoのメリット
Performance
オーバーレイのカプセル化が発生しないためパフォーマンスが優れている
Simple
使い慣れたtracerouteやpingでデバッグできる
Scalable
データセンターNWが、BGPを使用したインターネットと同じ原理で構築できるためスケーラビリティに優れている
L2通信で発生していたARPブロードキャストを抑制できる
DC間のネットワーク延伸が実現しやすい (L2延伸が不要)
Secure
VMやコンテナに対して、トラフィックの方向やIPアドレス、ポート番号などのネットワークポリシー制限が行える
Okinawa Open Laboratory 12
Calicoの仕組み
Okinawa Open Laboratory 13
Compute Host
FelixBIRD
WorkloadWorkloadWorkload
FIB
Compute Host
FelixBIRD
WorkloadWorkloadWorkload
FIB
Compute Server(calico node)
FelixBIRD
WorkloadWorkloadWorkload
FIB
Calicoアーキテクチャ
Felix (プロセス名: calico-felix)
Workload(※)が動作する全ホストに常駐するエージェント
etcdからWorkload情報を受取り経路情報とACLを設定する
BIRD (プロセス名: bird, bird6)
Calico Node間で経路情報を交換するルーティングデーモン
FIBを監視しWorkloadの経路を検出/広告する
Etcd またはEtcd Proxy(プロセス名: etcd)
Calicoのデータストア
OpenStack環境ではOpenStackデータベースのミラー
Orchestrator Plugin
OpenStackやKubernetesなどのプラグイン
E.g. networking-calico, calico CNI Plugin
Etcd
Orchestrator Plugin
※ Calicoで言うWorkloadとはCalicoネットワークによって接続されるVMやコンテナなどのこと
BGP Peer
IPTables
IPTables
IPTables
Okinawa Open Laboratory 14
動作の流れ (OpenStackの場合)
Compute Node
etcd
Felix(calico-agent)
neutron-server(networking-calico)
Forwarding Information Base (FIB)
IPTables
BIRDBIRD
BIRDRoute Reflector ① VM情報(Iface, MAC, IP, SG Rule)書込み
③
経路情報書込み
①’ 経路情報読込み(2sec ポーリング)
② VM情報(Iface, MAC, IP, SG Rule)読込み(10sec ポーリング)
③
ACL設定書込み
④ ステータス読込み④
ステータス読込み
⑥ ステータス読込み
⑤ ステータス書込み
②’ 経路情報をRRへ広告③’ 経路情報広告
Okinawa Open Laboratory 15
CalicoにおけるARP解決
Proxy ARP
Proxy ARPとは、他のデバイス宛のARP要求に対して、本来の問合せ先に代わってARP応答する機能
CalicoにおけるProxy ARPの動作
Calicoにおいては、宛先IPのVMに代わってCalico NodeがARP代理応答を行う
VM自身のtapのMACアドレスを学習する
Calico Node
VM
FIB
VM
eth0 eth0
tap tap
$ arp? (192.0.2.1) at fe:16:3e:ec:bd:62 [ether] on eth0? (192.0.2.5) at fe:16:3e:ec:bd:62 [ether] on eth0? (192.0.2.10) at fe:16:3e:ec:bd:62 [ether] on eth0
VM内のARP Table
VMのtapのMACアドレス
ARP要求
ARP代理応答
Okinawa Open Laboratory 16
各ノードがルーターなのでフルメッシュでBGPピアが張られる
大規模化するとピアリングの負荷が高くなる (コネクション数、メッセージ数)
ルートリフレクターを利用した経路広告
iBGPピアのフルメッシュを回避できる
BGPにおけるスケーラビリティ
ルートリフレクター
Calico Node
BIRD
Calico Node
BIRD
Calico Node
BIRD
Calico Node
BIRD
Calico Node
BIRD
Calico Node
BIRD
Calico Node
BIRD
Calico Node
BIRD
ルートリフレクターなし ルートリフレクターあり
Okinawa Open Laboratory 17
Calicoデータセンターファブリックをどう組むか
Okinawa Open Laboratory 18
Calico L3 Fabricの例
L3スパインスイッチ
ToR間のフルメッシュピアを回避しスケーラビリティを確保
ラック単位のASデザイン
ラック単位にASを構成することで、Calico Node単位にASを構成するよりAS数を削減できる
ToR L3SW
Calico Node
Calico Node
Calico Node
Calico Node
Calico Node
Calico Node
ToR L3SW
Calico Node
Calico Node
Calico Node
Calico Node
Calico Node
Calico Node
ToR L3SW
Calico Node
Calico Node
Calico Node
Calico Node
Calico Node
Calico Node
ToR L3SW
Calico Node
Calico Node
Calico Node
Calico Node
Calico Node
Calico Node
ToR L3SW
Calico Node
Calico Node
Calico Node
Calico Node
Calico Node
Calico Node
…
AS XRouter
AS YRouter
AS ZRouter
eBGP Peer
Spine
AS A AS B AS C AS D AS N
Okinawa Open Laboratory 19
Calicoデータセンターのデザインで考慮すること
BGPのASデザイン
BGPのPrivate AS番号には限りがある
2Byte Private AS → 64512~65534の1,023個
AS枯渇の懸念がある場合には4Byte ASを使うことも可能(RFC6793)
4Byte Private AS → 4200000000~4294967294の94,967,295個
BGPピア数
BGPピア数が増えるとルーターの負荷が高くなるので大規模化が難しくなってくる
ルートリフレクターの導入
各NW機器のルーティングテーブルサイズ
スパインスイッチ/ToRスイッチのルーティングテーブルサイズの上限を考慮する
Okinawa Open Laboratory 20
(参考) Calicoで気になること
L2レスによる問題
L2でDiscovery機能を使うアプリケーションが動かなくなるが回避策はあるか
BUMトラフィックの扱いはどうなっているのか
セキュリティ
テナント分離はできるか
Calicoのネットワークポリシーだけで十分か
BIRDルーティングテーブルの肥大化
ワークロードのパフォーマンスに影響を与えないか
BIRDのルーティングテーブル検索のパフォーマンスに影響が出ないか
スケーラビリティ
BGPだからスケーラブルと言ってもルーターのルート数に上限があるのではないか
SNMPは動作するか
FWやLBがある環境で動作するか
Okinawa Open Laboratory 21
Project Calico Community
Okinawa Open Laboratory 22
Project Calico Community
Project Calico Documentation
http://docs.projectcalico.org/
Source Code
Project Calico Organization @GitHub
Project OwnerはMetaswitch
https://github.com/projectcalico/
Calico Users @Slack
参加人数: 約1,300人
https://calicousers.slack.com/
Thank you!
OOLでCalico検証の参加者絶賛募集中!
ぜひお声かけください!
Okinawa Open Laboratory 24
Hypervisor #2 (Compute2)Hypervisor #1 (Controller + Compute1)
VM2 (cirros) VM1 (cirros)
eth0eth0
$ arpAddress HWtype HWaddress Flags Mask Iface192.0.2.10 ether fa:16:3e:03:a3:35 CM tap3be12409-03Compute2(192.168.122.11) ether 52:54:00:61:49:20 C enp0s3192.168.122.1 ether 52:54:00:28:dd:eb C enp0s3
$ routeKernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Ifacedefault 192.168.122.1 0.0.0.0 UG 0 0 0 enp0s3192.0.2.4 compute2 255.255.255.255 UGH 0 0 0 enp0s3192.0.2.10 * 255.255.255.255 UH 0 0 0 tap3be12409-03192.168.122.0 * 255.255.255.0 U 0 0 0 enp0s3
tap3be12409-03 tapd9b9894d-8b
$ ip addr show tapd9b9894d-8b
22: tapd9b9894d-8b: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether fe:16:3e:ec:bd:62 brd ff:ff:ff:ff:ff:ffinet6 fe80::261:feff:feed:cafe/64 scope link
valid_lft forever preferred_lft forever
$ ip addr show tap3be12409-03
23: tap3be12409-03: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether fe:16:3e:03:a3:35 brd ff:ff:ff:ff:ff:ffinet6 fe80::261:feff:feed:cafe/64 scope link
valid_lft forever preferred_lft forever
$ ip addr show eth02: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether fa:16:3e:03:a3:35 brd ff:ff:ff:ff:ff:ffinet 192.0.2.10/24 brd 192.0.2.255 scope global eth0inet6 fe80::f816:3eff:fe03:a335/64 scope link
valid_lft forever preferred_lft forever
$ arp? (192.0.2.4) at fe:16:3e:03:a3:35 [ether] on eth0? (192.0.2.1) at fe:16:3e:03:a3:35 [ether] on eth0
$ routeKernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Ifacedefault 192.0.2.1 0.0.0.0 UG 0 0 0 eth0192.0.2.0 * 255.255.255.0 U 0 0 0 eth0
$ ip addr show eth02: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether fa:16:3e:ec:bd:62 brd ff:ff:ff:ff:ff:ffinet 192.0.2.4/24 brd 192.0.2.255 scope global eth0inet6 fe80::f816:3eff:feec:bd62/64 scope link
valid_lft forever preferred_lft forever
$ arp? (192.0.2.1) at fe:16:3e:ec:bd:62 [ether] on eth0? (192.0.2.10) at fe:16:3e:ec:bd:62 [ether] on eth0
$ routeKernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Ifacedefault 192.0.2.1 0.0.0.0 UG 0 0 0 eth0192.0.2.0 * 255.255.255.0 U 0 0 0 eth0
$ arpAddress HWtype HWaddress Flags Mask Iface192.0.2.4 ether fa:16:3e:ec:bd:62 CM tapd9b9894d-8bCompute1(192.168.122.10) ether 52:54:00:22:2f:5a C enp0s3192.168.122.1 ether 52:54:00:28:dd:eb C enp0s3
$ routeKernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Ifacedefault 192.168.122.1 0.0.0.0 UG 0 0 0 enp0s3192.0.2.4 * 255.255.255.255 UH 0 0 0 tapd9b9894d-8b192.0.2.10 compute1 255.255.255.255 UH 0 0 0 enp0s3192.168.122.0 * 255.255.255.0 U 0 0 0 enp0s3
enp0s3
192.168.122.0/24
enp0s3
(参考) Multi Node OpenStack with Calico
Routing Table, ARP Table実例