Knative v1.4中能否直接向Broker发事件?发送404报错求助
解决Knative Broker接收CloudEvent时的404错误
核心问题分析
你遇到的404错误源于两个关键问题:
- 直接访问
broker-ingress服务的根路径(/)不符合Knative Broker的路由规则 - 未确认目标Broker是否已创建(Knative Eventing默认不会自动生成Broker实例)
解决步骤
1. 确认并创建目标Broker
首先检查集群中是否存在可用的Broker:
kubectl get brokers -A
如果未找到目标Broker,以default命名空间下的default Broker为例,创建一个:
apiVersion: eventing.knative.dev/v1 kind: Broker metadata: name: default namespace: default
执行创建命令:
kubectl apply -f <上述yaml文件路径>
等待Broker状态变为Ready:
kubectl get broker default -n default
2. 获取正确的Broker接收地址
Broker的合法接收地址格式为:http://<broker-ingress服务IP>:80/<broker命名空间>/<broker名称>
以你提供的broker-ingress IP为例,默认Broker的地址是:http://10.107.184.78/default/default
也可以通过命令直接获取Broker的官方Sink地址:
kubectl get broker default -n default -o jsonpath='{.status.address.url}'
3. 修改Demo代码中的目标地址
替换代码中sink和ContextWithTarget的地址为带Broker路径的正确地址:
// ip and port of broker-ingress + broker path sink := "http://10.107.184.78/default/default" // ... // send event ctx := cloudevents.ContextWithTarget(context.Background(), "http://10.107.184.78/default/default")
4. 验证发送结果
重新运行代码,若Broker状态正常,应能收到ACK响应。也可通过查看Broker日志确认事件是否被接收:
kubectl logs -n knative-eventing -l app=broker-ingress
内容的提问来源于stack exchange,提问作者Info-H
相关产品推荐
相关产品推荐

