3

我有几个 NodeJS 后端作为 Kubernetes 设置中的 pod 运行,上面有 Ingress 管理的 nginx。

这些后端是 API 服务器,在正常操作期间可以返回 400、404 或 500 响应。这些响应将为客户提供有意义的数据;除了状态码,响应在正文中具有 JSON 序列化结构,用于通知错误原因或建议解决方案。

但是,Ingress 会拦截这些错误响应,并返回一个错误页面。因此,客户端不会收到服务试图提供的信息。

kubernetes-contrib 存储库中有一张已关闭的票证,表明现在可以关闭错误拦截:https ://github.com/kubernetes/contrib/issues/897 。作为 kubernetes/ingress 的新手,我无法弄清楚如何在我的情况下应用此配置。

作为参考,这是以下内容的输出kubectl get ingress <ingress-name>:(已编辑名称和 IP)

Name:             ingress-name-redacted
Namespace:        default
Address:          127.0.0.1
Default backend:  default-http-backend:80 (<none>)
Rules:
  Host                                Path  Backends
  ----                                ----  --------
  public.service.example.com
                                      /   service-name:80 (<none>)
Annotations:
  rewrite-target:         /
  service-upstream:       true
  use-port-in-redirects:  true
Events:                   <none>
4

1 回答 1

4

我已经在 Tectonic 1.7.9-tectonic.4 上解决了这个问题。

在 Tectonic Web UI 中,转到 Workloads -> Config Maps 并按命名空间 tectonic-system 进行过滤。

在显示的配置图中,您应该看到一个名为“tectonic-custom-error”的配置图。

打开它并转到 YAML 编辑器。

在数据字段中,您应该有这样的条目:

自定义http错误:'404、500、502、503'

它配置将捕获哪些 HTTP 响应并与自定义构造错误页面一起显示。

如果您不想要其中的一些,只需删除它们,或将它们全部清除。

它应该在您保存更新的配置映射后立即生效。

当然,您可以从命令行使用kubectl edit进行相同的操作:

$> kubectl 编辑 cm 构造自定义错误 --namespace=构造系统

希望这可以帮助 :)

于 2018-02-09T08:16:06.610 回答