Setting up a custom domain per Service

By default, Knative uses the {route}.{namespace}.{default-domain} fully qualified domain name for the Service, where default-domain is You are able to change the default-domain following the Setting up a custom domain guide.

This guide documents the process to use a custom FQDN for a Service, like, created by @bsideup.

There is currently no official process to set up a custom domain per Service. The topic is being discussed here.

Edit using kubectl

  1. Edit the domainTemplate entry on the config-network configuration. You can find more information about it here:

    kubectl edit cm config-network --namespace knative-serving

    Replace the domainTemplate with the following (the spaces must be respected):

      domainTemplate: |-
        {{if index .Annotations "custom-hostname" -}}
          {{- index .Annotations "custom-hostname" -}}
        {{else -}}
          {{- .Name}}.{{.Namespace -}}
        {{end -}}

    Save and close your editor.

Edit the Service

  1. In a Service definition, add the custom-hostname annotation:

    kind: Service
      name: hello-world
        # the Service FQDN will become hello-world.{default-domain}
        custom-hostname: hello-world

    Apply your changes.

Verify the changes

  1. Verify that the Service was created with the specified hostname:
kubectl get ksvc hello-world

NAME          URL                              LATESTCREATED       LATESTREADY         READY   REASON
hello-world   hello-world-nfqh2   hello-world-nfqh2   True