Slide 1

Slide 1 text

Cloud Foundry Container-to-Container Networking

Slide 2

Slide 2 text

Pivotal Japan - Platform Architect Kazuto Kusama @jacopen

Slide 3

Slide 3 text

Microserviceしてますか? Four Blair Services Pvt. Ltd. https://commons.wikimedia.org/wiki/File:Services4.png

Slide 4

Slide 4 text

機能ごとにソフトウェアを細分化 開発チームも機能単位

Slide 5

Slide 5 text

いままでのCFだと・・・ appA appB appC appD appA appD ` Router DB MQ Cell Cell Cell HTTPのエンドポイントが Router経由になってしまう

Slide 6

Slide 6 text

コンテナ間で直接通信したい! appA appB appC appD appA appD Router DB MQ Cell Cell Cell

Slide 7

Slide 7 text

そこで

Slide 8

Slide 8 text

Container-to-Container Networking

Slide 9

Slide 9 text

Container-to-Container Networking • Cloud Foundryでコンテナ間通信を可能にする新機能 • 最近GAになりました! • 最新版は1.1.0 • Pivotal Cloud Foundryだと1.11から GAとして提供

Slide 10

Slide 10 text

利用方法 • BOSHでcf-networking-releaseをセットアップ https://github.com/cloudfoundry-incubator/cf-networking-release • UAAでnetwork.adminのscopeを有効化 • ドキュメントはこちら https://docs.cloudfoundry.org/devguide/deploy-apps/cf- networking.html

Slide 11

Slide 11 text

さっそくDEMO

Slide 12

Slide 12 text

ざっくりとした仕組みの説明

Slide 13

Slide 13 text

Architecture https://github.com/cloudfoundry-incubator/cf-networking-release/blob/develop/docs/diagram.png 青: 元からある仕組み 緑: 新しく追加された仕組み 赤: 差し替え可能

Slide 14

Slide 14 text

https://github.com/cloudfoundry-incubator/cf-networking-release/blob/develop/docs/diagram.png

Slide 15

Slide 15 text

CNI • Container Network Interface • CNCF(Cloud Native Computing Foundation)によって 策定されている、コンテナネットワーキングのための 仕様 • Cloud Foundryの他、KubernetesやMesos、rkt ・・・要はDocker以外 で使われている

Slide 16

Slide 16 text

Container Runtime Container Network Interface Loopback Plugin Bridge Plugin PTP Plugin MAC VLAN Plugin 3rd-party Plugin

Slide 17

Slide 17 text

Silk • CNI準拠のContainer Networking fabric • VXLANを使ってホスト間の通信を行う • Flannelにインスパイアされて作られている • 初期はFlannelを利用。etcdが嫌でRDBを使うように 作り直したらしい

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

Garden-runc Garden External Networker CF Wrapper CNI Plugin Silk CLI Plugin Linux コンテナランタイム Garden External Networker API CNI API Legacy Networking NetIn(NAT from Host) NetOut(Application Security Group) Silk daemon Silk Controller diego cell IPAM iptables netlink などなど設定

Slide 21

Slide 21 text

Garden-runc Garden External Networker CF Wrapper CNI Plugin Silk CLI Plugin Linux コンテナランタイム Garden External Networker API CNI API Legacy Networking NetIn(NAT from Host) NetOut(Application Security Group) Silk daemon Silk Controller diego cell IPAM iptables netlink などなど設定 Silk controllerが Cellにsubnetを 払い出す Wrapper Pluginが Port forwardingや ASGを設定 veth pairの作成 etc...

Slide 22

Slide 22 text

cf allow-access myapp backend-app --port 7000 --protocol tcp Policyの設定 AgentがPolling iptablesに反映

Slide 23

Slide 23 text

ここが足りないC2C Networking • Service Discovery欲しい・・・ • 今のところはEurekaやamalgam8を使って実現

Slide 24

Slide 24 text

Next Steps • App Identity for external services • Bandwidth limiting • logging enhancement • support port ranges • https://www.pivotaltracker.com/n/projects/1498342

Slide 25

Slide 25 text

まとめ • CFのC2C Networking機能はMicroservicesやるのに便利 • CNIに準拠したSilkを利用。必要に応じて置き換え可能 • 足りない機能はあれど、今後いろいろ実装される予定