Kubernetes tips & tricks: персонализированные страницы ошибок в NGINX Ingress

image В данной статье я хочу рассказать про две возможности NGINX Ingress, связанные с отображением персонализированных страниц с ошибками, а также о существующих в них ограничениях и способах их обойти.

1. Изменение бэкенда по умолчанию

По умолчанию в NGINX Ingress используется default backend, который выполняет соответствующую функцию. Это означает, что при запросе Ingress’а с указанием хоста, которого нет в Ingress-ресурсах, мы получаем такую страницу с кодом ответа 404:

image Однако все чаще наши клиенты приходят с просьбой вместо стандартного 404 показать свою страницу с фирменным логотипом и прочими удобствами. Для этого у NGINX Ingress есть переопределить default-backend-service. Одноимённой опции в качестве аргумента передаем запись формата namespace/servicename. Порт у сервиса должен быть 80.

Для этого необходимо создать свой pod (deployment) и сервис с вашим приложением ( из репозитория ingress-nginx), которое будет отдаваться вместо default backend.

Вот небольшая иллюстрация:

~$ curl -i -XGET http://sadsdasdas.kube-cloud.my/ HTTP/1.1 404 Not Found Date: Mon, 11 Mar 2019 05:38:15 GMT Content-Type: */* Transfer-Encoding: chunked Connection: keep-alive  The page you're looking for could not be found.

Таким образом, все домены, которые явно не созданы через YAML с kind: Ingress, попадают в default-backend. В листинге выше таким доменом стал sadsdasdas.

2. Обработка HTTP-ошибок в приложении силами default backend

Другая ситуация — заканчивающиеся HTTP-ошибками (404, 500, 502…) запросы к приложению, в котором не обрабатываются такие ситуации (не генерируются соответствующие красивые страницы). Это может быть также вызвано желанием разработчиков отдавать одинаковые страницы ошибок во множестве приложений.

Для реализации данного кейса на серверной стороне нам необходимо:

  1. Выполнить инструкцию выше из пункта про default backend;
  2. В конфигурационный ConfigMap nginx-ingress добавить ключ custom-http-errors, например, со значением 404,503 (очевидно, соответствует кодам ошибки, на которые распространяется новое правило).

Ожидаемый результат достигнут: при работе клиентского приложения и получении ошибки с кодом ответа 404 или 503 запрос будет автоматически перенаправлен в новый default backend…

Однако при разработке приложения для default backend и custom-http-errors нужно учесть важную особенность:

!!! Important The custom backend is expected to return the correct HTTP status code instead of 200. NGINX does not change the response from the custom default backend.

Дело в том, что при перенаправлении запроса в заголовках будет полезная информация с предыдущим кодом ответа и дополнительной информацией (полный их список доступен ).

Это означает, что вы сами должны позаботиться о корректном коде ответа. из документации, как это работает.

Разным приложениям — разный default backend

Чтобы решение не было глобальным на весь кластер, а относилось только к конкретным приложениям, для начала надо проверить версию Ingress. Если она соответствует 0.23 или выше, воспользуйтесь «родными» аннотациями Ingress:

  1. Мы можем переопределить default-backend для каждого Ingress’а с ;
  2. Мы можем переопределить custom-http-errors для каждого Ingress’а с .

В результате, ресурс Ingress будет выглядеть примерно так:

apiVersion: extensions/v1beta1 kind: Ingress metadata:   name: {{ .Chart.Name }}-app2   annotations:     kubernetes.io/ingress.class: "nginx"     nginx.ingress.kubernetes.io/custom-http-errors: "404,502"     nginx.ingress.kubernetes.io/default-backend: error-pages spec:   tls:   - hosts:     - app2.example.com     secretName: wildcard-tls   rules:   - host: app2.example.com     http:       paths:       - path: /         backend:           serviceName: {{ .Chart.Name }}-app2           servicePort: 80

В таком случае ошибки 404 и 502 будут перенаправлены в сервис error-pages со всеми нужными заголовками.

В предыдущих версиях Ingress такой возможности не было (). И если у вас в кластере работает 2 совершенно разных приложения и вы хотите для каждого из них указывать разные default-backend-service и обработку различных кодов ошибок — для этого придётся воспользоваться workaround’ами, коих у нас два.

Ingress < 0.23: подход первый

Этот вариант более прост. В качестве приложения, которое отдает свои страницы, у нас обычный HTML, который не умеет смотреть на заголовки и отдавать корректные коды ответа. Такое приложение выкатывается с Ingress’ом с url /error-pages, а в каталоге ws будет лежать отдаваемый HTML.

Иллюстрация в YAML:

apiVersion: extensions/v1beta1 kind: Ingress metadata:   name: {{ .Chart.Name }}-app2   annotations:     kubernetes.io/ingress.class: "nginx"     ingress.kubernetes.io/server-snippet: |       proxy_intercept_errors on;       error_page 500 501 502 503 504 @error_pages;       location @error_pages {         rewrite ^ /error-pages/other/index.html break;         proxy_pass http://error-pages.prod.svc.cluster.local;       } spec:   tls:   - hosts:     - app2.example.com     secretName: wildcard-tls   rules:   - host: app2.example.com     http:       paths:       - path: /         backend:           serviceName: {{ .Chart.Name }}-app2           servicePort: 80

Сервис для этого деплоя должен быть с типом ClusterIP.

При этом в приложении, где будем обрабатывать ошибку, в Ingress’е добавляем server-snippet или configuration-snippet со следующим содержимым:

nginx.ingress.kubernetes.io    /server-snippet: |       proxy_intercept_errors on;       error_page 500 501 502 503 504 @error_pages;       location @error_pages {         rewrite ^ /error-pages/ws/index.html break;         proxy_pass http://error-pages.prod.svc.cluster.local;       }

Ingress < 0.23: подход второй

Вариант для приложения, которое умеет обрабатывать заголовки… Да и вообще это более корректный путь, заимствованный из custom-http-errors. Его использование вручную (копирование) позволит не изменять глобальные настройки.

Шаги следующие. Создаем с приложением, которое умеет слушать нужные заголовки и отвечать корректно. Добавляем в Ingress приложения server-snippet со следующим содержимым:

nginx.ingress.kubernetes.io    /server-snippet: |       proxy_intercept_errors off;       error_page 404 = @custom_404;       error_page 503 = @custom_503;       location @custom_404 {         internal;         proxy_intercept_errors off;         proxy_set_header       X-Code             404;         proxy_set_header       X-Format           $http_accept;         proxy_set_header       X-Original-URI     $request_uri;         proxy_set_header       X-Namespace        $namespace;         proxy_set_header       X-Ingress-Name     $ingress_name;         proxy_set_header       X-Service-Name     $service_name;         proxy_set_header       X-Service-Port     $service_port;         proxy_set_header       Host               $best_http_host;         rewrite ^ /error-pages/ws/index.html break;         proxy_pass http://error-pages.prod.svc.cluster.local;       }       location @custom_503 {         internal;         proxy_intercept_errors off;         proxy_set_header       X-Code             503;         proxy_set_header       X-Format           $http_accept;         proxy_set_header       X-Original-URI     $request_uri;         proxy_set_header       X-Namespace        $namespace;         proxy_set_header       X-Ingress-Name     $ingress_name;         proxy_set_header       X-Service-Name     $service_name;         proxy_set_header       X-Service-Port     $service_port;         proxy_set_header       Host               $best_http_host;         rewrite ^ /error-pages/ws/index.html break;         proxy_pass http://error-pages.prod.svc.cluster.local;       }

Как видно, для каждой ошибки, которую мы хотим обрабатывать, нужно сделать свой location, где будут подставляться все необходимые заголовки, как в «родном» . Так мы можем создавать разные персонализированные страницы с ошибками даже для отдельных location’ов и серверов.

P.S.

Другое из цикла K8s tips & tricks:

  • «»;
  • «»;
  • «»;
  • «».

Читайте также в нашем блоге:

  • «»;
  • «».

Источник: habr.com

от Niantic, Inc. Цена: БесплатноУстройства: iPhone, iPad QR-код Версия: 2.72.1 от 14 июля 2014 Язык: Русский Размер: 228.8 Мб Возраст: 9+ Официальный сайт: http://www.ingress.com

Рейтинг приложения

Скриншоты

Видео

Обзоры

Для этого приложения пока нет обзоров

Добавить ссылку на обзор

Полезные ссылки

Для этого приложения пока не указаны ссылки

Добавить ссылку

Аналоги Ingress

  • Apocalypse Knights 2.0 InterServ Internatio.. Бесплатно
  • Gangstar: West Coast Hustle Gameloft 529.00 руб.
  • Video Poker Casino — Card Game MobilityWare Бесплатно
  • League of Heroes™ Huuuge Games Sp. z o.. Бесплатно
  • Superbrothers: Sword & Sworcery EP Capybara Games Inc. 299.00 руб.
  • 3D MMO Celtic Heroes One Thumb Mobile Бесплатно
  • Название: Взлом Ingress;
  • Что может дать тебе этот взлом игры Ingress: CMU;
  • Сложность использования этого Чита: Очень просто;
  • Требования: ОС Андроид или iOS;
  • Дополнительная информации: Работает как с, так и без Jailbreak (Джейлбрейк) или Root (Рут);

Ingress Взлом, игра с дополненной реальностью, которая выгнала множество людей на улицу. Дождь, снег, ветер, все ни по чем игрокам этой ролевой игры. Все заядлые геймеры стали больше гулять на свежем воздухе, что очень полезно для здоровья. Все больше обычных людей, покидают свои теплые квартиры, дома, спешат на поиски неизведанного, на встречу необычным приключениям. Она очень прикольная, захватывающая, правда поначалу не очень ясно, что же требуется делать, как в нее играть, первое впечатление обманчиво, все не так тяжело. Ведь главное разобраться, а после вы не сможете не играть в нее. Также ты можешь использовать все возможности взлома Ingress и получить бесконечное количество таких штук как CMU.

Суть взлом Ingress, в поисках порталов, которые разбросаны по вашему городку. Некая космическая энергия, проникает в мир, полностью меняя сознание людей. Имеется две команды, синяя это сопротивление, те кто борется с этой материей, пытаются ее изгнать ее с нашей земли. Вторая сторона зеленые, для тех кто хочет ею управлять, покорить себе, став более могущим. Обе команды борются за площадь, на которой есть эти порталы, а главное все это в реальном мире. Кстати проверьте, может соседний ларек, уже есть портал. Самое важное, что игроки активно сражаются только в виртуальном мире. Ты наверняка уже знаешь что ты можешь скачать взломанный Ingress Mod Apk и получить CMU, но в этом случае есть подводные камни. Во первых, чтобы использовать Мод Apk у тебя должен быть Рут (Root) на твоем телефоне или планшете. Во вторых, это не совсем безопасно. Но если ты будешь использовать наш взлом, то в таком случае тебе не обязательно иметь Jailbreak или Root, потому что эти читы работают без этого тоже.

Как взломать Ingress?

На самом деле существует не так уж и много способов взломать Ingress, но мы предлагаем тебе пожалуй лучший способ сделать это. Этот метод заключается в использовании наших Читов для Ingress. Ниже ты увидишь список этих Чит Кодов. Важным моментом в этом является то что ты можешь использовать эти Читы даже без Джейлбрейк и без Root. Ты можешь использовать их на iOS и на Андроид устройствах.

Чит Коды для Ingress

Чтобы получить безконечное количество такой шняжки как CMU в Ingress используй этот Чит Код — GFj-e3f58a2d38

Чит Код на бесплатные покупки — KP-7092c86a7e

Также у нас есть еще один чит, но мы еще не проверили для чего он. Ты можешь спокойно использовать его тоже:

Этот чит для какого-то ресурса, но ми еще не знаем для какого именно — Lt-800c172a2d

На всякий случай ЗДЕСЬ мы создали инструкцию по вводу читов

Порталы, это то место где просачивается неземная энергия. В Ingress Читы, она может быть трех цветов, синяя или зеленая, если контролируется одной из фракций, либо серая, если она еще ни кому не принадлежит. Установить контроль над серой территории очень просто, требуется установить на него резонатор, такое действие называется деплоем. Если же портал принадлежит вражеской категории, вам придется ее отвоевать, для начала разрушив чужие резонаторы. На один источник энергии, могут устанавливаться до восьми резонаторов. Главное успеть первым, пока не проснулись противники. Во взломом Ingress ты сможешь получить в игре все бесконечное. Если ты задашься вопросом «Как получить безлимитное количество CMU», то ответ будет очень простым — используй Ingress Взлом.

Так же в Ingress, вам потребуется различные предметы, что бы их получить, надо хакнуть портал, после чего на вас посыпятся плюшки, благодаря которым, можно приобретать различные предметы, ману. Так же требуется удержать территорию под своим контролем, успев опередить вражескую сторону, больше захвата, сильнее коалиция. Она действительно интересная игрушка, которая увлекает, надолго затягивает, подойдет для любого возраста. А еще это большой повод выйти погулять, завязать новые знакомства, много ходить пешком, а это между прочим, очень полезно для здоровья. Пробуйте, рискуйте, увлекайтесь. Также тебе может быть интересна эта игра — MMX Racing Взлом. Это тоже очень крутая игра.

В Managed Kubernetes Ingress-контроллеры не предустанавливаются в кластеры. Для создания объектов Ingress нужно самостоятельно установить любой Ingress Controller.

Помимо самого приложения Ingress Controller будет создан сервис (Service) с типом LoadBalancer, то есть балансировщик нагрузки. Балансировщик будет входной точкой для доступа извне к приложениям в кластере. В таком случае при установке Ingress-контроллера нет необходимости дополнительно создавать внутренний балансировщик нагрузки.

Глоссарий

Термин Определение
Ingress Механизм, обеспечивающий маршрутизацию входящего трафика на уровне приложения (L7), предоставляемый через Ingress-контроллер
Ingress-контроллер Прокси-сервер, развернутый в кластере Managed Kubernetes. Специфика выбора контроллера зависит от требований приложений, размещенных в кластере Managed Kubernetes. Список существующих Ingress-контроллеров
Правила маршрутизации (Routing rules) Правила проксирования входящего трафика от внешнего источника до сервисов внутри кластера Managed Kubernetes
Сервис (Service)
Под (Pod)

Подготовка к установке Ingress-контроллера

Перед установкой Ingress-контроллера:

  1. Настройте окружение и установите утилиту kubectl для управления кластером Managed Kubernetes по инструкции Настройка окружения.
  2. Установите пакетный менеджер Helm.

Установка Ingress-контроллера

Рассмотрим установку базового Nginx-контроллера:

  1. Проверьте, какие сервисы уже существуют в созданном пространстве имен (Namespace):

    kubectl --namespace default get services
  2. Добавьте репозиторий ingress-nginx из Kubeapps Hub:

    helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
  3. Установите chart (поддерживает конфигурацию с Ingress-контроллером):

    helm install ingress-nginx/ingress-nginx --version --generate-name
  4. Проверьте сервисы еще раз, чтобы убедиться, что ingress-nginx-controller запущен:

    kubectl --namespace default get services

    Вывод должен выглядеть примерно так:

    NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE kubernetes   ClusterIP   nn.nn.n.n            443/TCP   22s

    В панели управления в разделе Облачная платформа на вкладке Балансировщики появится новый балансировщик нагрузки.

Примечание: можно установить другой Ingress-контроллер по официальной инструкции.

Пример манифеста для Ingress

apiVersion: networking.k8s.io/v1 kind: Ingress metadata:   name: minimal-ingress   annotations:     nginx.ingress.kubernetes.io/rewrite-target: / spec:   rules:   - http:       paths:       - path: /testpath         pathType: Prefix         backend:           service:             name: test             port:               number: 80

Толкование Перевод

  • 1 ingress

    1. вход; право входа control of ingress and egress — контроль за входом и выходом 2. доступ; вхождение; проникновение; поступление ingress of air — вторжение воздуха ingress of impurity — поступление примесей contamination ingress — поступление примесей oil ingress — попадание масла; поступление масла makeup water ingress — поступление подпиточной воды impurity ingress — поступление примесей; ввод примесей

    English-Russian big polytechnic dictionary > ingress

  • 2 ingress

    доступ, вход ingress of oil ( gas, water) — поступление нефти (газа, воды) * * * 1) поступление; проникновение 2) проявлениеingress of gas — ingress of oil — ingress of water — mud filtrate ingress — slurry ingress * * * проявление

    Англо-русский словарь нефтегазовой промышленности > ingress

  • 3 ingress

    доступ, вход, проникновение ingress of air — ingress of contamination — ingress of moisture into a mechanism * * * 1.   вход; право входа 2.   доступ; вхождение; проникновение; поступление — ingress of air — water ingress through cracks

    Англо-русский строительный словарь > ingress

  • 4 ingress

    доступ; вход (воздуха, жидкости)ingress of contamination — ingress of dirt — ingress of dust — ingress of gas — ingress of moisture

    Англо-русский словарь по машиностроению > ingress

  • 5 ingress

    проникновение; поступление; попадание; натечка; натекание; подсос; присос; доступ impurity ingress — поступление примесей; ввод примесей makeup water ingress — поступление подпиточной воды oil ingress — попадание масла; поступление масла air ingress — натечки воздуха; натекание воздуха contamination ingress — поступление примесей

    English-Russian dictionary on nuclear energy > ingress

  • 6 ingress

    [ʹıngres] книжн. 1. проникновение, доступ; вхождение

    the ingress of air into the lungs — поступление воздуха в лёгкие

    2. вход

    ingress was prohibited — вход был запрещён

    free ingress — свободный доступ

    open to ingress — открытый для доступа

    НБАРС > ingress

  • 7 ingress

    вход имя существительное: вход (entry, entrance, login, inlet, admission, ingress) доступ (access, approach, entrance, admission, admittance, ingress) вступительный взнос (entrance fee, admission fee, fee, initiation fee, affiliation fee, ingress) право входа (entree, entrance, ingress)

    Англо-русский синонимический словарь > ingress

  • 8 ingress

    ingress
    n 1.   вход; право входа 2.   доступ; вхождение; проникновение; поступление — ingress of air — water ingress through cracks

Англо-русский словарь строительных терминов > ingress

9 ingress

1) проникновение извне 2) вхождение 3) доступ – ingress of dirt – ingress of dust – ingress of moisture

Англо-русский технический словарь > ingress

10 ingress

1) вхождение; присутствие 2) проникновение извне; попадание (внутрь)ingress of dirtingress of dustingress of moisture

English-Russian scientific dictionary > ingress

11 ingress

1. n книжн. проникновение, доступ; вхождение the ingress of air into the lungs — поступление воздуха в лёгкие dirt ingress — проникновение грязи 2. n книжн. вход ingress was prohibited — вход был запрещён 3. n книжн. юр. право входа; разрешение на вход 4. n книжн. астр. погружение в тень Синонимический ряд: 1. advent (noun) accession; advent; alighting; appearance; arrival; coming; landing 2. door (noun) access; adit; admission; admittance; door; entrance; entree; entry; ingression; introduction; way 3. enter (verb) come in; enter; go in; penetrate

English-Russian base dictionary > ingress

12 ingress

вход , доступ; выход ; попадание low-altitude ingress night/in-weather ingress water ingress

Авиасловарь > ingress

13 ingress

1) доступ; вход 2) попадание dirt ingress — swarf ingress

English-Russian dictionary of mechanical engineering and automation > ingress

14 ingress

вход в район цели; путь подхода; выход ; — ingress to crossing — target ingress in cloud cover

English-Russian military dictionary > ingress

15 ingress

ingress [ˊɪngres] n 1) вход, до́ступ 2) пра́во вхо́да

Англо-русский словарь Мюллера > ingress

16 ingress

[‘ɪngres] 1) Общая лексика: вход, вхождение, доступ, право входа, проникновение, выход , въезд, выезд/въезд 2) Медицина: осеменение 3) Военный термин: вход в район цели, путь подхода, выход 4) Техника: натекание, подсос, попадание 5) Химия: поступление 6) Строительство: проникновение 7) Юридический термин: разрешение на вход 8) Астрономия: погружение в тень 9) Горное дело: подача 10) Металлургия: втекание, приток 11) Вычислительная техника: точка входя в систему MPOA 12) Нефть: проявление 13) Холодильная техника: доступ , приток 14) Автоматика: попадание 15) Общая лексика: попадание 16) Авиационная медицина: посадка 17) Макаров: впитывание, поглощение, поступление воды, право доступа 18) Безопасность: вход

Универсальный англо-русский словарь > ingress

17 ingress

доступ, вход, проникновение (воздуха, жидкости) ingress of ground wafer — проникновение грунтовой воды

Англо-русский пожарно-технический словарь > ingress

18 ingress

[‘ɪngres] сущ. 1) а) вход, вхождение

the ingress of infection — инфицирование

б) вход, место для прохода внутрь Syn: entrance I, entry 2) доступ; свобода доступа; право доступа 4) уст. вступительный взнос Syn:

Англо-русский современный словарь > ingress

19 ingress

ingress вхождение

Персональный Сократ > ingress

20 ingress

проникновение dirt ingress — проникновение грязи

English-Russian big medical dictionary > ingress

Страницы

См. также в других словарях:

  • Ingress — may refer to:*The act of entering. Antonym of egress. *A type of noise typically encountered when using coaxial cable *Ingress Bell (1834 1913), an English architect *Ingress filtering, a computer network packet filtering technique *Ingress… …   Wikipedia

  • ingress — in·gress / in ˌgres/ n 1: the act of entering 2: the power or liberty of access compare egress Merriam Webster’s Dictionary of Law. Merriam Webster. 1996 …   Law dictionary

  • Ingress — Официальный логотип Ingress Разработчик NianticLabs@Google …   Википедия

  • Ingress — In gress, n. [L. ingressus, fr. ingredi. See {Ingredient}.] [1913 Webster] 1. The act of entering; entrance; as, the ingress of air into the lungs. [1913 Webster] 2. Power or liberty of entrance or access; means of entering; as, all ingress was… …   The Collaborative International Dictionary of English

  • Ingress — In gress, v. i. To go in; to enter. [R.] [1913 Webster] …   The Collaborative International Dictionary of English

  • ingress — (n.) mid 15c., from L. ingressus an advance; walking; an entry, from pp. stem of ingredi to step into, enter (see INGREDIENT (Cf. ingredient)). The verb, sometimes said to be Amer.Eng., is attested from early 14c …   Etymology dictionary

  • ingress — *entrance, entry, entrée, access Antonyms: egress …   New Dictionary of Synonyms

  • ingress — ► NOUN 1) the action or fact of entering or coming in. 2) a place or means of access. DERIVATIVES ingression noun. ORIGIN Latin ingressus, from ingredi enter …   English terms dictionary

  • ingress — [in gresh′ənin′gres΄] n. [ME &LT; L ingressus, pp. of ingredi, to step into, enter &LT; in , into + gradi, to go: see GRADE] 1. the act of entering: also ingression [in gresh′ən] 2. the right or permission to enter 3. a place or means of… …   English World dictionary

  • Ingress — (Roget s Thesaurus) &GT;Motion into. &LT; N PARAG:Ingress &GT;N GRP: N 1 Sgm: N 1 ingress ingress Sgm: N 1 entrance entrance entry Sgm: N 1 introgression introgression Sgm: N 1 influx influx intrusion inroad inc …   English dictionary for students

  • Ingress — Unter Ingress (engl. Eindringen) versteht man elektromagnetische Störungen, die in Koaxialkabeln durch Sendeanlagen, Haushaltsgeräte, Schaltnetzteile usw. entstehen. Die Störungen treten vor allem dann auf, wenn das Kabel oder dessen Schirmung… …   Deutsch Wikipedia

Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
А как считаете Вы?
Напишите в комментариях, что вы думаете – согласны
ли со статьей или есть что добавить?
Добавить комментарий