I think I found the problem. I edited the post above. Can you retest the updated iRule?
I had forced the pool selection to use the default pool if the request matched a class line that didn't have a pool specified. But for requests which didn't match any class lines, the rule was being exited before that pool selection logic was done. Because the default pool on the VIP isn't used if another pool was already selected on a prior request on the same TCP connection, the keep-alive requests were going to the previously selected pool. UnRuleY explained it a bit more clearly in this post (
Click here).
Aaron