Skip to content

Deploying your first Knative Service

In this tutorial, you will deploy a "Hello world" service.

Since our "Hello world" Service is being deployed as a Knative Service, not a Kubernetes Service, it gets some super powers out of the box 🚀.

Knative Service: "Hello world!"

First, deploy the Knative Service. This service accepts the environment variable, TARGET, and prints Hello ${TARGET}!.

Deploy the Service by running the command:

kn service create hello \
--image \
--port 8080 \
--env TARGET=World

Expected output

Service hello created to latest revision 'hello-world' is available at URL:
The value of ${LOADBALANCER_IP} above depends on your type of cluster, for kind it will be for minikube depends on the local tunnel.

  1. Copy the following YAML into a file named hello.yaml:

    kind: Service
      name: hello
            - image:
                - containerPort: 8080
                - name: TARGET
                  value: "World"
  2. Deploy the Knative Service by running the command:

    kubectl apply -f hello.yaml

    Expected output created

List your Knative Service

To see the URL where your Knative Service is hosted, leverage the kn CLI:

View a list of Knative services by running the command:

kn service list

Expected output

NAME    URL                                                LATEST        AGE   CONDITIONS   READY
hello   http://hello.default.${LOADBALANCER_IP}   hello-00001   13s   3 OK / 3     True

View a list of Knative services by running the command:

kubectl get ksvc

Expected output

NAME    URL                                                LATESTCREATED   LATESTREADY   READY   REASON
hello   http://hello.default.${LOADBALANCER_IP}   hello-00001     hello-00001   True

Access your Knative Service

Access your Knative Service by opening the previous URL in your browser or by running the command:

echo "Accessing URL $(kn service describe hello -o url)"
curl "$(kn service describe hello -o url)"

Expected output

Hello World!
Are you seeing curl: (6) Could not resolve host: hello.default.${LOADBALANCER_IP}

In some cases your DNS server may be set up not to resolve * addresses. If you encounter this problem, it can be fixed by using a different nameserver to resolve these addresses.

The exact steps will differ according to your distribution. For example, with Ubuntu derived systems which use systemd-resolved, you can add the following entry to the /etc/systemd/resolved.conf:


Then simply restart the service with sudo service systemd-resolved restart.

For MacOS users, you can add the DNS and domain using the network settings as explained here.

Congratulations 🎉, you've just created your first Knative Service. Up next, Autoscaling!

Back to top

We use analytics and cookies to understand site traffic. Information about your use of our site is shared with Google for that purpose. Learn more.

× OK