Project calico introduction - OpenStack最新情報セミナー 2017年7月

24
Project Calico Introduction Jul 26, 2017 Yuji Azama NEC Solution Innovators, ltd Okinawa Open Laboratory

Transcript of Project calico introduction - OpenStack最新情報セミナー 2017年7月

Page 1: Project calico introduction - OpenStack最新情報セミナー 2017年7月

Project Calico Introduction

Jul 26, 2017

Yuji Azama

NEC Solution Innovators, ltd

Okinawa Open Laboratory

Page 2: Project calico introduction - OpenStack最新情報セミナー 2017年7月

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/

代表 理事長 伊藤 幸夫

Page 3: Project calico introduction - OpenStack最新情報セミナー 2017年7月

Okinawa Open Laboratory 3

自己紹介

本名

安座間 勇二 (あざま ゆうじ)

出身地

沖縄県

所属

2014入社~2017/03

NECソリューションイノベータ 東京本社

2017/04~現在

同社 沖縄支社

これまでの沖縄オープンラボでの活動

Service Chaining PJ メンバー (2014~2015)

ThinkIT「OpenDaylightを始めよう!」

Page 4: Project calico introduction - OpenStack最新情報セミナー 2017年7月

Okinawa Open Laboratory 4

本日お話したいこと

Project Calico Introduction

Project Calicoとは?

Calicoの仕組み

Calicoデータセンターファブリックをどう組むか

Calicoコミュニティについて

Page 5: Project calico introduction - OpenStack最新情報セミナー 2017年7月

Okinawa Open Laboratory 5

Project Calicoとは

Page 6: Project calico introduction - OpenStack最新情報セミナー 2017年7月

Okinawa Open Laboratory 6

Calico Cat = 三毛猫

Page 7: Project calico introduction - OpenStack最新情報セミナー 2017年7月

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を公開

Page 8: Project calico introduction - OpenStack最新情報セミナー 2017年7月

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)

Page 9: Project calico introduction - OpenStack最新情報セミナー 2017年7月

Okinawa Open Laboratory 9

Calicoのアプローチ

ピュアなL3ルーティングベースの技術でVM/コンテナ/ベアメタル(および混在環境)に対してネットワーキングを提供する

経路情報の伝播手段としてBGPを利用する

LinuxのForwarding Information Base(FIB)でルーティングを提供する

iptablesでネットワークポリシーを提供する

Page 10: Project calico introduction - OpenStack最新情報セミナー 2017年7月

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の経路広告

経路情報読込み/書込み

経路情報読込み/書込み

経路情報書込み

経路情報書込み

Page 11: Project calico introduction - OpenStack最新情報セミナー 2017年7月

Okinawa Open Laboratory 11

Calicoのメリット

Performance

オーバーレイのカプセル化が発生しないためパフォーマンスが優れている

Simple

使い慣れたtracerouteやpingでデバッグできる

Scalable

データセンターNWが、BGPを使用したインターネットと同じ原理で構築できるためスケーラビリティに優れている

L2通信で発生していたARPブロードキャストを抑制できる

DC間のネットワーク延伸が実現しやすい (L2延伸が不要)

Secure

VMやコンテナに対して、トラフィックの方向やIPアドレス、ポート番号などのネットワークポリシー制限が行える

Page 12: Project calico introduction - OpenStack最新情報セミナー 2017年7月

Okinawa Open Laboratory 12

Calicoの仕組み

Page 13: Project calico introduction - OpenStack最新情報セミナー 2017年7月

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

Page 14: Project calico introduction - OpenStack最新情報セミナー 2017年7月

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へ広告③’ 経路情報広告

Page 15: Project calico introduction - OpenStack最新情報セミナー 2017年7月

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代理応答

Page 16: Project calico introduction - OpenStack最新情報セミナー 2017年7月

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

ルートリフレクターなし ルートリフレクターあり

Page 17: Project calico introduction - OpenStack最新情報セミナー 2017年7月

Okinawa Open Laboratory 17

Calicoデータセンターファブリックをどう組むか

Page 18: Project calico introduction - OpenStack最新情報セミナー 2017年7月

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

Page 19: Project calico introduction - OpenStack最新情報セミナー 2017年7月

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スイッチのルーティングテーブルサイズの上限を考慮する

Page 20: Project calico introduction - OpenStack最新情報セミナー 2017年7月

Okinawa Open Laboratory 20

(参考) Calicoで気になること

L2レスによる問題

L2でDiscovery機能を使うアプリケーションが動かなくなるが回避策はあるか

BUMトラフィックの扱いはどうなっているのか

セキュリティ

テナント分離はできるか

Calicoのネットワークポリシーだけで十分か

BIRDルーティングテーブルの肥大化

ワークロードのパフォーマンスに影響を与えないか

BIRDのルーティングテーブル検索のパフォーマンスに影響が出ないか

スケーラビリティ

BGPだからスケーラブルと言ってもルーターのルート数に上限があるのではないか

SNMPは動作するか

FWやLBがある環境で動作するか

Page 21: Project calico introduction - OpenStack最新情報セミナー 2017年7月

Okinawa Open Laboratory 21

Project Calico Community

Page 22: Project calico introduction - OpenStack最新情報セミナー 2017年7月

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/

Page 23: Project calico introduction - OpenStack最新情報セミナー 2017年7月

Thank you!

OOLでCalico検証の参加者絶賛募集中!

ぜひお声かけください!

Page 24: Project calico introduction - OpenStack最新情報セミナー 2017年7月

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実例