I went back and looked at the TCP dump for your attempt using the HTTP Connection Manager and it doesn't look like the request is an HTTP request. That explains the 400 error, specifically because the first bytes of data received by Envoy aren't a valid HTTP method (GET, POST, etc). If the request is meant to be HTTP, I'd start with debugging what's going wrong there, since it's much easier to route HTTP requests than TCP connections.
If this isn't actually HTTP, then another option, which I haven't tried, is to combine the TLS inspector, the
SNI cluster filter and the TCP proxy filter. Provided your clients use the SNI extension in TLS, the SNI cluster filter looks like it should provide the server name from SNI to the TCP proxy. The TCP proxy will look for a cluster whose name is the server name and forward the connection there. You'd have to configure a cluster per stateful set instance.
Similarly, you could use the TLS inspector and a filter chain match on SNI to select a TCP proxy configuration that forwards to a specific cluster. You'd have to have a filter chain per stateful set instance and a cluster per stateful set instance to get this to work.
I'm not sure either of those is quite what you want since it requires the client to choose which stateful set instance to route to by setting the SNI name.
Stephan