SlideShare a Scribd company logo
+
A Cloud Native SDN for Kubernetes
Juergen Brendel, Stas Kraev
Kubecon, London, March 2016
romana.io A cloud native SDN for Kubernetes @romanaproject
Agenda
● “Cloud native”, why does it matter?
● A better network for cloud native architectures
● New things in Kubernetes
● Demos
romana.io A cloud native SDN for Kubernetes @romanaproject
About us
● Team background:
– Data center networks
– Low-level traffic management
● Created L2 overlay network startup
– Bought by Cisco
● OpenStack networking
● There's got to be a better way
– Time is right
What is 'cloud native'?
romana.io A cloud native SDN for Kubernetes @romanaproject
The past: Enterprise networking
● Full control
● Applications need L2 and L3
– May need hard-wired IP addresses
– Broadcasts
● Servers are pets, not cattle: “Careful!”
– VM migration
● Complex!
– Complexity in the applications
– Because apps may do anything, network needs to support
everything!
romana.io A cloud native SDN for Kubernetes @romanaproject
Cloud native applications
● Automate all the things!
– Infrastructure as code
– Cattle, not pets: “Meh... just kill it.”
– Workloads come and go quickly
– Build for resiliance
● IP is all you need
– No hardcoded IP addresses, discovery
– No special network requirements
– Basic IP connectivity
● Restrictions
– Accept them and get clarity and simplicity in return
The problem
romana.io A cloud native SDN for Kubernetes @romanaproject
We have a mismatch
● Building cloud native applications…
● … on top of enterprise networking
– SDN controllers use overlay L2 domains
– VLAN, VXLAN, OVS, etc.
● Complexity and brittleness
– Lose benefits of simplicity
– Lose performance (encap, blinded hardware)
– Difficult to maintain and trouble shoot
romana.io A cloud native SDN for Kubernetes @romanaproject
The price you pay: Complexity
VXLAN Decap
VXLAN Decap
VXLAN Encap
VXLAN Encap
2 Top of Rack Round
Trips
East/West Traffic
Per Instance Security
romana.io A cloud native SDN for Kubernetes @romanaproject
The price you pay: Performance
Router
Endpoint A Endpoint B
Router
L2 overlay A
L2 overlay B
VRouter
romana.io A cloud native SDN for Kubernetes @romanaproject
Why do we do this to ourselves?
● We don't need any L2 features
● Except traffic segmentation
– Multi tenancy
– Tiers and policies
The solution
romana.io A cloud native SDN for Kubernetes @romanaproject
Cloud native SDNs
● Use native L3 capabilities
● No overlays
● De-emphasize IP address ranges
● Still provides segmentation, multi tenancy
● Simple, clear and scalable network setup
romana.io A cloud native SDN for Kubernetes @romanaproject
A truly cloud native SDN: Romana
● Project Romana
● Open source
● Apache 2.0 license
● Mostly written in Go
● Kubernetes and OpenStack
romana.io A cloud native SDN for Kubernetes @romanaproject
A truly cloud native SDN: Romana
● Use only IP routing
– No overlays
– All workload addresses are 'real'
– Simplicity!
● Use smart addressing
– Encode tenant or segment in IP address
– Assign “virtual” addresses with host prefixes
– Massive (!) collapse of route table
● Routes are static
– No route updates, no broadcasts for new endpoint
romana.io A cloud native SDN for Kubernetes @romanaproject
Routing and route aggregation
Host A
eth0:
192.168.8.11
romana-gw:
10.0.0.1/16
10.0.0.5
10.0.1.7
10.0.1.19
10.0.5.3
Host B
eth0:
192.168.8.22
romana-gw:
10.1.0.1/16
10.1.3.52
10.1.9.2
Host C
eth0:
192.168.8.33
romana-gw:
10.2.0.1/16
10.2.0.16
10.2.3.81
10.2.4.6
Routes:
10.1/16 → 192.168.8.22
10.2/16 → 192.168.8.33
Routes:
10.0/16 → 192.168.8.11
10.2/16 → 192.168.8.33
Routes:
10.0/16 → 192.168.8.11
10.1/16 → 192.168.8.22
romana.io A cloud native SDN for Kubernetes @romanaproject
Architecture
Host A Host B Host C
Agent Agent Agent
Tenant
Topology
IPAM
Root
Kubernetes
romana.io A cloud native SDN for Kubernetes @romanaproject
Architecture
Host A Host B Host C
Agent Agent Agent
Tenant
Topology
IPAM
Root
OpenStack
Romana / Kubernetes integration
romana.io A cloud native SDN for Kubernetes @romanaproject
Integration points
● CNI (Container Network Interface)
– Developed last year by CoreOS
– Supported by Kubernetes since version 1.1
● Third party resources
– Develop Kubernetes extensions via external
processes
● Network Policies
– Still under development by networking SIG
– Different proposals under discussion
romana.io A cloud native SDN for Kubernetes @romanaproject
CNI_COMMAND (ADD | DEL)
CNI_CONTAINERID
CNI_NETNS
CNI_IFNAME
CNI_ARGS
...
CNI: Interface creation workflow
Host A
eth0:
192.168.8.11
Romana
CNI plugin
Kubelet Create interface
romana.io A cloud native SDN for Kubernetes @romanaproject
CNI: Interface creation workflow
Host A
eth0:
192.168.8.11
Romana
CNI plugin
Kubelet
Romana
IPAM
Romana
Tenant
Romana
Topology
Host
Tenant
Segment
romana.io A cloud native SDN for Kubernetes @romanaproject
CNI: Interface creation workflow
Host A
eth0:
192.168.8.11
Romana
CNI plugin
Kubelet
Romana
Agent
10.0.0.5
connectivity
policies
Romana
IPAM
Romana
Tenant
Romana
Topology
IP address
romana.io A cloud native SDN for Kubernetes @romanaproject
Third party resources
● Tell Kubernetes about your new resource
$ kubectl create ­f third­party­resource­definition.yml
● Start listening for events on new URLs
/apis/romana.io/demo/v1/namespaces/default/networkpolicys/
metadata:
  name: network­policy.romana.io
apiVersion: extensions/v1beta1
kind: ThirdPartyResource
description: "Network policy"
versions:
­ name: demo/v1
romana.io A cloud native SDN for Kubernetes @romanaproject
Kubernetes network polices
● Recognized need for policies
– Grant / deny access, isolate tiers and tenants
– Basically: ACLs
– Different proposals exist
– Implementations use Kubernetes 3rd party resources
● Namespaces
– Use namespace as 'tenant'
– Add 'isolation' flag to namespace
romana.io A cloud native SDN for Kubernetes @romanaproject
Example network policy
POST /apis/romana.io/demo/v1/namespaces/tenant­a/networkpolicys/
{
  "kind": "NetworkPolicy",
  "metadata": {
    "name": "pol1"
  },
  "spec": {
    "allowIncoming": {
      "from": [
        { "pods": { "segment": "frontend" } }
      ],
      "toPorts": [
        { "port": 80, "protocol": "TCP" }
      ]
    },
    "podSelector": { "segment": "backend" }
  }
}
Gets
applied to
namespace
“segments”:
Natural fit
for Romana
romana.io A cloud native SDN for Kubernetes @romanaproject
Network policy workflow
Kubernetes master
Kubernetes API
3rd
party resource
type definition
kubectl
romana.io A cloud native SDN for Kubernetes @romanaproject
Network policy workflow
Kubernetes master
Kubernetes API
URLs
New URLs for this
resource type, per
namespace
romana.io A cloud native SDN for Kubernetes @romanaproject
Host
Romana
Agent
iptables
Host
Romana
Agent
iptables
Network policy workflow
Kubernetes master
Romana
K8S listener
Kubernetes API
Host
Romana
Agent
New Romana
policy definition
URLs
Events
streamed
through GET
request
Some client
POST /…..
{ new policy }
iptables
Demo
romana.io A cloud native SDN for Kubernetes @romanaproject
Conclusion
● Cloud native architectures simplify things
● Need a cloud native SDN to enjoy benefits
● Romana:
– Cloud native without compromises
– Native network performance
– Mostly static config: Solid network
– Very easy to work with and understand
● Easy to try:
– Simple installers for Kubernetes and OpenStack
romana.io A cloud native SDN for Kubernetes @romanaproject
Thank you!
● Romana Links
– http://romana.io - Project home
– http://romana.io/blog - Blog
– https://github.com/romana/romana - Sources
● Contact
– @romanaproject - Twitter
– info@romana.io - Email
– https://romana.slack.com/ - Slack channel
● Kubernetes links
– http://bit.ly/1RMVkrr - CNI spec
Appendix: Romana technical notes
romana.io A cloud native SDN for Kubernetes @romanaproject
Semantic and topological addressing
3
1
3
0
2
9
2
8
2
7
2
6
2
5
2
4
2
3
2
2
2
1
2
0
1
9
1
8
1
7
1
6
1
5
1
4
1
3
1
2
1
1
1
0
9 8 7 6 5 4 3 2 1 0
0 0 0 0 1 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 1 1
10
Network prefix bits
The network prefix.
In this example, we
are using the 10/8
address space.
6
Host ID Segment ID
We currently
store tenant ID in
upper bits of
segment ID.
4 67
Endpoint ID
Widths are configurable, don't have to use byte boundaries.
romana.io A cloud native SDN for Kubernetes @romanaproject
Segment and tenant bits
3
1
3
0
2
9
2
8
2
7
2
6
2
5
2
4
2
3
2
2
2
1
2
0
1
9
1
8
1
7
1
6
1
5
1
4
1
3
1
2
1
1
1
0
9 8 7 6 5 4 3 2 1 0
0 0 0 0 1 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 1 1
10
Network prefix bits
6
Host ID Segment ID
4 67
Endpoint ID
Encode the
tenant ID
romana.io A cloud native SDN for Kubernetes @romanaproject
Romana: Traffic segmentation
● Tenant traffic separated:
– Tenants don't get whole CIDR prefix or L2 domain
– But fully isolated from other tenants' traffic
● Tenants can define segments:
– Like tiers, provide isolation and policies
● Use segment and tenant bits in IP addresses:
– Apply policies (iptables) based on that
– Segments can stretch across hosts
romana.io A cloud native SDN for Kubernetes @romanaproject
Host BHost A
Allowing traffic within tenant
10.0.0.5 10.1.0.12
iptables:
check src/dst addrs
“tenant/segment bits
must match”
Src: 10.0.0.5
Dst: 10.1.0.12
Same
tenant/segment bits
romana.io A cloud native SDN for Kubernetes @romanaproject
Host BHost A
Isolating tenant traffic: Default
10.0.0.5 10.1.128.9
iptables:
check src/dst addrs
“tenant/segment bits
must match”
Src: 10.0.0.5
Dst: 10.1.128.9
Different
tenant/segment bits
Different
tenant
romana.io A cloud native SDN for Kubernetes @romanaproject
Host BHost A
Apply network policy between
segments (full isolation as default)
10.0.0.5 10.1.1.9
iptables:
Does policy chain
exist?
Otherwise: DROP
Src: 10.0.0.5
Dst: 10.1.1.9
Same tenant,
different segment
policy-chain:
From segment 0?
Protocol TCP?
To port 80?

More Related Content

PDF
Bay Area Network Virtualization Meetup
PDF
Cloud Native SDN
PPTX
OpenStack Summit Pluggable IPAM
PPTX
KubeCon EU 2016: Secure, Cloud-Native Networking with Project Calico
PPTX
Neutron DVR
PDF
AstriCon 2017 - Docker Swarm & Asterisk
PDF
Sfo17 109 containerized vn fs with data plane acceleration on arm platform
PPTX
OpenStack Neutron's Distributed Virtual Router
Bay Area Network Virtualization Meetup
Cloud Native SDN
OpenStack Summit Pluggable IPAM
KubeCon EU 2016: Secure, Cloud-Native Networking with Project Calico
Neutron DVR
AstriCon 2017 - Docker Swarm & Asterisk
Sfo17 109 containerized vn fs with data plane acceleration on arm platform
OpenStack Neutron's Distributed Virtual Router

What's hot (20)

PDF
Excitingly simple multi-path OpenStack networking: LAG-less, L2-less, yet ful...
PDF
Kubernetes Networking
PDF
OpenStack in Action 4! Emilien Macchi & Sylvain Afchain - What's new in neutr...
PDF
Kubernetes networking in AWS
PPTX
Scaling OpenStack Networking Beyond 4000 Nodes with Dragonflow - Eshed Gal-Or...
PDF
Simplifying open stack and kubernetes networking with romana
PDF
Simplifying and Securing your OpenShift Network with Project Calico
PPTX
Encrypt your volumes with barbican open stack 2018
ODP
Networking in OpenStack for non-networking people: Neutron, Open vSwitch and ...
PPTX
L2 and L3 agent restructure
PPTX
Kubernetes networks
PDF
Improving Network Application Performance using Load Aware Libeventdev
PDF
Kubernetes the Very Hard Way. Lisa Portland 2019
PDF
FreeSWITCH as a Microservice
PPTX
How to write a Neutron Plugin - if you really need to
PDF
OpenStack networking - Neutron deep dive with PLUMgrid
PPTX
Orchestration Tool Roundup - Arthur Berezin & Trammell Scruggs
PPTX
Container Networking: the Gotchas (Mesos London Meetup 11 May 2016)
PPTX
OpenStack and the Transformation of the Data Center - Lew Tucker
PDF
MidoNet deep dive
Excitingly simple multi-path OpenStack networking: LAG-less, L2-less, yet ful...
Kubernetes Networking
OpenStack in Action 4! Emilien Macchi & Sylvain Afchain - What's new in neutr...
Kubernetes networking in AWS
Scaling OpenStack Networking Beyond 4000 Nodes with Dragonflow - Eshed Gal-Or...
Simplifying open stack and kubernetes networking with romana
Simplifying and Securing your OpenShift Network with Project Calico
Encrypt your volumes with barbican open stack 2018
Networking in OpenStack for non-networking people: Neutron, Open vSwitch and ...
L2 and L3 agent restructure
Kubernetes networks
Improving Network Application Performance using Load Aware Libeventdev
Kubernetes the Very Hard Way. Lisa Portland 2019
FreeSWITCH as a Microservice
How to write a Neutron Plugin - if you really need to
OpenStack networking - Neutron deep dive with PLUMgrid
Orchestration Tool Roundup - Arthur Berezin & Trammell Scruggs
Container Networking: the Gotchas (Mesos London Meetup 11 May 2016)
OpenStack and the Transformation of the Data Center - Lew Tucker
MidoNet deep dive
Ad

Similar to KubeCon London 2016 Ronana Cloud Native SDN (20)

PDF
Simplifying the OpenStack and Kubernetes network stack with Romana
PDF
How our Cloudy Mindsets Approached Physical Routers
PDF
Scaling Apache Spark on Kubernetes at Lyft
PDF
OpenStack cloud for ConoHa, Z.com and GMO AppsCloud in okinawa opendays 2015 ...
PPTX
Edge Computing: A Unified Infrastructure for all the Different Pieces
PDF
Yechielthur1100red hat-cloud-infrastructure-networking-deep-dive-140417165107...
PPTX
Comparison of existing cni plugins for kubernetes
PDF
4. CNCF kubernetes Comparison of-existing-cni-plugins-for-kubernetes
PDF
Zenko & MetalK8s @ Dublin Docker Meetup, June 2018
PDF
Scaling spark on kubernetes at Lyft
PDF
LINE's Private Cloud - Meet Cloud Native World
PDF
GDG DevFest Romania - Architecting for the Google Cloud Platform
ODP
Network services on Kubernetes on premise
PDF
Composing services with Kubernetes
PDF
Docker on docker leveraging kubernetes in docker ee
PPTX
GMOインターネット様 発表「OpenStackのモデルの最適化とConoHa, Z.comとGMOアプリクラウドへの適用」 - OpenStack最新情...
PDF
Serving your phone calls with microservices
PPTX
Get the Exact Identity Solution You Need - In the Cloud - Overview
PDF
AWS Meetup Paris - Short URL project by Pernod Ricard
PDF
Monkey Server
Simplifying the OpenStack and Kubernetes network stack with Romana
How our Cloudy Mindsets Approached Physical Routers
Scaling Apache Spark on Kubernetes at Lyft
OpenStack cloud for ConoHa, Z.com and GMO AppsCloud in okinawa opendays 2015 ...
Edge Computing: A Unified Infrastructure for all the Different Pieces
Yechielthur1100red hat-cloud-infrastructure-networking-deep-dive-140417165107...
Comparison of existing cni plugins for kubernetes
4. CNCF kubernetes Comparison of-existing-cni-plugins-for-kubernetes
Zenko & MetalK8s @ Dublin Docker Meetup, June 2018
Scaling spark on kubernetes at Lyft
LINE's Private Cloud - Meet Cloud Native World
GDG DevFest Romania - Architecting for the Google Cloud Platform
Network services on Kubernetes on premise
Composing services with Kubernetes
Docker on docker leveraging kubernetes in docker ee
GMOインターネット様 発表「OpenStackのモデルの最適化とConoHa, Z.comとGMOアプリクラウドへの適用」 - OpenStack最新情...
Serving your phone calls with microservices
Get the Exact Identity Solution You Need - In the Cloud - Overview
AWS Meetup Paris - Short URL project by Pernod Ricard
Monkey Server
Ad

Recently uploaded (20)

PDF
WebRTC in SignalWire - troubleshooting media negotiation
PDF
Automated vs Manual WooCommerce to Shopify Migration_ Pros & Cons.pdf
PDF
Cloud-Scale Log Monitoring _ Datadog.pdf
PDF
Testing WebRTC applications at scale.pdf
PPTX
Funds Management Learning Material for Beg
PDF
Slides PDF The World Game (s) Eco Economic Epochs.pdf
PPTX
PptxGenJS_Demo_Chart_20250317130215833.pptx
PPTX
presentation_pfe-universite-molay-seltan.pptx
PDF
Tenda Login Guide: Access Your Router in 5 Easy Steps
PDF
Decoding a Decade: 10 Years of Applied CTI Discipline
PPTX
cyber security Workshop awareness ppt.pptx
PDF
APNIC Update, presented at PHNOG 2025 by Shane Hermoso
PPTX
Job_Card_System_Styled_lorem_ipsum_.pptx
PPTX
international classification of diseases ICD-10 review PPT.pptx
PPTX
Introduction to Information and Communication Technology
PDF
Triggering QUIC, presented by Geoff Huston at IETF 123
PPT
tcp ip networks nd ip layering assotred slides
PPTX
innovation process that make everything different.pptx
PDF
Sims 4 Historia para lo sims 4 para jugar
PDF
Best Practices for Testing and Debugging Shopify Third-Party API Integrations...
WebRTC in SignalWire - troubleshooting media negotiation
Automated vs Manual WooCommerce to Shopify Migration_ Pros & Cons.pdf
Cloud-Scale Log Monitoring _ Datadog.pdf
Testing WebRTC applications at scale.pdf
Funds Management Learning Material for Beg
Slides PDF The World Game (s) Eco Economic Epochs.pdf
PptxGenJS_Demo_Chart_20250317130215833.pptx
presentation_pfe-universite-molay-seltan.pptx
Tenda Login Guide: Access Your Router in 5 Easy Steps
Decoding a Decade: 10 Years of Applied CTI Discipline
cyber security Workshop awareness ppt.pptx
APNIC Update, presented at PHNOG 2025 by Shane Hermoso
Job_Card_System_Styled_lorem_ipsum_.pptx
international classification of diseases ICD-10 review PPT.pptx
Introduction to Information and Communication Technology
Triggering QUIC, presented by Geoff Huston at IETF 123
tcp ip networks nd ip layering assotred slides
innovation process that make everything different.pptx
Sims 4 Historia para lo sims 4 para jugar
Best Practices for Testing and Debugging Shopify Third-Party API Integrations...

KubeCon London 2016 Ronana Cloud Native SDN

  • 1. + A Cloud Native SDN for Kubernetes Juergen Brendel, Stas Kraev Kubecon, London, March 2016
  • 2. romana.io A cloud native SDN for Kubernetes @romanaproject Agenda ● “Cloud native”, why does it matter? ● A better network for cloud native architectures ● New things in Kubernetes ● Demos
  • 3. romana.io A cloud native SDN for Kubernetes @romanaproject About us ● Team background: – Data center networks – Low-level traffic management ● Created L2 overlay network startup – Bought by Cisco ● OpenStack networking ● There's got to be a better way – Time is right
  • 4. What is 'cloud native'?
  • 5. romana.io A cloud native SDN for Kubernetes @romanaproject The past: Enterprise networking ● Full control ● Applications need L2 and L3 – May need hard-wired IP addresses – Broadcasts ● Servers are pets, not cattle: “Careful!” – VM migration ● Complex! – Complexity in the applications – Because apps may do anything, network needs to support everything!
  • 6. romana.io A cloud native SDN for Kubernetes @romanaproject Cloud native applications ● Automate all the things! – Infrastructure as code – Cattle, not pets: “Meh... just kill it.” – Workloads come and go quickly – Build for resiliance ● IP is all you need – No hardcoded IP addresses, discovery – No special network requirements – Basic IP connectivity ● Restrictions – Accept them and get clarity and simplicity in return
  • 8. romana.io A cloud native SDN for Kubernetes @romanaproject We have a mismatch ● Building cloud native applications… ● … on top of enterprise networking – SDN controllers use overlay L2 domains – VLAN, VXLAN, OVS, etc. ● Complexity and brittleness – Lose benefits of simplicity – Lose performance (encap, blinded hardware) – Difficult to maintain and trouble shoot
  • 9. romana.io A cloud native SDN for Kubernetes @romanaproject The price you pay: Complexity VXLAN Decap VXLAN Decap VXLAN Encap VXLAN Encap 2 Top of Rack Round Trips East/West Traffic Per Instance Security
  • 10. romana.io A cloud native SDN for Kubernetes @romanaproject The price you pay: Performance Router Endpoint A Endpoint B Router L2 overlay A L2 overlay B VRouter
  • 11. romana.io A cloud native SDN for Kubernetes @romanaproject Why do we do this to ourselves? ● We don't need any L2 features ● Except traffic segmentation – Multi tenancy – Tiers and policies
  • 13. romana.io A cloud native SDN for Kubernetes @romanaproject Cloud native SDNs ● Use native L3 capabilities ● No overlays ● De-emphasize IP address ranges ● Still provides segmentation, multi tenancy ● Simple, clear and scalable network setup
  • 14. romana.io A cloud native SDN for Kubernetes @romanaproject A truly cloud native SDN: Romana ● Project Romana ● Open source ● Apache 2.0 license ● Mostly written in Go ● Kubernetes and OpenStack
  • 15. romana.io A cloud native SDN for Kubernetes @romanaproject A truly cloud native SDN: Romana ● Use only IP routing – No overlays – All workload addresses are 'real' – Simplicity! ● Use smart addressing – Encode tenant or segment in IP address – Assign “virtual” addresses with host prefixes – Massive (!) collapse of route table ● Routes are static – No route updates, no broadcasts for new endpoint
  • 16. romana.io A cloud native SDN for Kubernetes @romanaproject Routing and route aggregation Host A eth0: 192.168.8.11 romana-gw: 10.0.0.1/16 10.0.0.5 10.0.1.7 10.0.1.19 10.0.5.3 Host B eth0: 192.168.8.22 romana-gw: 10.1.0.1/16 10.1.3.52 10.1.9.2 Host C eth0: 192.168.8.33 romana-gw: 10.2.0.1/16 10.2.0.16 10.2.3.81 10.2.4.6 Routes: 10.1/16 → 192.168.8.22 10.2/16 → 192.168.8.33 Routes: 10.0/16 → 192.168.8.11 10.2/16 → 192.168.8.33 Routes: 10.0/16 → 192.168.8.11 10.1/16 → 192.168.8.22
  • 17. romana.io A cloud native SDN for Kubernetes @romanaproject Architecture Host A Host B Host C Agent Agent Agent Tenant Topology IPAM Root Kubernetes
  • 18. romana.io A cloud native SDN for Kubernetes @romanaproject Architecture Host A Host B Host C Agent Agent Agent Tenant Topology IPAM Root OpenStack
  • 19. Romana / Kubernetes integration
  • 20. romana.io A cloud native SDN for Kubernetes @romanaproject Integration points ● CNI (Container Network Interface) – Developed last year by CoreOS – Supported by Kubernetes since version 1.1 ● Third party resources – Develop Kubernetes extensions via external processes ● Network Policies – Still under development by networking SIG – Different proposals under discussion
  • 21. romana.io A cloud native SDN for Kubernetes @romanaproject CNI_COMMAND (ADD | DEL) CNI_CONTAINERID CNI_NETNS CNI_IFNAME CNI_ARGS ... CNI: Interface creation workflow Host A eth0: 192.168.8.11 Romana CNI plugin Kubelet Create interface
  • 22. romana.io A cloud native SDN for Kubernetes @romanaproject CNI: Interface creation workflow Host A eth0: 192.168.8.11 Romana CNI plugin Kubelet Romana IPAM Romana Tenant Romana Topology Host Tenant Segment
  • 23. romana.io A cloud native SDN for Kubernetes @romanaproject CNI: Interface creation workflow Host A eth0: 192.168.8.11 Romana CNI plugin Kubelet Romana Agent 10.0.0.5 connectivity policies Romana IPAM Romana Tenant Romana Topology IP address
  • 24. romana.io A cloud native SDN for Kubernetes @romanaproject Third party resources ● Tell Kubernetes about your new resource $ kubectl create ­f third­party­resource­definition.yml ● Start listening for events on new URLs /apis/romana.io/demo/v1/namespaces/default/networkpolicys/ metadata:   name: network­policy.romana.io apiVersion: extensions/v1beta1 kind: ThirdPartyResource description: "Network policy" versions: ­ name: demo/v1
  • 25. romana.io A cloud native SDN for Kubernetes @romanaproject Kubernetes network polices ● Recognized need for policies – Grant / deny access, isolate tiers and tenants – Basically: ACLs – Different proposals exist – Implementations use Kubernetes 3rd party resources ● Namespaces – Use namespace as 'tenant' – Add 'isolation' flag to namespace
  • 26. romana.io A cloud native SDN for Kubernetes @romanaproject Example network policy POST /apis/romana.io/demo/v1/namespaces/tenant­a/networkpolicys/ {   "kind": "NetworkPolicy",   "metadata": {     "name": "pol1"   },   "spec": {     "allowIncoming": {       "from": [         { "pods": { "segment": "frontend" } }       ],       "toPorts": [         { "port": 80, "protocol": "TCP" }       ]     },     "podSelector": { "segment": "backend" }   } } Gets applied to namespace “segments”: Natural fit for Romana
  • 27. romana.io A cloud native SDN for Kubernetes @romanaproject Network policy workflow Kubernetes master Kubernetes API 3rd party resource type definition kubectl
  • 28. romana.io A cloud native SDN for Kubernetes @romanaproject Network policy workflow Kubernetes master Kubernetes API URLs New URLs for this resource type, per namespace
  • 29. romana.io A cloud native SDN for Kubernetes @romanaproject Host Romana Agent iptables Host Romana Agent iptables Network policy workflow Kubernetes master Romana K8S listener Kubernetes API Host Romana Agent New Romana policy definition URLs Events streamed through GET request Some client POST /….. { new policy } iptables
  • 30. Demo
  • 31. romana.io A cloud native SDN for Kubernetes @romanaproject Conclusion ● Cloud native architectures simplify things ● Need a cloud native SDN to enjoy benefits ● Romana: – Cloud native without compromises – Native network performance – Mostly static config: Solid network – Very easy to work with and understand ● Easy to try: – Simple installers for Kubernetes and OpenStack
  • 32. romana.io A cloud native SDN for Kubernetes @romanaproject Thank you! ● Romana Links – http://romana.io - Project home – http://romana.io/blog - Blog – https://github.com/romana/romana - Sources ● Contact – @romanaproject - Twitter – [email protected] - Email – https://romana.slack.com/ - Slack channel ● Kubernetes links – http://bit.ly/1RMVkrr - CNI spec
  • 34. romana.io A cloud native SDN for Kubernetes @romanaproject Semantic and topological addressing 3 1 3 0 2 9 2 8 2 7 2 6 2 5 2 4 2 3 2 2 2 1 2 0 1 9 1 8 1 7 1 6 1 5 1 4 1 3 1 2 1 1 1 0 9 8 7 6 5 4 3 2 1 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 1 1 10 Network prefix bits The network prefix. In this example, we are using the 10/8 address space. 6 Host ID Segment ID We currently store tenant ID in upper bits of segment ID. 4 67 Endpoint ID Widths are configurable, don't have to use byte boundaries.
  • 35. romana.io A cloud native SDN for Kubernetes @romanaproject Segment and tenant bits 3 1 3 0 2 9 2 8 2 7 2 6 2 5 2 4 2 3 2 2 2 1 2 0 1 9 1 8 1 7 1 6 1 5 1 4 1 3 1 2 1 1 1 0 9 8 7 6 5 4 3 2 1 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 1 1 10 Network prefix bits 6 Host ID Segment ID 4 67 Endpoint ID Encode the tenant ID
  • 36. romana.io A cloud native SDN for Kubernetes @romanaproject Romana: Traffic segmentation ● Tenant traffic separated: – Tenants don't get whole CIDR prefix or L2 domain – But fully isolated from other tenants' traffic ● Tenants can define segments: – Like tiers, provide isolation and policies ● Use segment and tenant bits in IP addresses: – Apply policies (iptables) based on that – Segments can stretch across hosts
  • 37. romana.io A cloud native SDN for Kubernetes @romanaproject Host BHost A Allowing traffic within tenant 10.0.0.5 10.1.0.12 iptables: check src/dst addrs “tenant/segment bits must match” Src: 10.0.0.5 Dst: 10.1.0.12 Same tenant/segment bits
  • 38. romana.io A cloud native SDN for Kubernetes @romanaproject Host BHost A Isolating tenant traffic: Default 10.0.0.5 10.1.128.9 iptables: check src/dst addrs “tenant/segment bits must match” Src: 10.0.0.5 Dst: 10.1.128.9 Different tenant/segment bits Different tenant
  • 39. romana.io A cloud native SDN for Kubernetes @romanaproject Host BHost A Apply network policy between segments (full isolation as default) 10.0.0.5 10.1.1.9 iptables: Does policy chain exist? Otherwise: DROP Src: 10.0.0.5 Dst: 10.1.1.9 Same tenant, different segment policy-chain: From segment 0? Protocol TCP? To port 80?