kubernetes - 当我有多个 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>
如何绕过此自定义错误创建并接收我的原始错误消息?
解决方案
这是设计使然。如果有多个后端(服务端点),ingress-nginx 将在收到来自后端服务的 502、503 或 504 响应状态时尝试下一个后端。当没有更多后端可以尝试时,会产生自定义错误。
设置注解nginx.ingress.kubernetes.io/service-upstream: "true"
将改变 nginx 的行为以指向一个后端,即 k8s 集群服务 ClusterIP。通常 nginx 会将所有服务端点作为后端服务器进行管理。
请注意,使用此注解会将负载平衡决策移至 Kubernetes 集群服务路由域,而不是 nginx 的逻辑。
推荐阅读
- python - python pandas多级索引获取特定值
- python - 如何使用相同的起点而不是matplotlib中的两个来设置两个y轴图的轴
- python - 更改 seaborn clustermap 的特定行大小
- java - 按鼠标左键添加新对象
- python - Python 错误:'不能在以下代码中将序列乘以'numpy.float64' 类型的非整数
- c# - 阿塔塔。C#。如何打开新标签?
- python - 递归函数中的 Python 参数
- php - PHP,用一个带有字母的数组按字母顺序排序
- sql-injection - sqlmap 内部如何工作?
- php - 选择查询 Laravel 中的自定义函数