Replies: 1 comment 1 reply
-
|
Hi, Are you using transport-header or transparent? The recent version linkerd default is transport-header: https://linkerd.buoyant.io/t/clarification-on-outbound-transport-mode/768/2 |
Beta Was this translation helpful? Give feedback.
1 reply
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
Linkerd breaks the k8s service contract when routing meshed requests, targeting k8s services.
This discussion is only valid for old releases.
Found in version: 2.14.5
Fixed in version: I don't know exactly. For sure in 2.19.
Consider the following (simplified) scenario:

One would expect the request to fail, because the k8s service does not define port 80:

In reality however, the outbound linkerd proxy forwards the request, disregarding the k8s service contract.

In my understanding the components involved in handling the outgoing request interact in the following simplified manner:
Debugging this problem further led me to the linkerd diagnostics cli.
The diagnostics cli verifies that linkerd indeed resolves any random port for a service name.
The experiment can be reproduced by deploying the emojivoto demo application and modifying its web-svc service.
In combination with nginx's default server semantics, this can lead to very strange unexpected behavior (requests being successfully handled which should fail).
Documentation about how linkerd destination resolution works is rather sparse.
However, doing the same experiment with 2.19 shows that this "bug" has been fixed.
I did not find a github issue concerning itself with this problem.
Maybe someone knowledgeable in the community can link the respective PR that fixed this and save others running on "legacy" versions some time and their sanity.
Beta Was this translation helpful? Give feedback.
All reactions