Skip to content

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 example.com. 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 my-service.example.com, created by @bsideup.

NOTE

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):

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

Save and close your editor.

Edit the Service

  1. In a Service definition, add the custom-hostname annotation:
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: hello-world
  annotations:
    # the Service FQDN will become hello-world.{default-domain}
    custom-hostname: hello-world
spec:
[...]

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   http://hello-world.example.com   hello-world-nfqh2   hello-world-nfqh2   True