Skip to content

Gateway sources

The gateway-grcproute, gateway-httproute, gateway-tcproute, gateway-tlsroute, and gateway-udproute
sources create DNS entries based on their respective resources.

Filtering the Routes considered

These sources support the --label-filter flag, which filters *Route resources
by a set of labels.

Domain names

To calculate the Domain names created from a *Route, this source first collects a set
of domain names from the *Route.

It then iterates over each of the status.parents with
a matching Gateway and at least one matching listener.
For each matching listener, if the
listener has a hostname, it narrows the set of domain names from the *Route to the portion
that overlaps the hostname. If a matching listener does not have a hostname, it uses
the un-narrowed set of domain names.

Domain names from Route

The set of domain names from a *Route is sourced from the following places:

  • If the *Route is a GRPCRoute, HTTPRoute, or TLSRoute, adds each of thespec.hostnames.

  • Adds the hostnames from any annotation on the *Route.
    This behavior is suppressed if the --ignore-hostname-annotation flag was specified.

  • If no endpoints were produced by the previous steps
    or the --combine-fqdn-annotation flag was specified, then adds hostnames
    generated from any--fqdn-template flag.

  • If no endpoints were produced by the previous steps, each
    attached Gateway listener will use its hostname, if present.

Matching Gateways

Matching Gateways are discovered by iterating over the *Route’s status.parents:

  • Ignores parents with a other than or a parentRef.kind other than Gateway.

  • If the --gateway-namespace flag was specified, ignores parents with a parentRef.namespace other
    than the specified value.

  • If the --gateway-label-filter flag was specified, ignores parents whose Gateway does not match the
    specified label filter.

  • Ignores parents whose Gateway either does not exist or has not accepted the route.

Matching listeners

Iterates over all listeners for the parent’s parentRef.sectionName:

  • Ignores listeners whose protocol field does not match the kind of the *Route per the following table:
kind protocols
  • If the parent’s parentRef.port port is specified, ignores listeners without a matching port.

  • Ignores listeners which specify an allowedRoutes which does not allow the route.


The targets of the DNS entries created from a *Route are sourced from the following places:

  1. If a matching parent Gateway has an annotation, uses
    the values from that.

  2. Otherwise, iterates over that parent Gateway’s status.addresses,
    adding each address’s value.

The targets from each parent Gateway matching the *Route are then combined and de-duplicated.

Last update: July 26, 2023
Back to top