Skip to content

Spike: Test new ingress/gateway controller #1538

@Richard87

Description

@Richard87

Make sure it supports our needs:

  • Slow server responses (over 30sec, Read/Send timeouts): timeouts are disabled by default. If timeouts are set they are for the full lifecycle of the request, which is different from ingress nginx where timeouts are between successive reads/writes. Response details, e.g. timeouts, are logged in gateway pod in field response_code_details and response_flags,
  • Long running websockets ( up to 60min, with/without ping-pongs ): web sockets does not seem to be affected by request timeouts. Setting a low timeout causes normal http requests to fail, but web socket connections works fine even when ping/pongs are set to a value higher than request timeout. We can therefore safely disregard the websocketfriendly ingressConfiguration
  • Large body sizes: tested upload of 3GB file without and issues
  • Proxy Buffering: not supported
  • Sticky Sessions: currently not implemented in Istio, ref Implement SessionPersistence in Gateway API istio/istio#55839. See comment
  • Server Sent Events
  • Metrics
  • Log (json)
  • Enforce http->https redirection works for ALL routes (default http route for port 80), Prefere one global rule (example)
  • Ensure same hostname cannot be used across applications (admission webhook?)
  • Ingress: IP Allow list: not supported
  • Test Client Certificate Authentication - https://kubernetes.slack.com/archives/CR0H13KGA/p1765547533826529 Currently we have 3 options:
    1. Give the user their own gateway, loadbalancer and IP with ClientCert config
    2. Configure TLS Passtrough, mount certificate secret into pod, let Application manage tls termination and validation themselves (possibly running a nginx proxy)
    3. Not supporting the feature / Waiting for ListenerSet to support it natively: I think we should opt for this: three apps have configured it, and we should inform then that this feature will be removed
  • Set HSTS on all responses (Strict-Transport-Security header)
  • Cert Mananger configure towards gateway (docs), request Digicert Staging account
  • Operator
    • Configure Network Policy (configure allowed namespaces in helm values and put in radix-deny-traffic-from-other-ns created by operator)
    • Enforce oauth2 service in proxy mode
    • Create single httproute pr component for all hostnames with reference to common gateway and component-specifcic-listener.
  • Load balancer k8s service: currently uses hardcoded ip, should use named azure ip resource as annotation service.beta.kubernetes.io/azure-pip-name (docs)
  • Migration
  • Migrate: to migrate part of the traffic
    • Migrate specific apps by hand upfront to teste responses and rewquest, status codes etc. Consider using DNS Loadbalancing
  • Load testing with long running requests, changing routes, slow responsnes, high volume

Ignoring tasks:

  • Remove response Server header + other istio specific headers (?) No, its public anyway in radix-flux/operator
  • Should we use ExternalDNS to allow users to test new ingress controller before being forced over? No, we assume they dont care to test, and it should just work anyway
  • Not feasable for now: Default backend (503) (Would be amazing if we can return the body from the backend if it is included, but only fallback to our default backend if its blank)

Metadata

Metadata

Labels

No labels
No labels

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions