affinity based static load balancing
Yes, this can be solved efficiently using standard methods for bipartite matching and the assignment problem.  Let me build up to a solution, so you can see the ideas underpinning it.

If you want to minimize the maximum affinity, you can do that with binary search.  Pick a threshold $t$, and check whether there is a valid solution using only assignments that have an affinity $\le t$.  That check can be done by looking for a perfect matching in a bipartite graph, which can be done in polynomial time for a single value of $t$.  (The graph has an edge from a packet to a node if their affinity is $\le t$, otherwise the edge is absent.)  Now do binary search over $t$ to find the smallest $t$ for which such an assignment exists.  

If you want to minimize the sum of the affinities, this is an instance of the assignment problem.  There are polynomial-time algorithms for the assignment problem, which you can use directly.

If you want to minimize the max of the affinities, but break ties by choosing the one with the lowest sum, then you can combine above two methods.  First, find the smallest $t$ such that there exists an assignment using only affinities $\le t$.  Then, create an instance of the assignment problem, using only affinities that are $\le t$, and solve the corresponding assignment problem.  This gives an efficient algorithm to solve your problem.