kubernetes gce 入口路径通配符不是代理正确的 uri(在容器内工作)

标签 kubernetes google-kubernetes-engine vespa

无法通过某些 slugs curl /使用 REST API 的原因是什么,即 example.com/application/v2/xxxx。我使用的 docker 镜像是来自的应用程序 http://vespa.ai/ https://github.com/vespa-engine/docker-image/blob/master/Dockerfile

我已经正确设置了节点端口和入口

我尝试了各种方法,例如主机上的默认后端:

- host: example.com
http:
  paths:
  - backend:
      serviceName: myservice
      servicePort: 19071

或显式使用通配符路由:

 - host: example.com
http:
  paths:
  - path: /*
    backend:
      serviceName: myservice
      servicePort: 19071

奇怪的是,在外部(集群外)执行curl: curl -s --头http://example.com/ApplicationStatus 是否返回 statusCode 200 OK

正在做 curl -s --头http://example.com/application/v2/tenant/ 从应用程序返回 BAD_REQUEST。

“错误代码”:“BAD_REQUEST”, “消息”:“http://example.com/application/v2/tenant/

exec 进入容器并执行 curl -s --头http://localhost:19071/application/v2/tenant/ 作品..

因此,要么应用程序以某种方式与来自入口的主机名不正确匹配,要么存在完整 uri 未被代理的其他问题。

该应用程序的源代码太大,目前对我来说无法理解,但可以查看源代码 https://github.com/vespa-engine/vespa/blob/f76406b88df47f6bdbf9d24feda4c9ff55c63e06/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/resources/HostSuspensionResource.java 它可以解释为什么它返回错误消息。

其他一切似乎都正常,配置服务器和应用程序。

这里的问题可能是应用程序本身还是 kubernetes 造成的?

最佳答案

我认为这里不应该涉及HostSuspensionResource。 restapi 入口点是您正在进行的调用的 ApplicationHandler 类。

当您使用默认端口(即不是“内部”19071 端口) curl 到容器内时会发生什么?

关于kubernetes gce 入口路径通配符不是代理正确的 uri(在容器内工作),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47956738/

相关文章:

Vespa 应用程序配置最佳实践

docker - 每个主机有多个vespa docker容器?

docker - 来自服务器的 Kubernetes 部署错误(禁止): error when retrieving current configuration

Kubernetes 停止更新 HPA 中的当前 CPU 利用率

kubernetes - gke 集群从 1.10.x 升级到 1.11.x 后,calico-node pod 无法启动

mysql - 从 kubernetes 将 mysql 主机列入白名单

java - 将 Vespa 扩展为 500 QPS 以进行搜索

azure - 在 MC_ 资源组外部部署 AKS 代理池托管标识

kubernetes - 通过Keycloak登录ArgoCD后出现"Invalid return_url"(错误请求400)

docker - 配置GKE上节点的最大Pod数