首页 > 解决方案 > 当我有多个 pod 时,Nginx 入口返回自定义 http 错误

问题描述

我有一个工作负载、一个服务和一个将流量路由到服务的 Nginx 入口控制器。只要我只有一个吊舱,一切都很好。现在,当我通过将副本设置为 2 来扩大规模时,我的 API 返回的 http 错误被转换为 HTML 页面——隐藏了我返回的错误信息。

当我的 API 返回时:

res.status(502).send('The error is THIS!');

我在回复中看到的是:

<html>

<head>
    <title>502 Bad Gateway</title>
</head>

<body bgcolor="white">
    <center>
        <h1>502 Bad Gateway</h1>
    </center>
    <hr>
    <center>nginx/1.11.3</center>
</body>

</html>

如何绕过此自定义错误创建并接收我的原始错误消息?

标签: kuberneteskubernetes-ingressnginx-ingress

解决方案


这是设计使然。如果有多个后端(服务端点),ingress-nginx 将在收到来自后端服务的 502、503 或 504 响应状态时尝试下一个后端。当没有更多后端可以尝试时,会产生自定义错误。

设置注解nginx.ingress.kubernetes.io/service-upstream: "true"将改变 nginx 的行为以指向一个后端,即 k8s 集群服务 ClusterIP。通常 nginx 会将所有服务端点作为后端服务器进行管理。

请注意,使用此注解会将负载平衡决策移至 Kubernetes 集群服务路由域,而不是 nginx 的逻辑。


推荐阅读