Repository navigation
Add agentgateway to CI & rename dataplane flag - #1598
Lior Lieberman (LiorLieberman) merged 8 commits into
Conversation
|
Current failure is a postgres timeout. I think CI just needs to be re-kicked |
Eitan Yarmush (EItanya)
left a comment
There was a problem hiding this comment.
🤖 Relocated with AI assistance; the original inline comment wording is preserved.
Moved from my review on #1628, which is stacked on this PR. The three inline comments and the ingress-contract portion of that review belong here:
I have some clarifying questions about what the actual ingress contract is since there are definitely dataplane specific checks in the tests
The benchmark-specific questions remain on #1628. The CI matrix suggestion is already addressed here.
| t.Fatalf("creating statusz client: %v", err) | ||
| var statusz *e2e.StatuszClient | ||
| if os.Getenv("E2E_DATAPLANE") != "agentgateway" { | ||
| statusz, err = e2e.NewStatuszClient(ctx) |
There was a problem hiding this comment.
Moved from my comment on #1628; this feedback belongs to #1598.
Can we use a more generic solution here?
There was a problem hiding this comment.
My plan is to just get both data planes to a working state in CI then iterate on a contract that both data planes implement. New contracts need would need to be persisted there instead of one off. So agree with the comment but will do it in a follow up
| t.Fatalf("timed out waiting for the parking gauge to satisfy the condition (last active=%d)", last) | ||
| } | ||
|
|
||
| func agentGatewayParkingCount(ctx context.Context) (int, bool) { |
There was a problem hiding this comment.
Moved from my comment on #1628; this feedback belongs to #1598.
Same question about unifying the data gathering mechanism here
Keith’s reply on the original thread points to this PR’s description and its goal of defining a shared proxy contract.
There was a problem hiding this comment.
Yeah +1 to my comment above; we'll define it in a shared contract
Lior Lieberman (LiorLieberman)
left a comment
There was a problem hiding this comment.
Thanks Keith, LGTM overall a few questions
| case "envoy": | ||
| authority, ok := accessLogField(line.text, "authority") | ||
| if ok && strings.HasSuffix(authority, ":"+port) && strings.Contains(line.text, "/actor/"+actorName) { | ||
| t.Logf("egress gateway tunneled the request: %s", line.text) | ||
| return true | ||
| } | ||
| case "agentgateway": |
There was a problem hiding this comment.
is there a way we can wrap it somehow to avoid many switch cases
There was a problem hiding this comment.
I can make an interface in the testbed to encode all the dataplane specific behavior. FWIW, my plan is to create a dataplane contract so some of these nuances/features get described in a central place, but we'll have the test wrapper to make this cleaner in the mentime
There was a problem hiding this comment.
That being said it's a bigger change than the few conditionals we have today, so I'll push it in a new commit to get some feedback
| gatewayContainer = "envoy" | ||
| // The access log's line prefix, from the HttpConnectionManager | ||
| // text_format_source in manifests/ate-install/atenet-egress.yaml. |
There was a problem hiding this comment.
where did these go to
There was a problem hiding this comment.
Abstracted into accessLogField and the caller assertEgressGatewayConnect
| if err != nil { | ||
| t.Fatalf("creating statusz client: %v", err) | ||
| var statusz *e2e.StatuszClient | ||
| if os.Getenv("E2E_DATAPLANE") != "agentgateway" { |
There was a problem hiding this comment.
We really need to avoid if envoy if agentgateway everywhere? is there a way we can initialize it in the suit once and avoid switch cases everywhere?
| collectorNamespace = "otel-system" | ||
| collectorService = "opentelemetry-collector" | ||
| collectorPromPort = 8889 | ||
| routerStatsPort = 15020 |
There was a problem hiding this comment.
what is this port for?
There was a problem hiding this comment.
Will rename to prefix with agentgateway. The current metrics reader in our test code relies on OTLP exported metrics while agentgateway just has native prom metrics
Signed-off-by: Keith Mattix II <[email protected]>
Signed-off-by: Keith Mattix II <[email protected]>
Signed-off-by: Keith Mattix II <[email protected]>
Signed-off-by: Keith Mattix II <[email protected]>
Signed-off-by: Keith Mattix II <[email protected]>
Signed-off-by: Keith Mattix II <[email protected]>
Signed-off-by: Keith Mattix II <[email protected]>
25c30d6 to
67d6a87
Compare
Lior Lieberman (LiorLieberman)
left a comment
There was a problem hiding this comment.
LGTM
Thanks Keith Mattix II (@keithmattix)
abd45ad
into
agent-substrate:main
Run agentgateway data plane tests as a part of substrate CI (non-blocking to start so we can confirm it's not flaky). Also, change the
--atenet-routerflag to--atenet-dataplaneto make it clearer that the flag controls ingress and egress.I've run the e2es locally across gVisor and microVM plus the MITM variants for both. The only skip we do for agentgateway is
TestIngressProtocolDowngradebecause 1. the behavior its testing only exists on the non-CONNECT atunnel ingress path and agentgateway only sends CONNECT to atunnel and 2. I'm not sure that we want this to be a part of the contract that substrate is bound by (e.g. do we really want to commit to atunnel always parsing HTTP?).My goal with getting both dataplanes into CI is to start taking steps to codify the proxy (router + egress PEP) contract for substrate. The telemetry they emit, atunnel expectations, etc. are all important contracts to explicitly call out so that they don't become too coupled to a single dataplane implementation.