Cloud Foundry
Container-to-Container
Networking
Pivotal Japan - Platform Architect
Kazuto Kusama
@jacopen
Microserviceしてますか?
Four	Blair	Services	Pvt.	Ltd.	https://commons.wikimedia.org/wiki/File:Services4.png
機能ごとにソフトウェアを細分化
開発チームも機能単位
いままでのCFだと・・・
appA appB appC appD appA appD
`
Router
DB MQ
Cell Cell Cell
HTTPのエンドポイントが
Router経由になってしまう
コンテナ間で直接通信したい!
appA appB appC appD appA appD
Router
DB MQ
Cell Cell Cell
そこで
Container-to-Container
Networking
Container-to-Container Networking
• Cloud Foundryでコンテナ間通信を可能にする新機能
• 最近GAになりました!
• 最新版は1.1.0
• Pivotal Cloud Foundryだと1.11から
GAとして提供
利用方法
• 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
さっそくDEMO
ざっくりとした仕組みの説明
Architecture
https://github.com/cloudfoundry-incubator/cf-networking-release/blob/develop/docs/diagram.png
青: 元からある仕組み
緑: 新しく追加された仕組み
赤: 差し替え可能
https://github.com/cloudfoundry-incubator/cf-networking-release/blob/develop/docs/diagram.png
CNI
• Container Network Interface
• CNCF(Cloud Native Computing Foundation)によって
策定されている、コンテナネットワーキングのための
仕様
• Cloud Foundryの他、KubernetesやMesos、rkt
・・・要はDocker以外 😛 で使われている
Container Runtime
Container Network Interface
Loopback
Plugin
Bridge
Plugin
PTP
Plugin
MAC VLAN
Plugin
3rd-party
Plugin
Silk
• CNI準拠のContainer Networking fabric
• VXLANを使ってホスト間の通信を行う
• Flannelにインスパイアされて作られている
• 初期はFlannelを利用。etcdが嫌でRDBを使うように
作り直したらしい
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
などなど設定
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...
cf allow-access	myapp backend-app	--port	7000	--protocol	tcp
Policyの設定
AgentがPolling
iptablesに反映
ここが足りないC2C Networking
• Service Discovery欲しい・・・
• 今のところはEurekaやamalgam8を使って実現
Next Steps
• App Identity for external services
• Bandwidth limiting
• logging enhancement
• support port ranges
• https://www.pivotaltracker.com/n/projects/1498342
まとめ
• CFのC2C Networking機能はMicroservicesやるのに便利
• CNIに準拠したSilkを利用。必要に応じて置き換え可能
• 足りない機能はあれど、今後いろいろ実装される予定

Cloud Foundry Container-to-Container Networking