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 gcr.io/knative-samples/helloworld-go \
--port 8080 \
--env TARGET=World \
--revision-name=world
Why did I pass in revision-name?

Note the name "world" which you passed in as "revision-name," naming your Revisions will help you to more easily identify them, but don't worry, you'll learn more about Revisions later.

Expected output

Service hello created to latest revision 'hello-world' is available at URL:
http://hello.default.127.0.0.1.sslip.io
  1. Copy the following YAML into a file named hello.yaml:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: hello
    spec:
      template:
        metadata:
          # This is the name of our new "Revision," it must follow the convention {service-name}-{revision-name}
          name: hello-world
        spec:
          containers:
            - image: gcr.io/knative-samples/helloworld-go
              ports:
                - containerPort: 8080
              env:
                - name: TARGET
                  value: "World"
    
  2. Deploy the Knative Service by running the command:

    kubectl apply -f hello.yaml
    
    Why did I pass in the second name, hello-world?

    Note the name hello-world which you passed in under metadata in your YAML file. Naming your Revisions will help you to more easily identify them, but don't worry if this if a bit confusing now, you'll learn more about Revisions later.

    Expected output

    service.serving.knative.dev/hello created
    
  3. To see the URL where your Knative Service is hosted, leverage the kn CLI:

    kn service list
    

    Expected output

    NAME    URL                                          LATEST        AGE   CONDITIONS   READY   REASON
    hello   http://hello.default.127.0.0.1.sslip.io   hello-world   13s   3 OK / 3     True
    

Ping your Knative Service

Ping your Knative Service by opening http://hello.default.127.0.0.1.sslip.io in your browser of choice or by running the command:

curl http://hello.default.127.0.0.1.sslip.io

Expected output

Hello World!
Are you seeing curl: (6) Could not resolve host: hello.default.127.0.0.1.sslip.io?

In some cases your DNS server may be set up not to resolve *.sslip.io 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:

[Resolve]
DNS=8.8.8.8
Domains=~sslip.io.

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