The node placement admission controller was definitely intended for that. In combination with a simple controller for allocating namespaces to sets of nodes.
The real solution is of course to limit what nodes can see - I won't say it's trivial, but it's an O(1) check based on the pods scheduled on that node.