Skip to content

feat(infra): Add remote infrastructure provider#9027

Open
zac-nixon wants to merge 21 commits into
envoyproxy:mainfrom
zac-nixon:znixon/remote-provider-polished
Open

feat(infra): Add remote infrastructure provider#9027
zac-nixon wants to merge 21 commits into
envoyproxy:mainfrom
zac-nixon:znixon/remote-provider-polished

Conversation

@zac-nixon

@zac-nixon zac-nixon commented May 18, 2026

Copy link
Copy Markdown

What type of PR is this?
/feature

What this PR does / why we need it:

This change allows for users to customize how their Envoy infrastructure is deployed. The concept is similar to how xDS is customized, where Envoy Gateway allows for users to specify a remote process [either via UDS or TCP] that will take charge of provisioning infrastructure. This unlocks the ability to define your Envoy configuration using the Gateway API but to run your Envoy fleet wherever you want.

Some big changes:

  • Introduce a remote infrastructure provider, it utilizes a gRPC to communicate with a remote server, using the same connection and configuration primitives already used for the xDS extension.
  • Refactor port shifting to be toggle-able by the Envoy Gateway CRD.
  • Refactor how Kubernetes configuration is detected by using a common utility on the provider.

In order to get the Gateway address back to the main Envoy Gateway process, I had my extension server create a server with my external address, but with the Envoy Gateway labels.

apiVersion: v1
kind: Service
metadata:
  finalizers:
  - my-finalizer/service-finalizer
  labels:
    app.kubernetes.io/component: proxy
    app.kubernetes.io/managed-by: envoy-gateway
    app.kubernetes.io/name: envoy
    gateway.envoyproxy.io/delegated: <my extension-server>
    gateway.envoyproxy.io/owning-gateway-name: egfoo
    gateway.envoyproxy.io/owning-gateway-namespace: default
  name: default-egfoo-3ec9996df3
  namespace: envoy-gateway-system
spec:
  loadBalancerClass: my-special-lb-class
  ports:
  - name: http-80
    port: 80
    protocol: TCP
    targetPort: 80
  sessionAffinity: None
  type: LoadBalancer
status:
  loadBalancer:
    ingress:
    - hostname: <REDACTED>

This allows Envoy Gateway to correctly set my Gateway status:

nixozach@80a997300bd5 gateway % kubectl get gateway egfoo
NAME    CLASS                    ADDRESS                                                                               PROGRAMMED   AGE
egfoo   envoy-ai-gateway-basic   <REDACTED>   True         18d

Scenarios tested:

  • Ensured that xDS extension still works [using Envoy AI Gateway]
  • Ensured that Ratelimiting works with remote provider
  • Validated that the existing Kubernetes provider still functions properly.

Things not done, but discussed at contributor meeting:

  • It was suggested to add parameters to tune xDS timeouts, however, the timeouts seem to be configurable already.

Which issue(s) this PR fixes:

Fixes #8620

Release Notes: Yes

@zac-nixon
zac-nixon requested a review from a team as a code owner May 18, 2026 23:51
@netlify

netlify Bot commented May 18, 2026

Copy link
Copy Markdown

Deploy Preview for cerulean-figolla-1f9435 ready!

Name Link
🔨 Latest commit 5b61000
🔍 Latest deploy log https://app.netlify.com/projects/cerulean-figolla-1f9435/deploys/6a59104c315e6a0008860617
😎 Deploy Preview https://deploy-preview-9027--cerulean-figolla-1f9435.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: d82daacea8

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment on lines +98 to +101
c := &InfraClientImpl{
k8sClient: k8sClient,
remoteService: extensionCfg,
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Set the remote TLS secret namespace

When a remote infrastructure service enables TLS/mTLS and its certificateRef or clientCertificateRef omits namespace, this client leaves InfraClientImpl.namespace empty, so GenerateGRPCOptions calls ValidateSecretObjectReference(..., "") and looks for the Secret in an empty namespace. The existing extension manager passes cfg.ControllerNamespace for the same helper; without doing that here, otherwise valid remote-infra TLS configs fail during EG startup unless every Secret ref explicitly sets a namespace.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This code is just refactored from the existing gRPC client code, I don't think we want to change this behavior.

@zac-nixon
zac-nixon force-pushed the znixon/remote-provider-polished branch 2 times, most recently from df4ff88 to ae677f4 Compare May 22, 2026 01:26
@zhaohuabing

Copy link
Copy Markdown
Member

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: ae677f47fe

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread internal/gatewayapi/runner/runner.go Outdated
}

span.AddEvent("translate", trace.WithAttributes(attribute.Int("resources.count", len(*val))))
needModifyListenerPort := r.EnvoyGateway.Provider == nil || r.EnvoyGateway.Provider.Type == egv1a1.ProviderTypeKubernetes

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Preserve listener port rewriting for remote providers

This gate makes ModifyListenerPort false for every custom provider, so remote infrastructure never runs servicePortToContainerPort rewriting. As a result, remote deployments ignore the documented default behavior of shifting privileged listener ports (and any per-EnvoyProxy override), which can leave listeners on ports like 80/443 that non-privileged runtimes cannot bind.

Useful? React with 👍 / 👎.

Comment thread api/v1alpha1/envoyproxy_helpers.go Outdated
Comment on lines +66 to +70
if e.Spec.Provider.Type == EnvoyProxyProviderTypeRemote && e.Spec.Provider.Remote == nil {
if e.Spec.Provider.Remote == nil {
return false
}
if e.Spec.Provider.Kubernetes.UseListenerPortAsContainerPort == nil {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Read remote port-switch setting from remote provider

The remote branch is guarded by Remote == nil and then immediately returns false on the same condition, so the configured remote provider block is never consulted. This means spec.provider.remote.useListenerPortAsContainerPort is effectively ignored and behavior falls back to the Kubernetes field/path, breaking the new remote provider contract.

Useful? React with 👍 / 👎.

Comment on lines +99 to +102
c := &InfraClientImpl{
k8sClient: k8sClient,
remoteService: extensionCfg,
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Initialize namespace for remote TLS secret lookups

The remote infra client passes i.namespace into GenerateGRPCOptions for TLS secret resolution, but namespace is never initialized in the constructor. When certificateRef.namespace is omitted (common same-namespace usage), secret lookup runs against an empty namespace and fails, preventing TLS-configured remote infrastructure connections from starting.

Useful? React with 👍 / 👎.

@codecov

codecov Bot commented May 22, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 75.84000% with 151 lines in your changes missing coverage. Please review.
✅ Project coverage is 75.44%. Comparing base (2df4a96) to head (55f8c8c).
⚠️ Report is 14 commits behind head on main.

Files with missing lines Patch % Lines
internal/extension/grpc.go 68.79% 26 Missing and 18 partials ⚠️
api/v1alpha1/validation/envoygateway_validate.go 38.77% 29 Missing and 1 partial ⚠️
internal/infrastructure/remote/conversion.go 92.38% 8 Missing and 8 partials ⚠️
internal/infrastructure/remote/remote_client.go 71.42% 10 Missing and 6 partials ⚠️
api/v1alpha1/envoygateway_helpers.go 77.77% 8 Missing and 2 partials ⚠️
internal/infrastructure/manager.go 12.50% 7 Missing ⚠️
internal/infrastructure/remote/infra.go 86.66% 3 Missing and 3 partials ⚠️
internal/provider/kubernetes/status.go 33.33% 4 Missing and 2 partials ⚠️
internal/provider/kubernetes/kubernetes.go 73.33% 1 Missing and 3 partials ⚠️
internal/provider/runner/runner.go 0.00% 3 Missing ⚠️
... and 6 more
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #9027      +/-   ##
==========================================
+ Coverage   75.41%   75.44%   +0.03%     
==========================================
  Files         252      256       +4     
  Lines       41660    42073     +413     
==========================================
+ Hits        31417    31744     +327     
- Misses       8113     8180      +67     
- Partials     2130     2149      +19     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

// Kubernetes defines the configuration of the Kubernetes provider. This provider retrieves Envoy configuration
// from a Kubernetes API.
// +optional
Kubernetes *EnvoyGatewayKubernetesCustomProvider `json:"kubernetes,omitempty"`

@zhaohuabing zhaohuabing May 22, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like the split between EnvoyGatewayKubernetesConfiguration and EnvoyGatewayKubernetesInfrastructureConfiguration. It makes sense that custom.infrastructure.remote does not consume Kubernetes infra settings, since the remote infrastructure provider owns its own deployment/HPA/PDB/service details.

The confusing part is discoverability: from the API shape, it’s hard to infer that custom.resource.kubernetes is intended to pair with custom.infrastructure.remote for the “watch Gateway API resources from Kubernetes, but delegate infra provisioning remotely” use case.

Also, the current API shape implies a 2x2 matrix, but we only support two of the four combinations.

How about introducing a remote infrastructure type to provider.kubernetes?

provider:
  type: Kubernetes
  kubernetes:
    watch: ...
    client: ...
    infrastructure:
      type: Remote
      remote:
        service:
          fqdn:
            hostname: infra-manager.example.com
            port: 50051

We can define a validation rule to prevent the settings in EnvoyGatewayKubernetesInfrastructureConfiguration being configured for provider.kubernetes.infrastructure.type = remote.

cc @envoyproxy/gateway-maintainers

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The goal of this remote infrastructure provider was to have it plug in with other provider types as well, for my specific use-case I am using Kubernetes + Remote but I think it makes sense to leave the API open enough in the future to support arbitrary combinations. Happy to make the change you suggest if we don't value the flexibility!

@zhaohuabing zhaohuabing May 27, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, that makes sense.

My main concern is about the API contract users will infer from the current shape. Since custom.resource and custom.infrastructure look like independent axes, users may reasonably expect all combinations to be supported.

Can we make the currently supported combinations explicit through validation and documentation/examples?

For example, we can document and validate resource.type=Kubernetes + infrastructure.type=Remote as supported now, and reject combinations that we don't support.

That would preserve the extensibility of the API while making the supported behavior clearer to users.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can definitely do that. I wanted to gain alignment on this API before putting the effort into creating documentation. I'll start working on the documentation and validations that you outlined.

@zac-nixon
zac-nixon force-pushed the znixon/remote-provider-polished branch from ae677f4 to b566cc4 Compare May 22, 2026 18:26
@zhaohuabing

Copy link
Copy Markdown
Member

Could we also add CI-backed coverage for the remote infrastructure provider path?

Since this PR introduces a new infrastructure provider, I think we should have at least one end-to-end or process-level test that exercises the intended custom.resource.type=Kubernetes + custom.infrastructure.type=Remote flow. The test does not need to cover every remote implementation detail, but it should verify that Envoy Gateway can connect to a remote infra service, send the expected infra request, and update Gateway/status behavior as expected.

This would give us confidence similar to what we want from the standalone/host-mode test suite, while making sure the newly introduced provider is covered in CI.

@zac-nixon
zac-nixon force-pushed the znixon/remote-provider-polished branch 11 times, most recently from 1ab7da9 to 2850d7a Compare June 1, 2026 20:15
@zac-nixon

Copy link
Copy Markdown
Author

@zhaohuabing I apologize for the delay. I have added what you requested:

  • Integration test
  • E2E test
  • Example Infra server
  • Documentation

I see the PR has grown quite large, what is the project's policy about that? Should I break these commits into smaller PRs?

@zac-nixon

Copy link
Copy Markdown
Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 2850d7aa29

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

if rateLimit.URL == nil {
return fmt.Errorf("empty ratelimit url settings")
}
_, err := url.Parse(*rateLimit.URL)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Reject rateLimit URLs without a grpc host and port

When a Custom provider sets rateLimit.url to a bare host:port value or any URL without an explicit port, this validation succeeds because url.Parse accepts those strings. The xDS translator later calls getRateLimitServiceGrpcHostPort, which parses the same value and panics on ParseUint(u.Port()) when the port is empty, so enabling global rate limit with a bad remote/custom URL can take down translation instead of failing config validation. Please require the form the translator expects, e.g. grpc://<host>:<port>.

Useful? React with 👍 / 👎.

Comment on lines +170 to +175
if isInfraRemote {
// We won't expect any Envoy replicas, hence we can assume (and document) that the remote provider should
// guarantee the Envoy addresses are made available if the Envoy data plane is ready to serve traffic.
gw.Status.Conditions = MergeConditions(gw.Status.Conditions,
newCondition(string(gwapiv1.GatewayConditionProgrammed), metav1.ConditionTrue, string(gwapiv1.GatewayConditionProgrammed),
fmt.Sprint(messageFmtProgrammedRemotely), gw.Generation))

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Program remote Gateways that only provide spec addresses

For Remote infrastructure providers that do not also create a Kubernetes Service, this remote-specific branch is never reached: with svc == nil and spec.addresses set the function returns earlier with AddressNotUsable, and with no Service-derived addresses updateGatewayProgrammedCondition returns AddressNotAssigned before this block. That makes the new Remote provider unusable for the documented non-Kubernetes substrate case unless it still creates a Kubernetes Service; a Gateway whose remote provider has assigned the requested address remains reported as not programmed.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is intentional and documented. The Service is how we propagate metadata back to the main Envoy Gateway process. Building out a new status propagation mechanism would be a lot of work, and probably out of scope of this PR.

@zac-nixon
zac-nixon force-pushed the znixon/remote-provider-polished branch from 2850d7a to 141e2e6 Compare June 1, 2026 22:29
@zhaohuabing

zhaohuabing commented Jun 2, 2026

Copy link
Copy Markdown
Member

I see the PR has grown quite large, what is the project's policy about that? Should I break these commits into smaller PRs?

We encourage contributors to raise an API PR first to reach agreement before implementation, to avoid spending time in the wrong direction.

Since you’ve already included the API changes in this PR, I think it’s fine to move forward with everything in one PR.

@zac-nixon
zac-nixon force-pushed the znixon/remote-provider-polished branch 3 times, most recently from 6872c51 to 43ca55b Compare June 2, 2026 22:17
Comment thread api/v1alpha1/envoygateway_types.go Outdated
// Must be a grpc:// URL with an explicit host and port, e.g. grpc://example.com:50051.
// The default is the Kubernetes service deployed by the Kubernetes Infrastructure manager.
// +optional
URL *string `json:"url"`

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is this needed in the PR ?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

or can this be moved to a remote specific setting

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can remove this for now, I wanted to give remote implementations a way to inject their own rate limiter URL as it may not live within the cluster. My own implementation (currently) doesn't support a rate limiter so I didn't even have a great way to test it.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah prefer removing this from the initial PR, to speed up merging this

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks. Reverted it with this commit:
4d7bb2b

rpc DeleteRateLimitInfra(DeleteRateLimitInfraRequest) returns (DeleteRateLimitInfraResponse) {};
}

message CreateOrUpdateProxyInfraRequest {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can we make these fields strongly typed

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

From the initial conversation we had, #8620 (comment), the idea was to send bytes over and let implementations de-serialize the bytes into IR. Happy to refactor the code to be strongly typed.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah prefer strongly typed fields here, starting with a minimal subset of must haves from the current IR go struct

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Switched to strongly typed IR sent via the gRPC inferface: 5456dce. I only included the fields that my remote infra server uses to materialize the dataplane, but it should be trivial to add more data later on for other use-cases.

Validated by..
1/ unit tests
2/ integration tests
3/ the remote infra e2e test

--- PASS: TestRemoteInfra (33.34s)
    --- PASS: TestRemoteInfra/RemoteInfraTCPRoute (12.43s)
        --- PASS: TestRemoteInfra/RemoteInfraTCPRoute/Validate_Gateway_status (1.01s)
        --- PASS: TestRemoteInfra/RemoteInfraTCPRoute/Remotely_managed_data_plane_serves_traffic (10.38s)
        --- PASS: TestRemoteInfra/RemoteInfraTCPRoute/Validate_remotely_managed_data_plane_gets_cleaned_up (1.01s)
PASS
ok  	github.com/envoyproxy/gateway/test/e2e/remote_infra	33.406s

4/ Our own in house e2e test suite for our remote infra server (looking forward to open-sourcing it!)

@zac-nixon
zac-nixon force-pushed the znixon/remote-provider-polished branch 4 times, most recently from 55f8c8c to 133feac Compare July 16, 2026 16:20
zac-nixon added 21 commits July 16, 2026 09:22
Signed-off-by: Zachary Nixon <nixozach@amazon.com>
…r remote provider

Signed-off-by: Zachary Nixon <nixozach@amazon.com>
Signed-off-by: Zachary Nixon <nixozach@amazon.com>
…on generation

Signed-off-by: Zachary Nixon <nixozach@amazon.com>
…mmed

Signed-off-by: Zachary Nixon <nixozach@amazon.com>
…on to be shared between xds mutator and remote infrastructure

Signed-off-by: Zachary Nixon <nixozach@amazon.com>
Signed-off-by: Zachary Nixon <nixozach@amazon.com>
…iting when using remote provider

Signed-off-by: Zachary Nixon <nixozach@amazon.com>
Signed-off-by: Zachary Nixon <nixozach@amazon.com>
Signed-off-by: Zachary Nixon <nixozach@amazon.com>
Signed-off-by: Zachary Nixon <nixozach@amazon.com>
Signed-off-by: Zachary Nixon <nixozach@amazon.com>
Signed-off-by: Zachary Nixon <nixozach@amazon.com>
Signed-off-by: Zachary Nixon <nixozach@amazon.com>
Signed-off-by: Zachary Nixon <nixozach@amazon.com>
Signed-off-by: Zachary Nixon <nixozach@amazon.com>
Signed-off-by: Zachary Nixon <nixozach@amazon.com>
Signed-off-by: Zachary Nixon <nixozach@amazon.com>
Signed-off-by: Zachary Nixon <nixozach@amazon.com>
Signed-off-by: Zachary Nixon <nixozach@amazon.com>
Signed-off-by: Zachary Nixon <nixozach@amazon.com>
@zac-nixon
zac-nixon force-pushed the znixon/remote-provider-polished branch from 133feac to 5b61000 Compare July 16, 2026 17:09
// JSON. It is carried as opaque bytes because the EnvoyProxy CRD schema is
// large and evolves independently of this contract; providers that need it
// can unmarshal the JSON into their own representation.
bytes config = 4;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hey is this field needed in the first iteration ? if not, can we rm it

@zac-nixon zac-nixon Jul 18, 2026

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We're using this config field to populate
1/ Telemetry
2/ Custom bootstrap configuration arguments
3/ Log level
4/ IP Address Type

if you'd like I can add those directly to the IR payload, I chose this approach because the EnvoyProxy object is already available in the public API folder

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah lets make this subset typed, thanks

// UseListenerPortAsContainerPort disables the port shifting feature in the Envoy Proxy.
// When set to false, if the service port is a privileged port (1-1023), add a constant to the value converting it into an ephemeral port.
// This allows the container to bind to the port without needing a CAP_NET_BIND_SERVICE capability.
// The default value is True, which means no port shifting occurs.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

does this work as mentioned, codex says its unset by default

@zac-nixon zac-nixon Jul 18, 2026

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is used here: https://github.com/zac-nixon/gateway/blob/5b61000a8143f2373734e2347291dc2fb16637ba/api/v1alpha1/envoyproxy_helpers.go#L61

hmm.. perhaps the logic is wrong. I can remove it? I will admit the port shifting was a bit weird to me, what do you think, should this be customizable?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the field was added to undo the default shift logic ( to deal with being unable to bind to 80 and 443 by default), the remote provide is okay with 10080 and 10443 by default, then this field isnt needed

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I remember now, as we expose the direct Envoy listener, it would mean clients would have to connect via port 10080 and 10443 rather than ports 80 and 443.

I added the logic incase other remote strategies wanted the shifting, but I disabled by default here; https://github.com/zac-nixon/gateway/blob/5b61000a8143f2373734e2347291dc2fb16637ba/internal/gatewayapi/listener.go#L1286-L1290

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ack, thanks

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature Request] Customized Infrastructure Providers

4 participants