了解如何在 Cloud Run for Anthos on Google Cloud 中部署服务,然后通过 Cloud Audit Logs 创建事件并将其发送到该服务。
准备工作
为完成此任务,您必须拥有一个事件代理,并知道它正在哪个命名空间中运行。了解如何配置 Events for Cloud Run for Anthos 以及创建事件代理。
如果您正在运行事件代理,则可以运行以下命令来查看 Kubernetes 命名空间:
kubectl get brokers -n NAMESPACE
部署 Cloud Run for Anthos 事件接收器服务
部署 Cloud Run for Anthos 服务,用于接收事件代理的事件。
克隆代码库:
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git cd python-docs-samples/eventarc/audit-storage
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git cd java-docs-samples/eventarc/audit-storage
Go
git clone https://github.com/GoogleCloudPlatform/golang-samples.git cd golang-samples/eventarc/audit_storage
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git cd nodejs-docs-samples/eventarc/audit-storage
C#
git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git cd dotnet-docs-samples/eventarc/audit-storage
构建容器并将其上传到 Cloud Build:
gcloud builds submit \ --tag gcr.io/$(gcloud config get-value project)/CLOUD_RUN_CONTAINER_NAME
其中 CLOUD_RUN_CONTAINER_NAME 是容器的文件名。
将容器映像部署到 Cloud Run for Anthos:
gcloud run deploy CLOUD_RUN_SERVICE_NAME \ --namespace=NAMESPACE \ --image gcr.io/$(gcloud config get-value project)/CLOUD_RUN_CONTAINER_NAME
其中 NAMESPACE 是事件代理所在的命名空间。
当您看到服务网址时,表示已成功部署容器映像。
创建 Cloud Audit Logs 触发器
在事件代理所在的命名空间中创建触发器:
gcloud beta events triggers create TRIGGER_NAME \ --namespace NAMESPACE \ --target-service=CLOUD_RUN_SERVICE_NAME \ --type=google.cloud.audit.log.v1.written \ --parameters serviceName=pubsub.googleapis.com \ --parameters methodName=google.pubsub.v1.Publisher.CreateTopic
在此示例中,触发器会过滤
methodName
条目等于google.pubsub.v1.Publisher.CreateTopic
的 Cloud Audit Logs 条目。如需了解更多过滤选项,请参阅 AuditLog 格式设置。60 秒后,验证触发器是否正常运行:
gcloud beta events triggers list \ --target-service CLOUD_RUN_SERVICE_NAME \ --namespace NAMESPACE
其中 NAMESPACE 是事件代理所在的命名空间。
输出内容类似如下:
TRIGGER EVENT TYPE TARGET trigger-name google.cloud.audit.log.v1.written cloud-run-service
生成事件
通过创建 Pub/Sub 主题生成事件:
gcloud pubsub topics create TOPIC_NAME
检查 Cloud Run for Anthos 服务是否已接收事件:
kubectl logs \ --selector serving.knative.dev/service=CLOUD_RUN_SERVICE_NAME \ -c user-container \ -n NAMESPACE \ --tail=200
其中 NAMESPACE 是事件代理所在的命名空间。
输出内容类似如下:
[...] [2020-09-10 18:51:28 +0000] [1] [INFO] Starting gunicorn 20.0.4 [2020-09-10 18:51:28 +0000] [1] [INFO] Listening at: http://0.0.0.0:8080 (1) [2020-09-10 18:51:28 +0000] [1] [INFO] Using worker: threads [2020-09-10 18:51:28 +0000] [7] [INFO] Booting worker with pid: 7 GCS CloudEvent type: pubsub.googleapis.com/projects/PROJECT_NAME/topics/to-be-deleted GCS CloudEvent type: pubsub.googleapis.com/projects/PROJECT_NAME/topics/to-be-deleted2 [...]
清理
删除在本教程中创建的资源,以避免重复收费。
如需删除触发器,请输入以下命令:
gcloud beta events triggers delete TRIGGER_NAME \ --namespace NAMESPACE
其中 NAMESPACE 是事件代理所在的命名空间。
删除 Pub/Sub 主题:
gcloud pubsub topics delete TOPIC_NAME