Cloud Foundry Tokyo Meetup #3で発表した資料です
Cloud FoundryContainer-to-ContainerNetworking
View Slide
Pivotal Japan - Platform ArchitectKazuto Kusama@jacopen
Microserviceしてますか?Four Blair Services Pvt. Ltd. https://commons.wikimedia.org/wiki/File:Services4.png
機能ごとにソフトウェアを細分化開発チームも機能単位
いままでのCFだと・・・appA appB appC appD appA appD`RouterDB MQCell Cell CellHTTPのエンドポイントがRouter経由になってしまう
コンテナ間で直接通信したい!appA appB appC appD appA appDRouterDB MQCell Cell Cell
そこで
Container-to-ContainerNetworking
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
ざっくりとした仕組みの説明
Architecturehttps://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 RuntimeContainer Network InterfaceLoopbackPluginBridgePluginPTPPluginMAC VLANPlugin3rd-partyPlugin
Silk• CNI準拠のContainer Networking fabric• VXLANを使ってホスト間の通信を行う• Flannelにインスパイアされて作られている• 初期はFlannelを利用。etcdが嫌でRDBを使うように作り直したらしい
Garden-runcGarden External NetworkerCF Wrapper CNI PluginSilk CLI PluginLinuxコンテナランタイムGarden External Networker APICNI APILegacy NetworkingNetIn(NAT from Host)NetOut(Application Security Group)SilkdaemonSilkControllerdiego cellIPAMiptablesnetlinkなどなど設定
Garden-runcGarden External NetworkerCF Wrapper CNI PluginSilk CLI PluginLinuxコンテナランタイムGarden External Networker APICNI APILegacy NetworkingNetIn(NAT from Host)NetOut(Application Security Group)SilkdaemonSilkControllerdiego cellIPAMiptablesnetlinkなどなど設定Silk controllerがCellにsubnetを払い出す Wrapper PluginがPort forwardingやASGを設定veth pairの作成etc...
cf allow-access myapp backend-app --port 7000 --protocol tcpPolicyの設定AgentがPollingiptablesに反映
ここが足りない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を利用。必要に応じて置き換え可能• 足りない機能はあれど、今後いろいろ実装される予定