5. {Net}DevOps
cumulusnetworks.com 5
Leverage common DevOps tenants within Networking
§ Configuration management (today’s focus)
§ Make repetitive tasks predictable
§ Enforce policy to desired state - naming schemes,
software versions, … great audit trail mechanism
§ Infrastructure as code
§ Describe physical & logical components in human &
machine readable formats
6. {Net}DevOps
cumulusnetworks.com 6
§ Reactive to infrastructure as a whole
§ ie: L3 Clos architecture, single spine switch fans fail,
automatically adjust IGP cost to route around
§ Consistency (sometimes viewed as transparency)
§ Source of truth (across entire org, if possible), Git is
popular in compute circles
§ Common monitoring & escalation systems
7. A brief history of DevOps
§ …well, almost.
cumulusnetworks.com 7
8. Traditional network automation
§ Top-down efforts
§ SNMP
§ YANG/NETCONF
§ OpenFlow
§ Ansible
§ Screen-scraping
§ Difficult to integrate with the rest of the Ops stack
cumulusnetworks.com 8
9. “Whitebox switch” or bare metal networking
§ Treat as a server, preforms like a switch (or router)
• Kernel networking state sync to ASIC (and vice versa)
• ifconfig, ethtool, isc-dhcp … apt-get pkgname!
§ Consistent tooling across compute & networking
• CLI is usually bash, no walled garden
• Automation friendly from day 1
§ Choice on HW & SW suppliers
• Same as bare metal computing is today
• Applies to costly optics & cabling too!
routing bridging ops
Cumulus Linux
hardware
18. Managing network interfaces
cumulusnetworks.com 18
1. auto
lo
2. iface
lo
inet
loopback
3. <%
if
@int_loopback
-‐%>
4.
address
<%=
int_loopback
%>
5.
netmask
255.255.255.255
6. <%
end
-‐%>
7. auto
eth0
8. iface
eth0
inet
dhcp
9. <%
if
@int_unnumbered
-‐%>
10. #
unnumbered
interfaces
11. <%
@int_unnumbered.each
do
|val|
-‐%>
12. auto
<%=
val
%>
13. iface
<%=
val
%>
inet
static
14.
address
<%=
int_loopback
%>
15.
netmask
255.255.255.255
16. <%
end
-‐%>
17. <%
else
%>
18. #
no
unnumbered
interfaces
19. <%
end
-‐%>
20. <%
if
@int_layer3
%>
21. #
l3
interfaces
22. <%
int_layer3.each_pair
do
|key,
value_hash|
%>
23. auto
<%=
key
%>
24. iface
<%=
key
%>
inet
static
25.
address
<%=
value_hash['address']
%>
26.
netmask
<%=
value_hash['netmask']
%>
27. <%
end
%>
28. <%
else
%>
29. #
no
l3
interfaces
30. <%
end
%>
31. <%
if
int_bridges
%>
32. #
bridges
33. <%
int_bridges.each_pair
do
|key,
value_hash|
%>
34. auto
<%=
key
%>
35. iface
<%=
key
%>
inet
static
36.
address
<%=
value_hash['address']
%>
37.
netmask
<%=
value_hash['netmask']
%>
38.
bridge_ports
<%
value_hash['members'].each
do
|val|
-‐
%><%=
val%>
<%
end
-‐%>
39. <%
end
%>
40. <%
else
%>
41. #
no
bridges
42. <%
end
%>
19. Managing network interfaces
§ Everything in one file
§ Pros
§ Simple to implement and understand
§ Standard (no surprises)
§ Cons
§ Not simple if you have complex configurations
§ If one interface changes everything changes
cumulusnetworks.com 19
25. Managing Layer 3
§ Quagga
§ OSPF, ECMP, BGP
§ Focused on an interactive CLI
• Makes automation a little awkward
§ Graceful reload is experimental
§ Other Open Source
§ Bird
§ OpenBGPD
§ ExaBGP
cumulusnetworks.com 25
26. Firewalls & ACLs
§ Firewalls
§ UFW rules are dead easy
• UFW Puppet modules exist
§ RedHat users are also covered
• Lokkit modules exist
§ IPTables
§ Loads of IPTables modules to choose from
• If you need it!
cumulusnetworks.com 26
27. Testing
§ Network Infrastructure as Code
§ It’s code!
§ Acceptance testing
§ Many vendors provide a virtual machine
§ You can connect them virtually into topologies
cumulusnetworks.com 27
30. Summary
§ Expressing networks as human (ie: virtual diagram) and machine
(YAML) = powerful (see PTM as an example)
§ HW appliances of all shapes are turning into
pure SW plays (some begrudgingly)
§ {Net}DevOps transformation has begun in networking
• Please help these men and women share your journey!