Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SRV service discovery support #125

Open
mattklein123 opened this issue Oct 6, 2016 · 32 comments
Open

SRV service discovery support #125

mattklein123 opened this issue Oct 6, 2016 · 32 comments
Labels
area/service discovery enhancement Feature requests. Not bugs or questions. help wanted Needs help!

Comments

@mattklein123
Copy link
Member

Support SRV queries (used by Consul DNS, etc.) so that DNS can return IP/port combinations.

SRV is not supported by getaddrinfo_a so need to integrate with DNS library to make the query directly.

@mattklein123
Copy link
Member Author

Note, a PR was started in #517 but it looks like it's not going to get finished. If anyone wants to pick it up please chime in here. cc @0x1997

@ludov04
Copy link

ludov04 commented Jun 25, 2018

Any update on this?
The new service discovery feature on AWS ECS make use of SRV records. If envoy would support this, this would greatly simplify the use of envoy on ECS, no need no manage a consul cluster anymore.

Thanks :)!

rshriram pushed a commit to rshriram/envoy that referenced this issue Oct 30, 2018
rshriram pushed a commit to rshriram/envoy that referenced this issue Oct 30, 2018
* Point to googleapi in service control client. (envoyproxy#91)

* Point to googleapi in service control client.

* Use git repository for service-control-client.

* Merge latest changes from master (envoyproxy#104)

* Get attributes from envoy config. (envoyproxy#87)

* Send all attributes.

* Remove unused const strings.

* Address comment.

* updated SHA to point to newer envoy with RDS API feature (envoyproxy#94)

* Disable travis on stable branches (envoyproxy#96)

* Publish debug binaries (no release yet) (envoyproxy#98)

* Copies the binary instead of linking for release (envoyproxy#102)

* Extract quota config from service config. (envoyproxy#101)

* Add metric_cost in config.

* Remove group rules.

* Call loadQuotaConfig in config::create.

* Update latest update from master branch (envoyproxy#106)

* Get attributes from envoy config. (envoyproxy#87)

* Send all attributes.

* Remove unused const strings.

* Address comment.

* updated SHA to point to newer envoy with RDS API feature (envoyproxy#94)

* Disable travis on stable branches (envoyproxy#96)

* Publish debug binaries (no release yet) (envoyproxy#98)

* Copies the binary instead of linking for release (envoyproxy#102)

* Added quota contoll without the service control client library (envoyproxy#93)

* Added quota contoll without the service control client library

* Applied code review

* Applied code review

* Resolve conflicts

* Resolve conflicts

* Fixed format error reported by script/check-style

* Fixed a bug at Aggregated::GetAuthToken that causes Segmentation Fault

* Changed usage of template funcion

* Applied latest changes from the repo

* Applied latest changes from the repo

* Applied latest changes from the repo

* Adde comments

* Updated log information

* Applied envoyproxy#101

* Changed metric_cost_map to metric_cost_vector

* Fixed test case compilation error

* Fixed test case compilation error

* Add unit test for quota config. (envoyproxy#108)

* Add unit test for quota config.

* Add comments.

* Update test specifics.

* Merge latest changes from master branch (envoyproxy#112)

* Get attributes from envoy config. (envoyproxy#87)

* Send all attributes.

* Remove unused const strings.

* Address comment.

* updated SHA to point to newer envoy with RDS API feature (envoyproxy#94)

* Disable travis on stable branches (envoyproxy#96)

* Publish debug binaries (no release yet) (envoyproxy#98)

* Copies the binary instead of linking for release (envoyproxy#102)

* Not to use api_key if its service is not actived. (envoyproxy#109)

* If QuotaControl service is not available, return utils::Status::OK (envoyproxy#113)

* If QuotaControl service is not available, return utils::Status::OK

* Updated comment

* Return HTTP status code 429 on google.rpc.Code.RESOURCE_EXHAUSTED (envoyproxy#119)

* Fixed incorrectly resolved conflicts (envoyproxy#123)

* Added unit test cases for rate limiting (envoyproxy#124)

* Fixed incorrectly resolved conflicts

* Added unit test cases for rate limiting

* Added unit test cases for rate limiting

* Added unit test cases for rate limiting

* Added unit test cases for rate limiting

* Added unit test cases for rate limiting

* Added unit test cases for rate limiting

* Rename response.http.code (envoyproxy#125) (envoyproxy#128)

* Added handling of error code QUOTA_SYSTEM_UNAVAILABLE (envoyproxy#148)

* Integrated service control client library with quota cache aggregation (envoyproxy#149)

* Fixed error on merge (envoyproxy#151)

* Integrated service control client library with quota cache aggregation

* Fixed error on merge

* Fixed the compatibility issue with the latest update on esp (envoyproxy#152)

* Removed copied proto files (envoyproxy#208)

* Set default allocate quota request timeout to 1sec and applied latest service control client library change (envoyproxy#211)

* Merged key_restriction related changes from master (envoyproxy#213)

* Merge latest changes from master branch (envoyproxy#217)

* Not call report if decodeHeaders is not called. (envoyproxy#150)

* Update mixerclient with sync-ed grpc write and fail-fast. (envoyproxy#155)

* Update mixerclient with sync-ed write and fail-fast.

* Update to latest test.

* Update again

* Update envoy to PR553 (envoyproxy#156)

* Update envoy to PR553

* Update libevent to 2.1.8

* Uses a specific version of the Shared Pipeline lib (envoyproxy#158)

* Update lyft/envoy commit Id to latest. (envoyproxy#161)

* Update lyft/envoy commit Id to latest.

* Remove the comment about pull request

* Add new line - will delete in next commit.

* Update repositories.bzl (envoyproxy#169)

* Always set response latency (envoyproxy#172)

* Update mixerclient to sync_transport change. (envoyproxy#178)

* Use opaque config to turn on/off forward attribute and mixer filter (envoyproxy#179)

* Modify mixer filter

* Swap defaults

* Make the filter decoder only

* cache mixer disabled decision

* Fix a bug in opaque config change and test it out (envoyproxy#182)

* Fix a bug and test it out

* Update filter type

* Update README.md

* Update mixer client to mixer api with gogoproto. (envoyproxy#184)

* Move .bazelrc to tools/bazel.rc (envoyproxy#186)

* Move .bazelrc to tools/bazel.rc

* Update Jenkinsfile with latest version of pipeline

* Support apikey based traffic restriction (envoyproxy#189)

* b/36368559 support apikey based traffic restriction

* Fixed code formatting

* Fix crash in unreachable/overloaded RDS (envoyproxy#190)

* Add mixer client end to end integration test. (envoyproxy#177)

* Add mixer client end to end integration test.

* Split some repositories into a separate file.

* use real mixer for fake mixer_server.

* Test repository

* use mixer bzl file.

* Use mixer repositories

* Not to use mixer repository.

* Add return line at the end of WORKSPACE.

* Fix broken link (envoyproxy#193)

* Make quota call (envoyproxy#192)

* hookup quota call

* Make quota call.

* Update indent.

* Update envoy and update configs (envoyproxy#195)

* Update envoy and update configs

* Use gcc-4.9 for travis

* Use bazel 0.4.5

* Fix SHA of lightstep-tracer-common

* Enable check cache and refactory mixer config loading  (envoyproxy#197)

* Refactory the mixer config loading.

* fix format

* Add integration test.

* updated README.md

* s/send/sent/

* Split into separate tests. (envoyproxy#201)

* Update README on how to enable check cache. (envoyproxy#204)

* Update README on how to enable check cache.

* Update the comment.

* build: support Envoy native Bazel build. (envoyproxy#210)

* build: support Envoy native Bazel build.

This patch switches the Envoy build from src/envoy/repositories.bzl to
using the upstream native build.

See envoyproxy#663 for the corresponding changes
on the Envoy side.

* Use Envoy master with BUILD.wip rename merged.

* Fix clang-format issues.

* Fixes bazel.rc issues (envoyproxy#212)

* Fixes bazel rc issues

* Update Jenkins to latest pipeline version

* Updated the commit id of cloudendpoints/service-control-client-cxx (envoyproxy#218)

* Update commitid of cloudendpoints/service-control-client-cxx repo (envoyproxy#220)
rshriram pushed a commit to rshriram/envoy that referenced this issue Oct 30, 2018
* Created check security rules file and a few dummy/helper functions. (envoyproxy#40)

* Created check security rules file and a few dummy/helper functions.

And added it to check work flow.

* Fix format.

* Firebase: Merge from master. (envoyproxy#53)

* Simple TCP server to show how to retrieve original dest IP:port after an iptables redirect (envoyproxy#38)

* Simple TCP server to show how to retrieve original dest IP:port after an iptables redirect

* Fixed style.

* Rebase Envoy (envoyproxy#41)

* Update prototype to use iptables (envoyproxy#42)

* Rebase to fixed Envoy (envoyproxy#43)

* Handle HEAD request. (envoyproxy#34)

* Handle HEAD request.

* Try with GET if HEAD fails.

* Address comments.

* Format file.

* Expose bazel target (envoyproxy#48)

* Try again (envoyproxy#49)

* Enable ESP to invoke Firebase Security rules. (envoyproxy#54)

* Enable ESP to invoke Firebase Security rules.

* Address code review comments.

* Remove some debug logs

* Add proto file to capture TestRulesetRequest.

* clang-format files

* Resolve a merge issue with previous commit

* Allow security rules to disabled via serverconfig

* format file

* Addressed Wayne's review comments.

* Add firebase server to Server Config.

* Address Lizan's review comments

* Address review comments.

* Disable check rules service by default.

* Address more review comments.

* Fix a check.

* Delete unwanted constant.

* Address Wayne's comments and add a simple config test.

* Address a review comment.

* Add negative test case for config

* Address code review

* Remove unwanted const std::string

* Merge from master into firebase (envoyproxy#65)

* Simple TCP server to show how to retrieve original dest IP:port after an iptables redirect (envoyproxy#38)

* Simple TCP server to show how to retrieve original dest IP:port after an iptables redirect

* Fixed style.

* Rebase Envoy (envoyproxy#41)

* Update prototype to use iptables (envoyproxy#42)

* Rebase to fixed Envoy (envoyproxy#43)

* Handle HEAD request. (envoyproxy#34)

* Handle HEAD request.

* Try with GET if HEAD fails.

* Address comments.

* Format file.

* Expose bazel target (envoyproxy#48)

* Try again (envoyproxy#49)

* Integrate with mixer client. (envoyproxy#55)

* Integrate with mixer client.

* Restore  repositories.bzl back.

* Add originIp and originHost attributes. (envoyproxy#56)

* Add uuid-dev dependency in README.md (envoyproxy#45)

* Extract originIp and OriginHost. (envoyproxy#57)

* Extract originIp and OriginHost.

* Make header x-forwarded-host const.

* Update buckets for UI. (envoyproxy#58)

* Update buckets for UI.

* Only update time_distribution.

* Add targetService attribute. (envoyproxy#59)

* Use envoy new access_log handler for sending Report. (envoyproxy#60)

* use access_log handler.

* Not to use Loggable base class.

* Update to the latest envoy with envoyproxy#396. (envoyproxy#61)

* Fix tclap dependency fetching error (envoyproxy#62)

* Update the auth checke to use service.experimental.authorization.providerwq!

* Update the auth check to use service.experimental.authorization.provider

* Update the auth check to use service.experimental.authorization.provider (envoyproxy#67)

* Update the auth check to use service.experimental.authorization.provider

* Address comments and revert accidental change.

* Remove unnecessary added accidentally.

* Another patch

* fix the logic

* fix lint

* Fix broken test and add unit tests

* Fix comments

* Fix style check

* revert style for raw string

* fix small lint

* fix small lint

* fix small lint

* Unit tests for check security rules. (envoyproxy#75)

* Unit tests for check security rules.

* format

* Address review comments.

* Fix typos

* Merge from master to firebase (envoyproxy#143)

* Simple TCP server to show how to retrieve original dest IP:port after an iptables redirect (envoyproxy#38)

* Simple TCP server to show how to retrieve original dest IP:port after an iptables redirect

* Fixed style.

* Rebase Envoy (envoyproxy#41)

* Update prototype to use iptables (envoyproxy#42)

* Rebase to fixed Envoy (envoyproxy#43)

* Handle HEAD request. (envoyproxy#34)

* Handle HEAD request.

* Try with GET if HEAD fails.

* Address comments.

* Format file.

* Expose bazel target (envoyproxy#48)

* Try again (envoyproxy#49)

* Integrate with mixer client. (envoyproxy#55)

* Integrate with mixer client.

* Restore  repositories.bzl back.

* Add originIp and originHost attributes. (envoyproxy#56)

* Add uuid-dev dependency in README.md (envoyproxy#45)

* Extract originIp and OriginHost. (envoyproxy#57)

* Extract originIp and OriginHost.

* Make header x-forwarded-host const.

* Update buckets for UI. (envoyproxy#58)

* Update buckets for UI.

* Only update time_distribution.

* Add targetService attribute. (envoyproxy#59)

* Use envoy new access_log handler for sending Report. (envoyproxy#60)

* use access_log handler.

* Not to use Loggable base class.

* Update to the latest envoy with envoyproxy#396. (envoyproxy#61)

* Fix tclap dependency fetching error (envoyproxy#62)

* Integrate mixer client directly with envoy. (envoyproxy#66)

* Integrate mixer client directly with envoy.

* Send response header in Report.

* rename filter name from esp to mixer.

* add README.

* Add release binary script. (envoyproxy#68)

* Push tar.gz to GCS (envoyproxy#69)

* Push tar.gz to GCS

* Rename envoy_esp

* Remove mixer_client from api_manager. (envoyproxy#72)

* Update mixer client SHA. (envoyproxy#74)

* Update readme. (envoyproxy#73)

* Adds Jenkinsfile and updates release-binary to create a SHA. (envoyproxy#71)

* Adds Jenkinsfile and update release-binary
* Update Jenkinsfile and gitignore
* Fixes typo and use normal build Node
* Uses default bazel config
* Using batch mode
* Update bazel memory settings
* Do not use Jenkins bazel env
* Set .bazelrc for postsubmit

* Update grpc and protobuf (envoyproxy#70)

* protobuf v3.2.0
* grpc v1.1.1
* Align auth lib with grpc 1.1.1

* Add sourceService. (envoyproxy#78)

* Add script to build docker image. (envoyproxy#77)

* Add script to build docker image.

* Add start_envoy for docker image.

* Use official attribute names (envoyproxy#80)

* Use official attribute names

* fix format

* Creates a KEY for mixer client dep. Updates release-binary (envoyproxy#79)

* Updated mixer repo to use a key for commit

* release-binary skip build if file exists.

* Update src/envoy/mixer/README. (envoyproxy#82)

* Fix src/envoy/mixer/README.md (envoyproxy#85)

* Get attributes from envoy config. (envoyproxy#87)

* Send all attributes.

* Remove unused const strings.

* Address comment.

* updated SHA to point to newer envoy with RDS API feature (envoyproxy#94)

* Disable travis on stable branches (envoyproxy#96)

* Publish debug binaries (no release yet) (envoyproxy#98)

* Copies the binary instead of linking for release (envoyproxy#102)

* Not to use api_key if its service is not actived. (envoyproxy#109)

* Update envoy and add c-ares (envoyproxy#107)

* Update envoy and add c-ares depedencies

* Update release script with debug and normal binary

* remove debug ls

* formatting

* Send StatusCode Attributes to Mixer. (envoyproxy#110)

* Add send_attribute filter. (envoyproxy#115)

* Add send_attribute filter.

* Fix format

* rename variable serialized_attributes_

* Address the comments.

* Fail request if api_key is not valid. (envoyproxy#116)

* Fail request if api_key is not valid.

* Format code.

* Update comments.

* Address comment.

* Rename response.http.code (envoyproxy#125)

* Send headers as string map. (envoyproxy#129)

* Send headers as string map.

* Remove origin.ip and origin.host.

* Fix format

* unify bazel's docker build targets with other istio repos (envoyproxy#127)

* update base debug docker image reference (envoyproxy#133)

* Update postsubmit to create docker images (envoyproxy#132)

* Adding config release for bazel build (envoyproxy#135)

* Fix mixer client crash. (envoyproxy#136)

* Get mixerclient with response parsing. (envoyproxy#138)

* Update nghttp2 to sync with envoy (envoyproxy#140)

* Fix src/envoy/mixer/README.md

* Update nghttp2 to sync with envoy

* update

* fix typo

* Merge from master to firebase (envoyproxy#159)

* Simple TCP server to show how to retrieve original dest IP:port after an iptables redirect (envoyproxy#38)

* Simple TCP server to show how to retrieve original dest IP:port after an iptables redirect

* Fixed style.

* Rebase Envoy (envoyproxy#41)

* Update prototype to use iptables (envoyproxy#42)

* Rebase to fixed Envoy (envoyproxy#43)

* Handle HEAD request. (envoyproxy#34)

* Handle HEAD request.

* Try with GET if HEAD fails.

* Address comments.

* Format file.

* Expose bazel target (envoyproxy#48)

* Try again (envoyproxy#49)

* Integrate with mixer client. (envoyproxy#55)

* Integrate with mixer client.

* Restore  repositories.bzl back.

* Add originIp and originHost attributes. (envoyproxy#56)

* Add uuid-dev dependency in README.md (envoyproxy#45)

* Extract originIp and OriginHost. (envoyproxy#57)

* Extract originIp and OriginHost.

* Make header x-forwarded-host const.

* Update buckets for UI. (envoyproxy#58)

* Update buckets for UI.

* Only update time_distribution.

* Add targetService attribute. (envoyproxy#59)

* Use envoy new access_log handler for sending Report. (envoyproxy#60)

* use access_log handler.

* Not to use Loggable base class.

* Update to the latest envoy with envoyproxy#396. (envoyproxy#61)

* Fix tclap dependency fetching error (envoyproxy#62)

* Integrate mixer client directly with envoy. (envoyproxy#66)

* Integrate mixer client directly with envoy.

* Send response header in Report.

* rename filter name from esp to mixer.

* add README.

* Add release binary script. (envoyproxy#68)

* Push tar.gz to GCS (envoyproxy#69)

* Push tar.gz to GCS

* Rename envoy_esp

* Remove mixer_client from api_manager. (envoyproxy#72)

* Update mixer client SHA. (envoyproxy#74)

* Update readme. (envoyproxy#73)

* Adds Jenkinsfile and updates release-binary to create a SHA. (envoyproxy#71)

* Adds Jenkinsfile and update release-binary
* Update Jenkinsfile and gitignore
* Fixes typo and use normal build Node
* Uses default bazel config
* Using batch mode
* Update bazel memory settings
* Do not use Jenkins bazel env
* Set .bazelrc for postsubmit

* Update grpc and protobuf (envoyproxy#70)

* protobuf v3.2.0
* grpc v1.1.1
* Align auth lib with grpc 1.1.1

* Add sourceService. (envoyproxy#78)

* Add script to build docker image. (envoyproxy#77)

* Add script to build docker image.

* Add start_envoy for docker image.

* Use official attribute names (envoyproxy#80)

* Use official attribute names

* fix format

* Creates a KEY for mixer client dep. Updates release-binary (envoyproxy#79)

* Updated mixer repo to use a key for commit

* release-binary skip build if file exists.

* Update src/envoy/mixer/README. (envoyproxy#82)

* Fix src/envoy/mixer/README.md (envoyproxy#85)

* Get attributes from envoy config. (envoyproxy#87)

* Send all attributes.

* Remove unused const strings.

* Address comment.

* updated SHA to point to newer envoy with RDS API feature (envoyproxy#94)

* Disable travis on stable branches (envoyproxy#96)

* Publish debug binaries (no release yet) (envoyproxy#98)

* Copies the binary instead of linking for release (envoyproxy#102)

* Not to use api_key if its service is not actived. (envoyproxy#109)

* Update envoy and add c-ares (envoyproxy#107)

* Update envoy and add c-ares depedencies

* Update release script with debug and normal binary

* remove debug ls

* formatting

* Send StatusCode Attributes to Mixer. (envoyproxy#110)

* Add send_attribute filter. (envoyproxy#115)

* Add send_attribute filter.

* Fix format

* rename variable serialized_attributes_

* Address the comments.

* Fail request if api_key is not valid. (envoyproxy#116)

* Fail request if api_key is not valid.

* Format code.

* Update comments.

* Address comment.

* Rename response.http.code (envoyproxy#125)

* Send headers as string map. (envoyproxy#129)

* Send headers as string map.

* Remove origin.ip and origin.host.

* Fix format

* unify bazel's docker build targets with other istio repos (envoyproxy#127)

* update base debug docker image reference (envoyproxy#133)

* Update postsubmit to create docker images (envoyproxy#132)

* Adding config release for bazel build (envoyproxy#135)

* Fix mixer client crash. (envoyproxy#136)

* Get mixerclient with response parsing. (envoyproxy#138)

* Update nghttp2 to sync with envoy (envoyproxy#140)

* Fix src/envoy/mixer/README.md

* Update nghttp2 to sync with envoy

* update

* fix typo

* Populate origin.user attribute from the SAN field of client cert (envoyproxy#142)

* Test

* test

* test

* revert file

* address comments

* test

* fix typo

* fix format

* fix format

* Update to latest mixer_client. (envoyproxy#145)

* Update to latest mixer_client.

* Updated the sha.

* Not call report if decodeHeaders is not called. (envoyproxy#150)

* Update mixerclient with sync-ed grpc write and fail-fast. (envoyproxy#155)

* Update mixerclient with sync-ed write and fail-fast.

* Update to latest test.

* Update again

* Update envoy to PR553 (envoyproxy#156)

* Update envoy to PR553

* Update libevent to 2.1.8

* Update the Commit id for envoy

* Allow for HTTP based function from Firebase rules (envoyproxy#202)

* Allow for HTTP based function from Firebase rules

* Fix code style check

* Added more comments.

* Fix style issues.

* Address code review comments from Limin and Lizan.

* Add more comments and address CR comments.

* Fix a typo.

* Address Wayne's CR comments.

* Merge from master to firebase (envoyproxy#237)

* Simple TCP server to show how to retrieve original dest IP:port after an iptables redirect (envoyproxy#38)

* Simple TCP server to show how to retrieve original dest IP:port after an iptables redirect

* Fixed style.

* Rebase Envoy (envoyproxy#41)

* Update prototype to use iptables (envoyproxy#42)

* Rebase to fixed Envoy (envoyproxy#43)

* Handle HEAD request. (envoyproxy#34)

* Handle HEAD request.

* Try with GET if HEAD fails.

* Address comments.

* Format file.

* Expose bazel target (envoyproxy#48)

* Try again (envoyproxy#49)

* Integrate with mixer client. (envoyproxy#55)

* Integrate with mixer client.

* Restore  repositories.bzl back.

* Add originIp and originHost attributes. (envoyproxy#56)

* Add uuid-dev dependency in README.md (envoyproxy#45)

* Extract originIp and OriginHost. (envoyproxy#57)

* Extract originIp and OriginHost.

* Make header x-forwarded-host const.

* Update buckets for UI. (envoyproxy#58)

* Update buckets for UI.

* Only update time_distribution.

* Add targetService attribute. (envoyproxy#59)

* Use envoy new access_log handler for sending Report. (envoyproxy#60)

* use access_log handler.

* Not to use Loggable base class.

* Update to the latest envoy with envoyproxy#396. (envoyproxy#61)

* Fix tclap dependency fetching error (envoyproxy#62)

* Integrate mixer client directly with envoy. (envoyproxy#66)

* Integrate mixer client directly with envoy.

* Send response header in Report.

* rename filter name from esp to mixer.

* add README.

* Add release binary script. (envoyproxy#68)

* Push tar.gz to GCS (envoyproxy#69)

* Push tar.gz to GCS

* Rename envoy_esp

* Remove mixer_client from api_manager. (envoyproxy#72)

* Update mixer client SHA. (envoyproxy#74)

* Update readme. (envoyproxy#73)

* Adds Jenkinsfile and updates release-binary to create a SHA. (envoyproxy#71)

* Adds Jenkinsfile and update release-binary
* Update Jenkinsfile and gitignore
* Fixes typo and use normal build Node
* Uses default bazel config
* Using batch mode
* Update bazel memory settings
* Do not use Jenkins bazel env
* Set .bazelrc for postsubmit

* Update grpc and protobuf (envoyproxy#70)

* protobuf v3.2.0
* grpc v1.1.1
* Align auth lib with grpc 1.1.1

* Add sourceService. (envoyproxy#78)

* Add script to build docker image. (envoyproxy#77)

* Add script to build docker image.

* Add start_envoy for docker image.

* Use official attribute names (envoyproxy#80)

* Use official attribute names

* fix format

* Creates a KEY for mixer client dep. Updates release-binary (envoyproxy#79)

* Updated mixer repo to use a key for commit

* release-binary skip build if file exists.

* Update src/envoy/mixer/README. (envoyproxy#82)

* Fix src/envoy/mixer/README.md (envoyproxy#85)

* Get attributes from envoy config. (envoyproxy#87)

* Send all attributes.

* Remove unused const strings.

* Address comment.

* updated SHA to point to newer envoy with RDS API feature (envoyproxy#94)

* Disable travis on stable branches (envoyproxy#96)

* Publish debug binaries (no release yet) (envoyproxy#98)

* Copies the binary instead of linking for release (envoyproxy#102)

* Not to use api_key if its service is not actived. (envoyproxy#109)

* Update envoy and add c-ares (envoyproxy#107)

* Update envoy and add c-ares depedencies

* Update release script with debug and normal binary

* remove debug ls

* formatting

* Send StatusCode Attributes to Mixer. (envoyproxy#110)

* Add send_attribute filter. (envoyproxy#115)

* Add send_attribute filter.

* Fix format

* rename variable serialized_attributes_

* Address the comments.

* Fail request if api_key is not valid. (envoyproxy#116)

* Fail request if api_key is not valid.

* Format code.

* Update comments.

* Address comment.

* Rename response.http.code (envoyproxy#125)

* Send headers as string map. (envoyproxy#129)

* Send headers as string map.

* Remove origin.ip and origin.host.

* Fix format

* unify bazel's docker build targets with other istio repos (envoyproxy#127)

* update base debug docker image reference (envoyproxy#133)

* Update postsubmit to create docker images (envoyproxy#132)

* Adding config release for bazel build (envoyproxy#135)

* Fix mixer client crash. (envoyproxy#136)

* Get mixerclient with response parsing. (envoyproxy#138)

* Update nghttp2 to sync with envoy (envoyproxy#140)

* Fix src/envoy/mixer/README.md

* Update nghttp2 to sync with envoy

* update

* fix typo

* Populate origin.user attribute from the SAN field of client cert (envoyproxy#142)

* Test

* test

* test

* revert file

* address comments

* test

* fix typo

* fix format

* fix format

* Update to latest mixer_client. (envoyproxy#145)

* Update to latest mixer_client.

* Updated the sha.

* Not call report if decodeHeaders is not called. (envoyproxy#150)

* Update mixerclient with sync-ed grpc write and fail-fast. (envoyproxy#155)

* Update mixerclient with sync-ed write and fail-fast.

* Update to latest test.

* Update again

* Update envoy to PR553 (envoyproxy#156)

* Update envoy to PR553

* Update libevent to 2.1.8

* Uses a specific version of the Shared Pipeline lib (envoyproxy#158)

* Update lyft/envoy commit Id to latest. (envoyproxy#161)

* Update lyft/envoy commit Id to latest.

* Remove the comment about pull request

* Add new line - will delete in next commit.

* Update repositories.bzl (envoyproxy#169)

* Always set response latency (envoyproxy#172)

* Update mixerclient to sync_transport change. (envoyproxy#178)

* Use opaque config to turn on/off forward attribute and mixer filter (envoyproxy#179)

* Modify mixer filter

* Swap defaults

* Make the filter decoder only

* cache mixer disabled decision

* Fix a bug in opaque config change and test it out (envoyproxy#182)

* Fix a bug and test it out

* Update filter type

* Update README.md

* Update mixer client to mixer api with gogoproto. (envoyproxy#184)

* Move .bazelrc to tools/bazel.rc (envoyproxy#186)

* Move .bazelrc to tools/bazel.rc

* Update Jenkinsfile with latest version of pipeline

* Support apikey based traffic restriction (envoyproxy#189)

* b/36368559 support apikey based traffic restriction

* Fixed code formatting

* Fix crash in unreachable/overloaded RDS (envoyproxy#190)

* Add mixer client end to end integration test. (envoyproxy#177)

* Add mixer client end to end integration test.

* Split some repositories into a separate file.

* use real mixer for fake mixer_server.

* Test repository

* use mixer bzl file.

* Use mixer repositories

* Not to use mixer repository.

* Add return line at the end of WORKSPACE.

* Fix broken link (envoyproxy#193)

* Make quota call (envoyproxy#192)

* hookup quota call

* Make quota call.

* Update indent.

* Update envoy and update configs (envoyproxy#195)

* Update envoy and update configs

* Use gcc-4.9 for travis

* Use bazel 0.4.5

* Fix SHA of lightstep-tracer-common

* Enable check cache and refactory mixer config loading  (envoyproxy#197)

* Refactory the mixer config loading.

* fix format

* Add integration test.

* updated README.md

* s/send/sent/

* Split into separate tests. (envoyproxy#201)

* Update README on how to enable check cache. (envoyproxy#204)

* Update README on how to enable check cache.

* Update the comment.

* build: support Envoy native Bazel build. (envoyproxy#210)

* build: support Envoy native Bazel build.

This patch switches the Envoy build from src/envoy/repositories.bzl to
using the upstream native build.

See envoyproxy#663 for the corresponding changes
on the Envoy side.

* Use Envoy master with BUILD.wip rename merged.

* Fix clang-format issues.

* Fixes bazel.rc issues (envoyproxy#212)

* Fixes bazel rc issues

* Update Jenkins to latest pipeline version

* Fix go build (envoyproxy#224)

* Use TranscoderInputStream to reduce confusion around ByteCount() (envoyproxy#225)

* Add TranscoderInputStream to reduce confusion

* fix_format

* Merge latest changes from rate_limiting to master (envoyproxy#221)

* Point to googleapi in service control client. (envoyproxy#91)

* Point to googleapi in service control client.

* Use git repository for service-control-client.

* Merge latest changes from master (envoyproxy#104)

* Get attributes from envoy config. (envoyproxy#87)

* Send all attributes.

* Remove unused const strings.

* Address comment.

* updated SHA to point to newer envoy with RDS API feature (envoyproxy#94)

* Disable travis on stable branches (envoyproxy#96)

* Publish debug binaries (no release yet) (envoyproxy#98)

* Copies the binary instead of linking for release (envoyproxy#102)

* Extract quota config from service config. (envoyproxy#101)

* Add metric_cost in config.

* Remove group rules.

* Call loadQuotaConfig in config::create.

* Update latest update from master branch (envoyproxy#106)

* Get attributes from envoy config. (envoyproxy#87)

* Send all attributes.

* Remove unused const strings.

* Address comment.

* updated SHA to point to newer envoy with RDS API feature (envoyproxy#94)

* Disable travis on stable branches (envoyproxy#96)

* Publish debug binaries (no release yet) (envoyproxy#98)

* Copies the binary instead of linking for release (envoyproxy#102)

* Added quota contoll without the service control client library (envoyproxy#93)

* Added quota contoll without the service control client library

* Applied code review

* Applied code review

* Resolve conflicts

* Resolve conflicts

* Fixed format error reported by script/check-style

* Fixed a bug at Aggregated::GetAuthToken that causes Segmentation Fault

* Changed usage of template funcion

* Applied latest changes from the repo

* Applied latest changes from the repo

* Applied latest changes from the repo

* Adde comments

* Updated log information

* Applied envoyproxy#101

* Changed metric_cost_map to metric_cost_vector

* Fixed test case compilation error

* Fixed test case compilation error

* Add unit test for quota config. (envoyproxy#108)

* Add unit test for quota config.

* Add comments.

* Update test specifics.

* Merge latest changes from master branch (envoyproxy#112)

* Get attributes from envoy config. (envoyproxy#87)

* Send all attributes.

* Remove unused const strings.

* Address comment.

* updated SHA to point to newer envoy with RDS API feature (envoyproxy#94)

* Disable travis on stable branches (envoyproxy#96)

* Publish debug binaries (no release yet) (envoyproxy#98)

* Copies the binary instead of linking for release (envoyproxy#102)

* Not to use api_key if its service is not actived. (envoyproxy#109)

* If QuotaControl service is not available, return utils::Status::OK (envoyproxy#113)

* If QuotaControl service is not available, return utils::Status::OK

* Updated comment

* Return HTTP status code 429 on google.rpc.Code.RESOURCE_EXHAUSTED (envoyproxy#119)

* Fixed incorrectly resolved conflicts (envoyproxy#123)

* Added unit test cases for rate limiting (envoyproxy#124)

* Fixed incorrectly resolved conflicts

* Added unit test cases for rate limiting

* Added unit test cases for rate limiting

* Added unit test cases for rate limiting

* Added unit test cases for rate limiting

* Added unit test cases for rate limiting

* Added unit test cases for rate limiting

* Rename response.http.code (envoyproxy#125) (envoyproxy#128)

* Added handling of error code QUOTA_SYSTEM_UNAVAILABLE (envoyproxy#148)

* Integrated service control client library with quota cache aggregation (envoyproxy#149)

* Fixed error on merge (envoyproxy#151)

* Integrated service control client library with quota cache aggregation

* Fixed error on merge

* Fixed the compatibility issue with the latest update on esp (envoyproxy#152)

* Removed copied proto files (envoyproxy#208)

* Set default allocate quota request timeout to 1sec and applied latest service control client library change (envoyproxy#211)

* Merged key_restriction related changes from master (envoyproxy#213)

* Merge latest changes from master branch (envoyproxy#217)

* Not call report if decodeHeaders is not called. (envoyproxy#150)

* Update mixerclient with sync-ed grpc write and fail-fast. (envoyproxy#155)

* Update mixerclient with sync-ed write and fail-fast.

* Update to latest test.

* Update again

* Update envoy to PR553 (envoyproxy#156)

* Update envoy to PR553

* Update libevent to 2.1.8

* Uses a specific version of the Shared Pipeline lib (envoyproxy#158)

* Update lyft/envoy commit Id to latest. (envoyproxy#161)

* Update lyft/envoy commit Id to latest.

* Remove the comment about pull request

* Add new line - will delete in next commit.

* Update repositories.bzl (envoyproxy#169)

* Always set response latency (envoyproxy#172)

* Update mixerclient to sync_transport change. (envoyproxy#178)

* Use opaque config to turn on/off forward attribute and mixer filter (envoyproxy#179)

* Modify mixer filter

* Swap defaults

* Make the filter decoder only

* cache mixer disabled decision

* Fix a bug in opaque config change and test it out (envoyproxy#182)

* Fix a bug and test it out

* Update filter type

* Update README.md

* Update mixer client to mixer api with gogoproto. (envoyproxy#184)

* Move .bazelrc to tools/bazel.rc (envoyproxy#186)

* Move .bazelrc to tools/bazel.rc

* Update Jenkinsfile with latest version of pipeline

* Support apikey based traffic restriction (envoyproxy#189)

* b/36368559 support apikey based traffic restriction

* Fixed code formatting

* Fix crash in unreachable/overloaded RDS (envoyproxy#190)

* Add mixer client end to end integration test. (envoyproxy#177)

* Add mixer client end to end integration test.

* Split some repositories into a separate file.

* use real mixer for fake mixer_server.

* Test repository

* use mixer bzl file.

* Use mixer repositories

* Not to use mixer repository.

* Add return line at the end of WORKSPACE.

* Fix broken link (envoyproxy#193)

* Make quota call (envoyproxy#192)

* hookup quota call

* Make quota call.

* Update indent.

* Update envoy and update configs (envoyproxy#195)

* Update envoy and update configs

* Use gcc-4.9 for travis

* Use bazel 0.4.5

* Fix SHA of lightstep-tracer-common

* Enable check cache and refactory mixer config loading  (envoyproxy#197)

* Refactory the mixer config loading.

* fix format

* Add integration test.

* updated README.md

* s/send/sent/

* Split into separate tests. (envoyproxy#201)

* Update README on how to enable check cache. (envoyproxy#204)

* Update README on how to enable check cache.

* Update the comment.

* build: support Envoy native Bazel build. (envoyproxy#210)

* build: support Envoy native Bazel build.

This patch switches the Envoy build from src/envoy/repositories.bzl to
using the upstream native build.

See envoyproxy#663 for the corresponding changes
on the Envoy side.

* Use Envoy master with BUILD.wip rename merged.

* Fix clang-format issues.

* Fixes bazel.rc issues (envoyproxy#212)

* Fixes bazel rc issues

* Update Jenkins to latest pipeline version

* Updated the commit id of cloudendpoints/service-control-client-cxx (envoyproxy#218)

* Update commitid of cloudendpoints/service-control-client-cxx repo (envoyproxy#220)

* Send delta metrics for intermediate reports. (envoyproxy#219)

* Send delta metrics for intermediate reports.

* Move last_request_bytes/last_response_bytes to RequestContext.

* Handle final report.

* Address comment.

* Update attributes to match the canonical attribute list. (envoyproxy#232)

* Update response.http.code to response.code and response.latency to response.duration to line up with the canonical attributes in istio/istio.github.io/docs/concepts/attributes.md

* Format according to clang-format

* Add envoy Buffer based TranscoderInputStream (envoyproxy#231)

* Add envoy Buffer based TranscoderInputStream

* fix format

* A few doc changes for consistency across repos. (envoyproxy#235)

* Add repositories.bzl

* Added missing export setting in bazel configuration (envoyproxy#236)

* Added export missing in bazel configuration

* Added export missing in bazel configuration

* Allow HTTP functions in firebase rules to specify audience (envoyproxy#244)

* Allow HTTP functions in firebase rules to specify audience

* Allow GetAuthToken to ignore cache and fix style checks.

* Fix GetAuthToken

* Address Wayne's comment

* Check for empty response body

* Remove .bazelrc.jenkins file not present in the master branch.

* Remove forward_attribute_filter.cc not present in master.
@ChrisLahaye
Copy link

ChrisLahaye commented Nov 4, 2018

Any update on this?
The new service discovery feature on AWS ECS make use of SRV records. If envoy would support this, this would greatly simplify the use of envoy on ECS, no need no manage a consul cluster anymore.

Thanks :)!

Are you still using Consul as alternative?

@davidcpell
Copy link

@ludov04 @ChrisLahaye I'd also be interested to know!

@venilnoronha
Copy link
Member

/assign @venilnoronha

@grayaii
Copy link

grayaii commented Aug 15, 2019

I think this was supposed to be in 1.11.0 release.
1.11.1 just got released and it looks like this has been pushed to 1.12.0.

@venilnoronha venilnoronha removed their assignment Aug 30, 2019
@mattklein123 mattklein123 removed this from the 1.12.0 milestone Oct 10, 2019
lizan pushed a commit that referenced this issue Mar 3, 2020
This is similar to the http2 frame protection, but rather than try to
guard
[header block || last body bytes || last chunk in chunk encoding ||
trailer block]
depending on end stream, which just gets messy, I opted to just add an
empty reference counted fragment after the body was serialized, which
appears to work just as well with a small theoretical overhead.  If
folks think the complexity is warranted I can of course do that instead.

Risk Level: Medium
Testing: new unit tests, integration test
Docs Changes: stats documented
Release Notes: added

Signed-off-by: Alyssa Wilk <alyssar@chromium.org>
Signed-off-by: Lizan Zhou <lizan@tetrate.io>
Signed-off-by: Jianfei Hu <jianfeih@google.com>
@twreid
Copy link

twreid commented Mar 28, 2020

Is there any progress on this? We are using ECS service Discovery and it uses SRV records.

@twreid
Copy link

twreid commented Mar 29, 2020

I actually did some digging and looks like a library c-ares is used for dns resolution and looking at it they do support SRV records. Unless I'm missing something.

@ChrisLahaye
Copy link

@twreid could you please let me know when you find a solution. We would also like to use envoy with SRV-based service discovery.

LukeShu pushed a commit to datawire/envoy that referenced this issue Apr 6, 2020
This is similar to the http2 frame protection, but rather than try to
guard
[header block || last body bytes || last chunk in chunk encoding ||
trailer block]
depending on end stream, which just gets messy, I opted to just add an
empty reference counted fragment after the body was serialized, which
appears to work just as well with a small theoretical overhead.  If
folks think the complexity is warranted I can of course do that instead.

Risk Level: Medium
Testing: new unit tests, integration test
Docs Changes: stats documented
Release Notes: added

Signed-off-by: Alyssa Wilk <alyssar@chromium.org>
Signed-off-by: Lizan Zhou <lizan@tetrate.io>
Signed-off-by: Jianfei Hu <jianfeih@google.com>
PiotrSikora pushed a commit to PiotrSikora/envoy that referenced this issue Apr 9, 2020
[release-1.1] bazel: replace tclap mirror. (envoyproxy#9072)
shalk pushed a commit to shalk/envoy that referenced this issue Nov 14, 2020
zh-translation: docs/root/intro/deprecated.rst
@descalzi
Copy link

Same here, I need ip/port (SRV records) from Consul. Thanks!

@FallenWarrior2k
Copy link

FallenWarrior2k commented Nov 30, 2020 via email

@descalzi
Copy link

descalzi commented Dec 1, 2020

Just because I think I'll be able to get the records on SRV (and non-Consul services) before I can get the necesary changes in my Consul agent for the whole sidecar thing needed ... :)

@twreid
Copy link

twreid commented Dec 1, 2020

For me the main reason is because my company would rather pay AWS for infrastructure than spin up a consul cluster and AWS service discovery uses SRV records.

@kylebevans
Copy link

I'm considering working on this, but I'm trying to get a bearing on what the desired direction is at this point. From poring over #517, #6379, #1477, #1835, #4290, #5186, #10361 and the code itself, it seems like the desire is to make the custom resolver interface asynchronous and then possibly hook the current dns resolver into it so that EDS clusters can use dns resolution. Am I reading that correctly? If so, do you still want to keep the custom resolver interface coupled to the dispatcher and use continuation passing/callbacks to achieve async?

The previous discussions seem to point to adding SRV support as a custom resolver once async resolvers are implemented. But I have these thoughts and questions about it:

  • If I'm reading correctly, the idea was that SRV resolution would be engaged if SrvResolver was specified as the resolver in an Address message or the url was configured like this: tcp://hostname.example.com:srv. However, since SRV records begin with an underscore and A, AAAA, and CNAME records can't begin with an underscore, I kind of like just triggering SRV if the hostname begins with an underscore or SrvResolver is specified as a custom resolver. What do you think?

  • I think config.endpoint.v3.LbEndpoint should also have a priority field added to map to a SRV priority and it could work the same way as a locality priority. What do you think?

  • Should SRV priority and weight override configured priority and weight specified on a config.endpoint.v3.LbEndpoint? My opinion is that config should take precedence since someone setting those fields with a SRV address is probably doing it on purpose and wants to override SRV.

  • There has been discussion about moving port handling into the dns interface, but the clusters still have to construct Host objects. Would it make it easier on the clusters for resolvers to just return Host objects directly? Maybe make a distinction between Address resolvers and ClusterLoadAssignment resolvers?

  • DNS resolver as an extension point #14310 talks about making DNS resolvers an extension. How does that affect the custom resolver interface and SRV resolution? I'm concerned since I'll be working in my spare time and probably won't be very fast if there is overlap.

No rush, I know the project is on break.

@mattklein123
Copy link
Member Author

I need to spend some time and page all of this back in. I will get back to you next week some time. I would like to see this one happen. Thank you for your interest!

@mattklein123
Copy link
Member Author

@kylebevans I'm trying to approach this from first principles since this issue has been opened for so long and so many changes have taken place over the years. Here are my general thoughts:

  1. Given that SRV records start with '_' and other records don't, it seems reasonable to do SRV resolution in that case. Stepping back though, I'm wondering if we don't need to worry about this at all? Meaning, at the DNS level, if we ask c-ares to do a resolution, can we potentially have a different callback if the returned record(s) happen to be SRV records? Would that be simpler?
  2. At this point static_dns already uses LocalityLbEndpoint style configuration. Could we actually just implement SRV resolution directly in the existing static_dns cluster? Meaning, if we happen to get SRV records we handle them, if we don't, we just do what we do today?
  3. Do SRV records always return host names vs. IP addresses? Meaning, there will always be a double resolution involved? If so, it might not be worth it to use static_dns. At this point we allow custom cluster types. Would it be better to implement a new extension cluster called srv_dns that is loosely based on static_dns but is custom built for SRV and then also handles the double resolution?
  4. I think config.endpoint.v3.LbEndpoint should also have a priority field added to map to a SRV priority and it could work the same way as a locality priority. What do you think?

I think this would be a pretty big change and I'm not sure it's worth it right now. Can we skip supporting priority in SRV until someone actually needs it? I'm not sure how commonly used it is. If we do end up needing it, I think the way to handle it would still be at the locality level, where we basically create localities for each distinct priority returned in the record set. This might be another data point in favor of a custom cluster type which could eventually do this.

  1. Should SRV priority and weight override configured priority and weight specified on a config.endpoint.v3.LbEndpoint? My opinion is that config should take precedence since someone setting those fields with a SRV address is probably doing it on purpose and wants to override SRV.

Modulo skipping priority in the MVP I agree.

  1. There has been discussion about moving port handling into the dns interface, but the clusters still have to construct Host objects. Would it make it easier on the clusters for resolvers to just return Host objects directly? Maybe make a distinction between Address resolvers and ClusterLoadAssignment resolvers?

Per above, I think what I would recommend is having the DNS interface just expose a new interface for getting SRV responses?

  1. DNS resolver as an extension point #14310 talks about making DNS resolvers an extension. How does that affect the custom resolver interface and SRV resolution? I'm concerned since I'll be working in my spare time and probably won't be very fast if there is overlap.

My quick take on this is that I don't think we should implement SRV as an extension resolver. I think it could probably just be built into the main resolver interface and implemented using c-ares?

Excited to see this worked on. I think I would recommend a small gdoc with a final proposed design that we can work through once you have looked through things some more? Thank you!

@kylebevans
Copy link

For 1 & 2, extending the existing dns resolver interface was the direction taken in venilnoronha's PR at #6379. During code review, a few things came up that seemed to pivot it to using the custom resolver interface instead:

  • the strict_dns and logical_dns clusters have to "know about" SRV and require changes in order to call resolve on SRV records and receive/process SRV responses. This is where keying off of underscore would come into play.

  • htuch expressed a desire to have the clusters agnostic to SRV, and recommended implementing SRV as a custom resolver to achieve that. I believe in this case, to use SRV you would have to use an EDS cluster.

  • Using a custom resolver also brings up another issue: the custom resolver interface is currently synchronous. There is an open issue to make it asynchronous that would be a prerequisite for implementing SRV as a custom resolver. It could still use c-ares under the hood.

I'm not 100% sure, but I think extending the existing dns resolver interface and also keeping the clusters agnostic is still possible. We could change the dns resolver interface to provide a data structure that would support either SRV or a regular dns request. Right now it provides a list of DnsResponses which the clusters use to create a HostVector. Inside a DnsResponse, only an address and TTL are supported which won't work for SRV.

So to sum up the big decisions:

  • Do you want the clusters to be agnostic to SRV?
  • If yes, do you want to achieve that by using the custom resolver interface or by changing the dns resolver interface to support SRV and regular dns with the same data structure?
  • If not, then we can use the existing dns resolver interface and change the clusters to use SRV if the hostname begins with an underscore.

Moving on to the other points:

  1. The RFC says it must return address records, but I did just try to create a SRV record with IP addresses in a Windows DNS server and it worked. I think we should plan on SRV returning either address records or IP addresses. I think in the normal case, it will return address records and a double resolution will be necessary.

  2. Sounds good to me.

  3. Nice

  4. I think I originally suggested this as a way to achieve agnostic clusters, so it depends on 1 & 2.

  5. I would be happy to create a google doc. Do you already have a Google organization that you keep these kind of docs in? If so, could you create the doc and invite me as an editor? The reason I ask is that Google won't allow moving a doc from one org to another, so if I create it myself then it will forever be separate from your other docs, which has happened to me in the past. If that's not an issue then I will just create the doc.

@mattklein123
Copy link
Member Author

At this point I think here is my rough thinking:

  1. Add SRV support to the existing resolver. For simplicity I think it's probably fine to have an API resolveSRV() which is independent from the other resolution API. We can potentially merge them later if needed.
  2. Given this discussion, my feeling is that we should add a new extension cluster called srv_dns. We can factor out code from static_dns and share it if we want, but I think there are enough differences that it should be independent. My thought on how this cluster would work is it should assume that the cluster load assignment is empty, and have its own configuration for an SRV name (or maybe a list of names). Given the response, we could eventually synthesize a CLA with multiple localities (using priority), but in the beginning for the MVP we could have a single locality and just adhere to the weight field. I don't think we need to use the EDS code at all.

I think ^ is pretty straightforward and should get us to where we need to be. I honestly haven't gone back through all the old issues and discussions but given the extension points we have today this makes the most sense to me. In terms of writing up a more fully formed version of this in a gdoc, we don't currently have a hosted drive (we probably should), so for now a doc from your account that is world commentable would be great. Thank you!

@kylebevans
Copy link

This makes sense to me. I'll start on the doc, thanks.

@kylebevans
Copy link

Hi, here is the design doc: https://docs.google.com/document/d/11yEE9qk_xr8bvdQLPdEuzBM9LpuXRUseNgQIf4y20E0/edit?usp=sharing

I'll await your feedback, but again there is no rush.

@mattklein123
Copy link
Member Author

Thanks @kylebevans. Very exciting to see this being worked on. I left some comments on the doc but it definitely looks like it's heading in the right direction!

@ntgsx92
Copy link
Contributor

ntgsx92 commented May 4, 2021

@kylebevans Hey Kyle, we're currently looking at using Envoy for internal routing which requires adding SRV record support in Envoy. I'm wondering how far have you gone in terms of implementation? I'm also happy to work with you to get a working PR started.

@ntgsx92
Copy link
Contributor

ntgsx92 commented May 6, 2021

@mattklein123 It seems like part of the current implementation is to add a new cluster for resolving SRV DNS query. We're currently trying to use Dynamic Forward Proxy filter and would love to use SRV query as well for resolving upstream addresses. It doesn't seem like this issue will fully address this feature request as DFP filter uses its own custom cluster instead.

Does it make sense to create a new custom cluster that resolves SRV query and can cache the results? What's your take in terms of implementation?

@mattklein123
Copy link
Member Author

In #125 (comment) I suggest a 2 part change. Part 1 is adding SRV support to the resolver. This part could be configured/used from the DFP code.

@kylebevans
Copy link

Hi everybody,

I'm making slow, but steady progress, and thanks for being patient. Part of this is synthesizing a cluster load assignment from SRV that I'm hoping will make it easier for other clusters to use, but it looks like DFP doesn't use a CLA. Like Matt said though, the resolver will support SRV lookups. I'm also working with the c-ares team to support getting the TTL from a SRV lookup, and I have an open PR there that this is kind of dependent on.

@jcreixell
Copy link

@kylebevans is there any progress on this one? we at SoundCloud are considering envoy and use SRV for service discovery. We already contributed some code for SRV SD to linkerd 1.x and would be happy to help out / provide feedback if needed

@kylebevans
Copy link

I started a new job in May, and I confess I haven't had a lot of time to work on this. I was kind of stuck on the part where I need to convert the resolve API from returning a raw pointer to an ActiveDnsQuery to using a unique_ptr. Changing that means carefully thinking through the lifetime, but it also means the changes are going to affect all DNS queries and not just SRV queries which is scary. I'm pretty sure I know what needs to be done at this point, but it will take a lot of thinking and care.

I'll try to block out some time soon to work on it. I am still committed to finishing it.

@jcreixell
Copy link

thanks @kylebevans, please keep us posted :)

@SuitespaceDev
Copy link

Anything in particular needing help with this?? Would be very handy for our platform framework.

jpsim pushed a commit that referenced this issue Nov 28, 2022
This adds a new `EnvoyMobile.podspec` (unfortunately, "Envoy" is already taken). On `pod install` Cocoapods will download the latest prebuilt framework at /releases unless a specific version is defined in the Podfile.

Once this is merged, we'll need to publish our podspec to the Cocoapods trunk. Moving forward, we'll also need to update the version listed in the podspec during the release process.

Description: Adds Cocoapods support for distributing the prebuilt Envoy.framework
Risk Level: Low
Testing: Clone the [test project](https://github.com/cwalo/EnvoyTest) and with this branch checked out locally, run `pod install`. Be sure the two repos sit in the same parent directory (or update the podspec path in the Podfile).
Docs Changes: Yes
Release Notes: No
Fixes: [#125](envoyproxy/envoy-mobile#125)

Signed-off-by: JP Simard <jp@jpsim.com>
jpsim pushed a commit that referenced this issue Nov 29, 2022
This adds a new `EnvoyMobile.podspec` (unfortunately, "Envoy" is already taken). On `pod install` Cocoapods will download the latest prebuilt framework at /releases unless a specific version is defined in the Podfile.

Once this is merged, we'll need to publish our podspec to the Cocoapods trunk. Moving forward, we'll also need to update the version listed in the podspec during the release process.

Description: Adds Cocoapods support for distributing the prebuilt Envoy.framework
Risk Level: Low
Testing: Clone the [test project](https://github.com/cwalo/EnvoyTest) and with this branch checked out locally, run `pod install`. Be sure the two repos sit in the same parent directory (or update the podspec path in the Podfile).
Docs Changes: Yes
Release Notes: No
Fixes: [#125](envoyproxy/envoy-mobile#125)

Signed-off-by: JP Simard <jp@jpsim.com>
@chobits
Copy link

chobits commented May 27, 2024

Hi everyone, I searched through the Envoy documentation and also found this open issue. From what I understand, Envoy's DNS resolution currently does not support SRV resolution, is that right?

I also came across an interesting DNS filter that is currently under development. According to the documentation for the DNS filter, it allows us to configure SRV records. Will these configured SRV records be used solely as fake DNS records for internal use?

@mikhainin
Copy link
Contributor

Hi everybody,

Based, on the design doc and the great job done by @kylebevans, I've opened #35160.
Basically, it introduces a new type of cluster (which is configured by an SRV record).
I would appreciate if someone can provide some feedback and guide to the following steps

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area/service discovery enhancement Feature requests. Not bugs or questions. help wanted Needs help!
Projects
None yet
Development

Successfully merging a pull request may close this issue.