Назад | Перейти на главную страницу

Возврат к статическому происхождению при получении HTTP 404 в nginx-ingress

У меня есть веб-приложение, работающее на 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, поэтому я бы не рекомендовал его использовать. Если вы хотите получить доступ к внешним ресурсам (вне кластера), создайте модуль, который будет передавать запросы этой внешней службе через прокси и указывать бэкэнд вашего входящего трафика по умолчанию на эту службу.

Сообщите мне, помогло ли это