Как отключить перехват ошибок Ingress в настройке Tectonic kubernetes
У меня есть пара бэкэндов NodeJS, работающих как модули в настройке Kubernetes, с управляемым 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>
1 ответ
Я решил это на Tectonic 1.7.9-tectonic.4.
В веб-интерфейсе Tectonic перейдите в раздел "Рабочие нагрузки -> Карты конфигурации" и выполните фильтрацию по пространству имен tectonic-system.
На показанных картах конфигурации вы должны увидеть одну из них с именем "tectonic-custom-error".
Откройте его и перейдите в редактор YAML.
В поле данных у вас должна быть такая запись:
custom-http-errors: '404, 500, 502, 503'
который определяет, какие HTTP-ответы будут перехвачены и отображены на пользовательской странице ошибок Tectonic.
Если вам не нужны некоторые из них, просто удалите их или очистите их все.
Это должно вступить в силу, как только вы сохраните обновленную карту конфигурации.
Конечно, вы можете сделать то же самое из командной строки с помощью kubectl edit:
$> kubectl edit cm tectonic-custom-error --namespace = tectonic-system
Надеюсь это поможет:)