envoyproxy / envoy

Cloud-native high-performance edge/middle/service proxy
https://www.envoyproxy.io
Apache License 2.0
25k stars 4.81k forks source link

MSSQL protocol/filter support #2545

Open Jeet007 opened 6 years ago

Jeet007 commented 6 years ago

Issue Template

Title: Connecting to mssql server through envoy

Description: I need to connect with mssql server via envoy. With a simple TCP network filter I can connect but it does not provide me any facility to redirect to different instances of mssql server using query params and other data like HTTP filter. I need to have a configuration where envoy just redirects me to correct mssql server and rest of the data should flow without alteration like it normally does in a TCP proxy

Is there any way I can achieve this?

Please redirect me if there are any mistakes in my question or understanding since I am new bee in realm of proxy and load balancing.

This is my simple configuration using TCP proxy filter:

{ "listeners":[ { "address":"tcp://0.0.0.0:10000", "filters":[ { "name":"tcp_proxy", "config":{ "stat_prefix":"egress_tcp", "route_config":{ "routes":[{ "cluster":"service_db" }] } } }] }], "admin":{ "access_log_path":"/tmp/admin_access.log", "address":"tcp://0.0.0.0:9901" }, "cluster_manager":{ "clusters":[ { "name":"service_db", "connect_timeout_ms":250, "type":"static", "lb_type":"round_robin", "hosts":[ { "url":"tcp://192.168.156.161:1433" } ] } ] } }

@mattklein123 : Can you please quickly redirect me on this?

Jeet007 commented 6 years ago

@ccaraman : Can you provide me a hint about what should I do here?

mattklein123 commented 6 years ago

This will require a new protocol aware filter for MSSQL, much like we have for Redis, HTTP, Mongo, etc.

Jeet007 commented 6 years ago

@mattklein123 : Is there any timeline on when this would be available in envoy? Also mean while is there any other way like using "fillter_chain_match" for simple tcp proxying?

Please let me know as we are migrating to envoy for our new service mesh and this is very critical for us

@ccaraman

mattklein123 commented 6 years ago

@mattklein123 : Is there any timeline on when this would be available in envoy?

When someone cares enough to implement it?

Also mean while is there any other way like using "fillter_chain_match" for simple tcp proxying?

I don't see how this can be done without writing some custom filter code.

Jeet007 commented 6 years ago

@mattklein123 : Sure. Thank you for your quick responses Matt. Can you please guide me if I want to write an in house minimalistic implementation for this how should I go about that?

mattklein123 commented 6 years ago

Can you please guide me if I want to write an in house minimalistic implementation for this how should I go about that?

I would probably take a look at redis, tcp_proxy, and mongo filters for some inspiration.

darkstone-delivery commented 4 years ago

@mattklein123 when will this feature be ready? please provide update

mattklein123 commented 4 years ago

@mattklein123 when will this feature be ready? please provide update

It will be ready when you implement it.

darkstone-delivery commented 4 years ago

@mattklein123 I am not a developer but manager for database team and we don't have the skills to do this this feature may be very useful for our team to improve our operations because we operate at very large scale can you please reschedule priorities so this feature gets delievered faster? thank you

alyssawilk commented 3 years ago

I think it may not be clear, but while Envoy is an open source project, none of the senior maintainers address feature requests by other companies. We're all employed full time for our own companies, and adding what our employers want to add. If Google and Lyft and Apple and so on don't need this feature, the folks triaging issues aren't going to pick it up. We do welcome additions to the code base and the community - you can either add it yourselves (hiring devs if you don't have any) or hire contractors (you could probably say fund tetrate adding the features you need) but it won't be done until someone cares enough to do one of the two.

kesavkolla commented 1 month ago

Surfacing this again. Can this protocol be implemented via wasm? It opens up possibility of writing protocols in different programming languages. For example we have rust expertise I can write the protocol inspection in rust and make it as wasm.