-
Notifications
You must be signed in to change notification settings - Fork 1.3k
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
PR #992 breaks ingress traffic #6157
Comments
Thanks for testing the edge release @alex-berger! This is helpful feedback. We'd really like to adopt a different approach for ingresses more along the lines of nginx's For context, by default Linkerd does discovery for every outbound connection -- that is, we discover service metadata based on the destination ip:port. Ingresses tend to implement their own load balancing, however, so connections are initiated to each endpoint and not to a service address; and communication targets an endpoint we can't associate that traffic with a The I think, ideally, we'd get gloo to support something like the In the meantime, let's get more specific about the problems we're trying to solve:
|
@olix0r Let me share a picture of our ingress architecture annotated with answers to your questions. Basically, what we are looking for is kind of a "best effort" ingress mode which has the following properties:
|
In f8cc918, we started requiring the `l5d-dst-override` header. As described in linkerd/linkerd2#6157, this breaks some ingress configurations, especially those that may route to out-of-cluster resources. This change restores original-dst-addr routing for requests that do not include the `l5d-dst-override` header. Internally, this change centralizes the `DST_OVERRIDE_HEADER` and related utilities to the ingress module, as no other modules should have to know anything about it.
In f8cc918, we started requiring the `l5d-dst-override` header. As described in linkerd/linkerd2#6157, this breaks some ingress configurations, especially those that may route to out-of-cluster resources. This change restores original-dst-addr routing for requests that do not include the `l5d-dst-override` header. Internally, this change centralizes the `DST_OVERRIDE_HEADER` and related utilities to the ingress module, as no other modules should have to know anything about it.
In f8cc918, we started requiring the `l5d-dst-override` header. As described in linkerd/linkerd2#6157, this breaks some ingress configurations, especially those that may route to out-of-cluster resources. This change restores original-dst-addr routing for requests that do not include the `l5d-dst-override` header. Internally, this change centralizes the `DST_OVERRIDE_HEADER` and related utilities to the ingress module, as no other modules should have to know anything about it.
In f8cc918, we started requiring the `l5d-dst-override` header. As described in linkerd/linkerd2#6157, this breaks some ingress configurations, especially those that may route to out-of-cluster resources. This change restores original-dst-addr routing for requests that do not include the `l5d-dst-override` header. Internally, this change centralizes the `DST_OVERRIDE_HEADER` and related utilities to the ingress module, as no other modules should have to know anything about it.
The changes from linkerd/linkerd2-proxy#1016 should be included in this week's edge release. To test these changes before then, you can use workload annotations like:
This proxy version should once again support routing requests that do not have a |
@olix0r I tested the new proxy image |
Closing this issue, as this has been fixed in |
Bug Report
The recently merged 992 introduces a breaking change for ingress controllers running in ingress mode. It enforces all outbound request to have the
l5d-dst-override
set, which is a unrealistically strict requirement that breaks many ingress traffic pattern supported by ingress controllers.What is the issue?
In our specific case we are using gloo-edge (gateway) as ingress controller, which supports non Kubernetes upstreams (e.g. AWS Lambda Functions, EC2 Instances, ...) and also communicates with other
gloo
services without adding thel5d-dst-override
header. Note, gloo-edge has a nice linkerd plugin which automatically adds thel5d-dst-override
header to all request targeting Kubernetes upstreams. However, it does not add that header for other kind of upstreams (e.g. static upstreams, EC2 upstreams, ...) and it also does not add that header for request between gloo services (e.g. envoy XDS request, which are not part of the ingress traffic but are emitted by the gateway which is meshed).Impact
Our gloo-edge ingress gateway no longer work, they are completely broken and therefore ingress traffic in our cluster does not work.
Expected Behavior
linkerd-proxy
in ingress mode must accept requests which have nol5d-dst-override
header set and use thehost
resp.authority
header for routing decision (as fallback). This will support use-cases whereHow can it be reproduced?
edge-21.5.1
with linkerd-proxy imageghcr.io/olix0r/l2-proxy:a01b8bd2
.gloo
andgloo-gateway
services.Logs, error output, etc
linkerd check
outputEnvironment
ghcr.io/olix0r/l2-proxy:a01b8bd2
Possible solution
Revert PR 992.
Additional context
I stumbled over this while testing a proposed fix for #6146 (comment).
The text was updated successfully, but these errors were encountered: