We are also using this. Our scenario is the following:
We have a DaemonSet that puts an instance of App1 on every node. We want other apps to access the instance of App1 running on the same node they are on. We have not found a good way to do this. Our current solution is to add a hostPort to the deployment of App1, and have the other apps send requests to the their Host's IP address and the nodePort of App1. This is a rather roundabout way of getting what we want, but its the best we have found.
Why do we want this Node affinity? App1 has similar function to Netfix's Prana or AirBnB's Synapse. It's job is to allow clients to make 'safe' network calls, by implementing timeouts, circuit-breaker, stats, logging etc. In order to protect clients from unsafe network calls, it has to be, by definition, on the same Node as the client. We could deploy it as another container in the pod of each client, but that would be a) wasteful b) invasive on the clients. We cannot deploy it as K8S service, because we cannot then guarantee that the client request will not leave the node.
Martin