Как настроить StorageNotification на GKE с помощью Config Connector
Я использую пример Config Connector для StorageNotification, но все равно получаю следующую ошибку (взять изkubectl describe
)
storagenotification-controller Ошибка вызова обновления: ошибка применения желаемого состояния: проект: обязательное поле не установлено
Я следил за пространством имен по умолчанию в установочном коннекторе конфигурации, но без радости. В спецификации StorageNotification API нет поля для "проекта". Я думал, это просто должно быть в правильном пространстве имен?
Все остальные ресурсы настроены нормально. Просто уведомление не работает. Вот мой полный ямл
# Bucket Starts the chain of events
apiVersion: storage.cnrm.cloud.google.com/v1beta1
kind: StorageBucket
metadata:
labels:
app: something-processing
name: example-something
namespace: ${GCP_PROJECT_ID}
---
# Pub/Sub topic that bucket events will publish to
apiVersion: pubsub.cnrm.cloud.google.com/v1beta1
kind: PubSubTopic
metadata:
name: my-pubsub-topic
labels:
app: something-processing
namespace: ${GCP_PROJECT_ID}
---
# Publisher IAM permissions
apiVersion: iam.cnrm.cloud.google.com/v1beta1
kind: IAMPolicy
metadata:
name: my-pubsub-topic-iam
namespace: ${GCP_PROJECT_ID}
labels:
app: something-processing
spec:
resourceRef:
apiVersion: pubsub.cnrm.cloud.google.com/v1beta1
kind: PubSubTopic
name: my-pubsub-topic
bindings:
- role: roles/pubsub.publisher
members:
- serviceAccount:service-${GCP_PROJECT_ID}@gs-project-accounts.iam.gserviceaccount.com
---
# Trigger that connects the bucket to the pubsub topic
apiVersion: storage.cnrm.cloud.google.com/v1beta1
kind: StorageNotification
metadata:
name: storage-notification
namespace: ${GCP_PROJECT_ID}
project: ${GCP_PROJECT_ID}
labels:
app: something-processing
spec:
bucketRef:
name: something
payloadFormat: JSON_API_V1
topicRef:
name: my-pubsub-topic
eventTypes:
- "OBJECT_FINALIZE"
---
# subscription that gets events from the topic and PUSHes them
# to the K8s Ingress endpoint
apiVersion: pubsub.cnrm.cloud.google.com/v1beta1
kind: PubSubSubscription
metadata:
name: pubsub-subscription-topic
namespace: ${GCP_PROJECT_ID}
labels:
app: something-processing
spec:
pushConfig:
# This should match the Ingress path
pushEndpoint: https://example.zone/some-ingress-end-point/
topicRef:
name: my-pubsub-topic
Примечание: я использую envsubt
заменить ${GCP_PROJECT_ID}
с идентификатором проекта;)
1 ответ
У меня была такая же проблема, и мне удалось ее решить, изменив topicRef.name на topicRef.external с полным названием темы, как и ожидалось в REST API. Моя установка конфигурационного коннектора была выполнена в соответствии со сценарием идентификации рабочей нагрузки, описанным в документации.
---
apiVersion: storage.cnrm.cloud.google.com/v1beta1
kind: StorageNotification
metadata:
name: storage-notification
spec:
bucketRef:
name: ${BUCKET}
payloadFormat: JSON_API_V1
topicRef:
external: "//pubsub.googleapis.com/projects/${PROJECT_ID}/topics/${TOPIC}"
eventType:
- "OBJECT_FINALIZE"