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}!.

knYAML

Deploy the Service by running the command:

  1. kn service create hello \
  2. --image gcr.io/knative-samples/helloworld-go \
  3. --port 8080 \
  4. --env TARGET=World

Expected output

  1. Service hello created to latest revision 'hello-world' is available at URL:
  2. http://hello.default.${LOADBALANCER_IP}.sslip.io

The value of ${LOADBALANCER_IP} above depends on your type of cluster, for kind it will be 127.0.0.1 for minikube depends on the local tunnel.

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

    1. apiVersion: serving.knative.dev/v1
    2. kind: Service
    3. metadata:
    4. name: hello
    5. spec:
    6. template:
    7. spec:
    8. containers:
    9. - image: gcr.io/knative-samples/helloworld-go
    10. ports:
    11. - containerPort: 8080
    12. env:
    13. - name: TARGET
    14. value: "World"
  2. Deploy the Knative Service by running the command:

    1. kubectl apply -f hello.yaml

    Expected output

    1. service.serving.knative.dev/hello created

List your Knative Service

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

knkubectl

View a list of Knative services by running the command:

  1. kn service list

Expected output

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

View a list of Knative services by running the command:

  1. kubectl get ksvc

Expected output

  1. NAME URL LATESTCREATED LATESTREADY READY REASON
  2. hello http://hello.default.${LOADBALANCER_IP}.sslip.io 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:

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

Expected output

  1. Hello World!

Are you seeing curl: (6) Could not resolve host: hello.default.${LOADBALANCER_IP}.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:

  1. [Resolve]
  2. DNS=8.8.8.8
  3. 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!