In September, Cisco announced that it was ceasing development and pulling back on sales of its Application Control Engine (ACE) load balancing modules. Customers of Cisco’s ACE product line will now have to look for a replacement product to solve their load balancing and application delivery needs.
One of the first questions that will come up when a customer starts looking into replacement products surrounds the issue of upgradability. Will the customer be able to import their current configuration into the new technology or will they have to start with the new product from scratch. For smaller businesses, starting over can be a refreshing way to clean up some of the things you’ve been meaning to but weren’t able to for one reason or another. But, for a large majority of the users out there, starting over from nothing with a new product is a daunting task.
To help with those users who are considering moving to the F5 universe, DevCentral has included several scripts to assist with the configuration migration process. In the Advanced Design and Config wiki, we’ve created a topic aptly titled “Cisco” that includes scripts to convert ACE configurations into it’s F5 counterpart. We’ve also included scripts that cover Cisco’s CSS and CSM products as well.
In this article, I’m going to focus on the ace2f5-tmsh” in the ace2f5.zip script library.
The script takes as input an ACE configuration and creates a TMSH script to create the corresponding F5 BIG-IP objects.
ace2f5-tmsh.pl
$ perl ace2f5-tmsh.pl ace_config > tmsh_script
We could leave it at that, but I’ll use this article to discuss the components of the ACE configuration and how they map to F5 objects.
ip
The ip object in the ACE configuration is defined like this:
ip route 0.0.0.0 0.0.0.0 10.211.143.1
equates to a tmsh “net route” command.
net route 0.0.0.0-0 { network 0.0.0.0/0 gw 10.211.143.1 }
rserver
An “rserver” is basically a node containing a server address including an optional “inservice” attribute indicating whether it’s active or not.
ACE Configuration
rserver host R190-JOEINC0060
ip address 10.213.240.85
rserver host R191-JOEINC0061
ip address 10.213.240.86
inservice
rserver host R192-JOEINC0062
ip address 10.213.240.88
inservice
rserver host R193-JOEINC0063
ip address 10.213.240.89
inservice
It will be used to find the IP address for a given rserver hostname.
serverfarm
A serverfarm is a LTM pool except that it doesn’t have a port assigned to it yet.
ACE Configuration
serverfarm host MySite-JoeInc
predictor hash url
rserver R190-JOEINC0060
inservice
rserver R191-JOEINC0061
inservice
rserver R192-JOEINC0062
inservice
rserver R193-JOEINC0063
inservice
F5 Configuration
ltm pool Insiteqa-JoeInc {
load-balancing-mode predictive-node
members { 10.213.240.86:any { address 10.213.240.86 }}
members { 10.213.240.88:any { address 10.213.240.88 }}
members { 10.213.240.89:any { address 10.213.240.89 }}
}
probe
a “probe” is a LTM monitor except that it does not have a port.
ACE Configuration
probe tcp MySite-JoeInc
interval 5
faildetect 2
passdetect interval 10
passdetect count 2
will map to the TMSH “ltm monitor” command.
F5 Configuration
ltm monitor Insiteqa-JoeInc {
defaults from tcp
interval 5
timeout 10
retry 2
}
sticky
The “sticky” object is a way to create a persistence profile. First you tie the serverfarm to the persist profile, then you tie the profile to the Virtual Server.
ACE Configuration
sticky ip-netmask 255.255.255.255 address source MySite-JoeInc-sticky
timeout 60
replicate sticky
serverfarm MySite-JoeInc
class-map
A “class-map” assigns a listener, or Virtual IP address and port number which is used for the clientside and serverside of the connection.
ACE Configuration
class-map match-any vip-MySite-JoeInc-12345
2 match virtual-address 10.213.238.140 tcp eq 12345
class-map match-any vip-MySite-JoeInc-1433
2 match virtual-address 10.213.238.140 tcp eq 1433
class-map match-any vip-MySite-JoeInc-31314
2 match virtual-address 10.213.238.140 tcp eq 31314
class-map match-any vip-MySite-JoeInc-8080
2 match virtual-address 10.213.238.140 tcp eq 8080
class-map match-any vip-MySite-JoeInc-http
2 match virtual-address 10.213.238.140 tcp eq www
class-map match-any vip-MySite-JoeInc-https
2 match virtual-address 10.213.238.140 tcp eq https
policy-map
a policy-map of type loadbalance simply ties the persistence profile to the Virtual . the “multi-match” attribute constructs the virtual server by tying a bunch of objects together.
ACE Configuration
policy-map type loadbalance first-match vip-pol-MySite-JoeInc
class class-default
sticky-serverfarm MySite-JoeInc-sticky
policy-map multi-match lb-MySite-JoeInc
class vip-MySite-JoeInc-http
loadbalance vip inservice
loadbalance policy vip-pol-MySite-JoeInc
loadbalance vip icmp-reply
class vip-MySite-JoeInc-https
loadbalance vip inservice
loadbalance vip icmp-reply
class vip-MySite-JoeInc-12345
loadbalance vip inservice
loadbalance policy vip-pol-MySite-JoeInc
loadbalance vip icmp-reply
class vip-MySite-JoeInc-31314
loadbalance vip inservice
loadbalance policy vip-pol-MySite-JoeInc
loadbalance vip icmp-reply
class vip-MySite-JoeInc-1433
loadbalance vip inservice
loadbalance policy vip-pol-MySite-JoeInc
loadbalance vip icmp-reply
class reals
nat dynamic 1 vlan 240
class vip-MySite-JoeInc-8080
loadbalance vip inservice
loadbalance policy vip-pol-MySite-JoeInc
loadbalance vip icmp-reply
F5 Configuration
ltm virtual vip-Insiteqa-JoeInc-12345 {
destination 10.213.238.140:12345
pool Insiteqa-JoeInc
persist my_source_addr
profiles {
tcp {}
}
}
ltm virtual vip-Insiteqa-JoeInc-1433 {
destination 10.213.238.140:1433
pool Insiteqa-JoeInc
persist my_source_addr
profiles {
tcp {}
}
}
ltm virtual vip-Insiteqa-JoeInc-31314 {
destination 10.213.238.140:31314
pool Insiteqa-JoeInc
persist my_source_addr
profiles {
tcp {}
}
}
ltm virtual vip-Insiteqa-JoeInc-8080 {
destination 10.213.238.140:8080
pool Insiteqa-JoeInc
persist my_source_addr
profiles {
tcp {}
}
}
ltm virtual vip-Insiteqa-JoeInc-http {
destination 10.213.238.140:http
pool Insiteqa-JoeInc
persist my_source_addr
profiles {
tcp {}
http {}
}
}
ltm virtual vip-Insiteqa-JoeInc-https {
destination 10.213.238.140:https
profiles {
tcp {}
}
Conclusion
If you are considering migrating from Cicso’s ACE to F5, I’d consider you take a look at the Cisco conversion scripts to assist with the conversion.