See thread on #sig-network-gateway-api (Slack).
This document details why supporting ListenerSet in cert-manager will fix a problem raised by application developers: they are used to managing TLS using the Ingress API and are not being able to manage TLS with Gateway API. This problem has been raised by the community in cert-manager#7473.
ingress2gateway
to support the cert-manager annotations.Before Gateway API existed, application developers were able to manage both the HTTP routing and the TLS configuration.
With Gateway API, developers no longer have control over the TLS configuration as they used to. The TLS configuration is now configured on the Gateway object, which is owned by the cluster operator. That's because Gateway objects represent actual infra that cost money (IPs, Google Cloud Load Balancers…). The idea is to be able to share this infrastructure across the Kubernetes cluster, and let the cluster operator manage it.
With Gateway API, the application developer needs to synchronize with the cluster operator to add the annotation cert-manager.io/cluster-issuer
on the Gateway resource and to add a new listener with the correct hostname. On top of that, there is can only be a single cert-manager issuer per Gateway.
With ListernerSets, which can be edited by developers, it becomes possible for developers to manage the TLS configuration of their routes. The platform admin keeps control of the Gateway, and the developer attaches HTTPRoutes and ListernerSets. cert-manager's annotations can either be set on the Gateway, or on the ListenerSet:
In the above example, the application developer was able to go with Let's Encrypt for issuing their certificate; another team may need to use the DigiCert ACME service instead. Unlike with the central Gateway approach, each hostname can have its own issuer.
ingress2gateway
Let's look at an example of Ingress resource, developers are able to manage both the HTTP and TLS side of things, including configuring cert-manager:
When moving to Gateway and HTTPRoute objects, developers can no longer manage the TLS and cert-manager configuration as they can only create and edit HTTPRoutes.
I've used the ingress2gateway tool to convert the above Ingress. Command used:
With the ListenerSet, it looks like this:
Since both the Gateway and the ListenerSet can have the cert-manager annotations, …