Skip to content

HTTP/2 Support #4145

Description

@molikuner

Is your feature request related to a problem? Please describe.
We're currently running skipper as our API Gateway for external and internal traffic. There are upcoming internal requirements to support gRPC traffic.

Describe the solution you would like
Skipper should be able to receive and make unencrypted HTTP/2 requests and responses (including Trailers), such that gRPC traffic can flow through it.

Describe alternatives you've considered (optional)

  • Route gRPC traffic outside of Skipper (and optionally replace Skipper entirely)
  • Do not support gRPC traffic

Additional context (optional)
At the moment we do not have any strict requirements to inspect the gRPC traffic. For now we would simply like to route traffic based on Header and potentially Path predicates to different backends.

Would you like to work on it?
Yes, but likely we would need some support to answer some open questions (see below).

Related Issues
#1253
#906
#4085

Identified issues so far

  • Skipper silently drops Trailers from responses
  • Skipper doesn't accept h2c requests
  • Skipper doesn't create h2c & h2 requests

Open questions

  • Would you be open to accepting contributions in this direction?
  • Should there be a dedicated configuration option to enable HTTP/2 support (incoming and/or outgoing)?
  • Should there be a dedicated configuration option to enable Trailers forwarding?
  • explore NewClientConn from go stdlib #4085 mentions NewClientConn. Would contributions to enable HTTP/2 only be accepted if they're migrating to NewClientConn, or would it be okay to continue to use the existing Transport infrastructure for now?
  • Should the outgoing connections start to using the AppProtocol, e.g. values like kubernetes.io/h2c? How would this relate to the zalando.org/skipper-backend-protocol annotation?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions