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.
Binding running services to an IoT core
This sample shows how to bind a running service to an IoT core using GCP PubSub as the event source. With minor modifications, it can be used to bind a running service to anything that sends events via GCP PubSub.
Note: All commands are given relative to the root of this repository.
To make the following commands easier, we are going to set the various variables here and use them later.
Variables you must Change
Variables you may Change
export IOTCORE_REGISTRY="iot-demo" export IOTCORE_DEVICE="iot-demo-client" export IOTCORE_REGION="us-central1" export IOTCORE_TOPIC_DATA="iot-demo-pubsub-topic" export IOTCORE_TOPIC_DEVICE="iot-demo-device-pubsub-topic"
- Have a running Kubernetes cluster with
kubectlpointing at it.
Create a Google Cloud Project.
Have gcloud installed and pointing at that project.
Cloud Pub/Sub APIon that project.
gcloud services enable pubsub.googleapis.com
Create the two GCP PubSub
gcloud pubsub topics create $IOTCORE_TOPIC_DATA gcloud pubsub topics create $IOTCORE_TOPIC_DEVICE
Setup Knative Eventing.
GCP PubSub Source
Create a GCP Service Account.
Determine the Service Account to use, or create a new one.
Give that Service Account the ‘Pub/Sub Editor’ role on your GCP project.
Download a new JSON private key for that Service Account.
Create two secrets with the downloaded key (one for the Source, one for the Receive Adapter):
kubectl --namespace knative-sources create secret generic gcppubsub-source-key --from-file=key.json=PATH_TO_KEY_FILE.json kubectl --namespace default create secret generic google-cloud-key --from-file=key.json=PATH_TO_KEY_FILE.json
GcpPubSubSourcecontroller as part of eventing-source’s controller.
kubectl apply --filename https://github.com/knative/eventing-contrib/releases/download/v0.8.2/gcppubsub.yaml
Install the default
kubectl create -f - <<EOF apiVersion: eventing.knative.dev/v1 kind: Broker metadata: name: default EOF
GCP PubSub Source
sed -e "s/PROJECT_ID/$IOTCORE_PROJECT/" \ -e "s/TOPIC_NAME/$IOTCORE_TOPIC_DATA/" \ docs/eventing/samples/iot-core/gcp-pubsub-source.yaml | kubectl apply --filename -
Even though the
Source isn’t completely ready yet, we can setup the
for all events coming out of it.
kubectl apply --filename docs/eventing/samples/iot-core/trigger.yaml
- This uses a very simple Knative Service to see that events are flowing. Feel free to replace it.
We now have everything setup on the Knative side. We will now setup the IoT Core.
Create a device registry:
gcloud iot registries create $IOTCORE_REGISTRY \ --project=$IOTCORE_PROJECT \ --region=$IOTCORE_REGION \ --event-notification-config=topic=$IOTCORE_TOPIC_DATA \ --state-pubsub-topic=$IOTCORE_TOPIC_DEVICE
Create the certificates.
openssl req -x509 -nodes -newkey rsa:2048 \ -keyout device.key.pem \ -out device.crt.pem \ -days 365 \ -subj "/CN=unused" curl https://pki.google.com/roots.pem > ./root-ca.pem
Register a device using the generated certificates.
gcloud iot devices create $IOTCORE_DEVICE \ --project=$IOTCORE_PROJECT \ --region=$IOTCORE_REGION \ --registry=$IOTCORE_REGISTRY \ --public-key path=./device.crt.pem,type=rsa-x509-pem
We now have everything installed and ready to go. We will generate events and see them in the subscriber.
Run the following program to generate events:
go run github.com/knative/docs/docs/eventing/samples/iot-core/generator \ -project $IOTCORE_PROJECT \ -region $IOTCORE_REGION \ -registry $IOTCORE_REGISTRY \ -device $IOTCORE_DEVICE \ -ca "$PWD/root-ca.pem" \ -key "$PWD/device.key.pem" \ -src "iot-core demo" \ -events 10
Inspect the logs of the subscriber:
kubectl logs --selector serving.knative.dev/service=event-display -c user-container
You should see something along the similar to:
To cleanup the knative resources:
sed -e "s/PROJECT_ID/$IOTCORE_PROJECT/" \ -e "s/TOPIC_NAME/$IOTCORE_TOPIC_DATA/" \ docs/eventing/samples/iot-core/gcp-pubsub-source.yaml | kubectl delete --filename -
Remove the Trigger:
kubectl delete --filename docs/eventing/samples/iot-core/trigger.yaml
kubectl delete --filename https://github.com/knative/eventing-contrib/releases/download/v0.8.2/gcppubsub.yaml
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.