如何配置Knative Functions使其响应多个URL路径?
解决Knative Go函数无法匹配自定义路径的问题
1. 配置func.yml的路由规则
默认情况下,func create生成的函数仅绑定根路径/,需要在func.yml中添加routes字段指定允许的路径:
匹配所有路径的配置
schemaVersion: 2 name: hello-world version: 1.0.0 runtime: go builder: paketobuildpacks/builder-jammy-base:latest env: FUNC_RUNTIME: go FUNC_HANDLER: handler GO_FUNC_MAIN: main.go routes: - path: "/*" method: GET
匹配特定路径的配置
如果仅需要开放/some-random-path和原根路径:
routes: - path: "/some-random-path" method: GET - path: "/" method: GET
2. 调整Go函数的路径匹配逻辑
默认生成的main.go中,handler仅绑定到/,非根路径请求会无法匹配。需要修改路由绑定为匹配所有路径:
package main import ( "fmt" "net/http" ) func handler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello World!") } func main() { // 替换原有的http.HandleFunc("/", handler) http.HandleFunc("/*", handler) http.ListenAndServe(":8080", nil) }
3. 重新部署函数
修改完成后,执行部署命令更新Kubernetes上的函数:
func deploy
完成以上步骤后,访问http://localhost:8080/some-random-path即可正常触发函数。
补充说明:func.yml中的routes字段会转化为Knative Route资源的路由规则,支持Knative Serving的路径匹配语法,比如/prefix/*可匹配所有以/prefix开头的路径。
内容的提问来源于stack exchange,提问作者FabianTe
相关产品推荐
相关产品推荐

