Creating a RESTful Service - Go
A Kubernetes cluster with Knative Serving installed and DNS configured.
installed locally.
envsubst
installed locally. This is installed by thegettext
package. If not installed it can be installed by a Linux package manager, or by Homebrew on OS X.Download a copy of the code:
Setup
In order to run an application on Knative Serving a container image must be available to fetch from a container registry.
This sample uses Docker for both building and pushing.
To build and push to a container registry using Docker:
From the
knative-docs
directory, run the following command to set your container registry endpoint as an environment variable.This sample uses Google Container Registry (GCR):
export REPO="gcr.io/<YOUR_PROJECT_ID>"
Set up your container registry to make sure you are ready to push.
To push to GCR, you need to:
- Create a .
- Enable the Google Container Registry API.
- Setup an to give the Docker client the permissions it needs to push.
If you are using a different container registry, you will want to follow the registry specific instructions for both setup and authorizing the image push.
-
--tag "${REPO}/rest-api-go" \
--file docs/serving/samples/rest-api-go/Dockerfile .
Push your container to a container registry:
docker push "${REPO}/rest-api-go"
Substitute the image reference path in the template with our published image path. The command below substitutes using the ${REPO} variable into a new file called
docs/serving/samples/rest-api-go/sample.yaml
.docs/serving/samples/rest-api-go/sample.yaml
Now that our image is available from the container registry, we can deploy the Knative Serving sample:
kubectl apply --filename docs/serving/samples/rest-api-go/sample.yaml
The above command creates a Knative Service within your Kubernetes cluster in the default namespace.
Explore the Service
The Knative Service creates the following child resources:
- Knative Route
- Knative Configuration
- Knative Revision
- Kubernetes Deployment
- Kubernetes Service
You can inspect the created resources with the following kubectl
commands:
View the created Service resource:
View the created Route resource:
kubectl get route -l \
"serving.knative.dev/service=stock-service-example" --output yaml
View the Kubernetes Service created by the Route
"serving.knative.dev/service=stock-service-example" --output yaml
View the created Configuration resource:
kubectl get configuration -l \
"serving.knative.dev/service=stock-service-example" --output yaml
View the Revision that was created by our Configuration:
kubectl get revision -l \
"serving.knative.dev/service=stock-service-example" --output yaml
View the Deployment created by our Revision
kubectl get deployment -l \
Get the URL of the service:
Send requests to the service using
curl
:Send a request to the index endpoint:
curl http://stock-service-example.default.1.2.3.4.xip.io
Response body:
Welcome to the stock app!
Send a request to the
/stock
endpoint:curl http://stock-service-example.default.1.2.3.4.xip.io/stock
Response body:
stock ticker not found!, require /stock/{ticker}
Send a request to the
/stock
endpoint with your ““:curl http://stock-service-example.default.1.2.3.4.xip.io/stock/<SYMBOL>
where
<SYMBOL>
is your “stock symbol”.Response body:
stock price for ticker <SYMBOL> is <PRICE>
Example
Request:
Response:
Next Steps
To clean up the sample Service:
kubectl delete --filename docs/serving/samples/rest-api-go/sample.yaml