У меня есть веб-приложение, работающее на Kubernetes, и nginx-ingress
который служит Ingress для развертывания.
Я хотел бы включить следующее поведение для nginx: когда какой-либо запрос получает ответ HTTP 404 от источника, проксируйте запрос на второй статический источник.
Я знаю, как включить такое поведение при стандартном развертывании nginx, но как это можно сделать с помощью nginx-ingress
с минимальными усилиями (т.е. я предпочитаю избегать предоставления полного настраиваемого файла конфигурации)
Когда используешь nginx-ingress ты можешь использовать бэкэнд по умолчанию аннотация. В документации вы можете прочитать:
Эта аннотация имеет вид nginx.ingress.kubernetes.io/default-backend: <svc name>, чтобы указать настраиваемый бэкэнд по умолчанию. Этот <svc name> является ссылкой на службу внутри того же пространства имен, в котором вы применяете эту аннотацию. Эта аннотация отменяет глобальный бэкэнд по умолчанию.
Эта служба будет обрабатывать ответ, когда служба в правиле Ingress не имеет активных конечных точек. Он также будет обрабатывать ответы об ошибках, если установлены и эта аннотация, и аннотация custom-http-errors.
Таким образом, вы можете просто создать службу по умолчанию, указывающую на какой-либо бэкэнд (под), обслуживающий ваш статический веб-сайт.
Итак, ваш вход теперь должен выглядеть так:
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: test-ingress
annotations:
nginx.ingress.kubernetes.io/default-backend: default-backend
spec:
rules:
- http:
paths:
- path: /
backend:
serviceName: myservice
servicePort: 80
и ваш сервис по умолчанию:
---
apiVersion: v1
kind: Service
metadata:
name: default-backend
spec:
selector:
app: myapp
ports:
- protocol: TCP
port: 80
targetPort: 80
Для доступа к внешним статическим ресурсам я попытался использовать службу типа ExternalService
но, похоже, это разбивает мой nginx-ingress-controller
pod, поэтому я бы не рекомендовал его использовать. Если вы хотите получить доступ к внешним ресурсам (вне кластера), создайте модуль, который будет передавать запросы этой внешней службе через прокси и указывать бэкэнд вашего входящего трафика по умолчанию на эту службу.
Сообщите мне, помогло ли это