Я тестирую Knative в GKE, и вот что я хотел бы сделать:
Однако я получил следующую ошибку в журналах "default-broker-filter":
caller: "http/transport.go:508" error: "Post http://helloworld-python.knative-samples.svc.cluster.local: dial tcp: lookup helloworld-python.knative-samples.svc.cluster.local on 10.0.0.10:53: no such host" level: "warn" logger: "fallback" msg: "got an error from receiver fn"
Я использую это официальное руководство для установки Knative с помощью следующей команды:
kubectl apply --selector knative.dev/crd-install=true \ --filename https://github.com/knative/serving/releases/download/v0.12.0/serving.yaml \ --filename https://github.com/knative/eventing/releases/download/v0.12.0/eventing.yaml \ --filename https://github.com/knative/serving/releases/download/v0.12.0/monitoring.yaml kubectl apply --filename https://github.com/knative/serving/releases/download/v0.12.0/serving.yaml \ --filename https://github.com/knative/eventing/releases/download/v0.12.0/eventing.yaml \ --filename https://github.com/knative/serving/releases/download/v0.12.0/monitoring.yaml
Вот мой шаблон yaml Я обычно устанавливал свой триггер и мой сервис hello world в python:
# Namespace for sample application with eventing enabled apiVersion: v1 kind: Namespace metadata: name: knative-samples labels: knative-eventing-injection: enabled --- apiVersion: serving.knative.dev/v1 kind: Service metadata: name: helloworld-python namespace: knative-samples spec: template: spec: containers: - image: gcr.io/knative-samples/helloworld-python env: - name: TARGET value: "Python Sample v1" --- # Knative Eventing Trigger to trigger the helloworld-go service apiVersion: eventing.knative.dev/v1alpha1 kind: Trigger metadata: name: my-service-trigger namespace: knative-samples spec: broker: default filter: attributes: type: dev.knative.samples.helloworld subscriber: ref: apiVersion: serving.knative.dev/v1 kind: Service name: helloworld-python
Затем я создаю модуль для выполнения моей команды curl:
kubectl --namespace knative-samples run curl --image=radial/busyboxplus:curl -it curl -v "default-broker.knative-samples.svc.cluster.local" \ -X POST \ -H "Ce-Id: 536808d3-88be-4077-9d7a-a3f162705f79" \ -H "Ce-specversion: 0.3" \ -H "Ce-Type: dev.knative.samples.helloworld" \ -H "Ce-Source: dev.knative.samples/helloworldsource" \ -H "Content-Type: application/json" \ -d '{"msg":"Hello World from the curl pod."}'
Можете ли вы сказать мне, что это неправильно, потому что я провел все свои выходные, не найдя никакой подсказки?
Спасибо,
У вас включен кластерный локальный шлюз? Если нет, то это может быть причиной того, что это не работает. Подробности по следующей ссылке:
https://knative.dev/docs/install/installing-istio/
Ваше приложение принимает только GET запросов, как вы можете видеть здесь - https://github.com/knative/docs/blob/master/docs/serving/samples/hello-world/helloworld-python/app.py
GET
Как вы можете видеть в cloudevents spe c - https://github.com/cloudevents/spec/blob/master/http-webhook.md#21 -доставка-запрос
cloudevents
Метод HTTP для запроса доставки ДОЛЖЕН быть POST.
Для запуска необходимо использовать метод POST ваш сервис.
POST
Если вы хотите исправить это, у вас есть два простых варианта:
Вы можете изменить изображение сервиса на event_display (gcr.io/knative-releases/github.com/knative/eventing-sources/cmd/event_display )
event_display
gcr.io/knative-releases/github.com/knative/eventing-sources/cmd/event_display
Вы можете изменить код своего приложения и изменить L7 с @app.route('/') на @app.route('/', methods=['GET', 'POST'])
@app.route('/')
@app.route('/', methods=['GET', 'POST'])