is there a difference in the connection tracking if you specify a node via iRule?
We've run across a situation with a partner where we want to proxy certain requests, transparently, to a backend partner for processing, and then return the responses to the customer as if they were processed by us directly. The additional requirement from our SEO folks is that we cannot use a subdomain for these requests.
customer <-> us <-> "normal" requests <-> local backend servers
<-> "special" requests <-> remote backend servers
Normally, we would simply put the IPs in a pool, have the partner give us some sort of monitor-able status for availability, and leave it at that. However, in this case, the partner is pretty insistent that we use a DNS name to forward our requests to.
Doing some digging around devcentral, I came up with this:
when RULE_INIT {
set static::ldns /Common/dvlp_dns.app/dvlp_dns_udp_vs
}
when HTTP_REQUEST {
if { ([URI::query [HTTP::uri] check ] ne "") } {
set ips [RESOLV::lookup @$static::ldns -a remote.site.com]
set firstip [lindex $ips 0]
if { $firstip ne "" } {
node $firstip
} else {
log local0. "no destination available for GLB node command"
}
}
}
The "if" statement is a testing statement just to make sure my logic works and will be replaced by whatever is decided to use as the match for separating the "normal" and "special" requests. Obviously, this will introduce a certain amount of latency into these requests but, given the specific requirements, I don't see any way to avoid that.
Two questions:
-
One of the other engineers is concerned that specifying the destination in this fashion will produce additional strain on the load balancer's resources because it may be using something outside of the normal connection tracking to keep tabs on the in/out traffic for each client request. It's my assumption that the virtual "object" is where the connection tracking is done, so other than bypassing the normal pool member selection mechanism, this is otherwise a normal internal process to the F5. Which one would be more correct or are we both nuts?
-
Has anyone else run into this with similar requirements and found a better way than this to do it?