Конфигурация пользовательских пользовательских ошибок для Nginx Ingress Controller - PullRequest
0 голосов
/ 29 апреля 2020

У меня Nginx Контроллер входа, развернутый в Nginx пространстве имен моего кластера kubernetes. Я создаю собственное бэкэнд-изображение и развертываю его в Nginx пространстве имен как nginx бэкэнд по умолчанию. Теперь он должен обслуживать пользовательские страницы ошибок http, такие как 404, 500 и 503et c.

. Я собрал одну и развернул ее с помощью helm-chart с файлом ниже default.conf, но он обслуживает индекс. html для 404 ошибка и обслуживание только по умолчанию 503 ошибка (не мой пользовательский 503. html страница)

server {
listen 8080 default_server;
root /var/www/html;
index index.html;
location / {
}
location /healthz {
    access_log off;
    return 200 "healthy\n";
}
location /metrics {
    stub_status on;
}
error_page 404 /404.html;
location = /404.html {
    internal;
}
error_page 500 /500.html;
location = /500.html {
    internal;
}
error_page 503 /503.html;
location = /503.html {
    internal;
}

}

Dockerfile

FROM nginxinc/nginx-unprivileged
USER root
RUN rm /etc/nginx/conf.d/default.conf && \
ln -sf /dev/stdout /var/log/nginx/access.log && \
ln -sf /dev/stderr /var/log/nginx/error.log
COPY ./default.conf /etc/nginx/conf.d/default.conf
COPY content/ /var/www/html/
CMD ["nginx", "-g", "daemon off;"]

Пожалуйста, спросите меня, если вам нужно больше информации. Ваша помощь будет высоко ценится, спасибо.

1 Ответ

0 голосов
/ 04 мая 2020

Чтобы обновить страницу ошибки по умолчанию, отредактируйте карту конфигурации nginx -ingress-controller. Вставьте новый ключ custom-http-errors с кодом состояния HTTP, для которого вы хотите изменить страницу ошибки, например:

apiVersion: v1  
kind: ConfigMap  
data:  
  custom-http-errors: 404,413,503 
  enable-vts-status: "false"  
metadata:  
  labels:  
    app: nginx-ingress  
    chart: nginx-ingress-1.6.0  
    component: controller  
    heritage: Tiller  
    release: nginx-ingress  
  name: nginx-ingress-controller  
  namespace: kube-system

Теперь снова запустите тестовую команду,

curl -i "[http://err-test.192.168.64.5.nip.io/err?code=413](http://err-test.192.168.64.5.nip.io/err?code=413)"  
HTTP/1.1 404 Not Found  
Server: nginx/1.15.10  
Date: Sun, 05 May 2019 11:36:04 GMT  
Content-Type: text/plain; charset=utf-8  
Content-Length: 21  
Connection: closedefault backend - 404

Это НЕ , что вы хотите. Входной контроллер Nginx правильно фиксирует код состояния HTTP, который мы хотим настроить. Тем не менее, по умолчанию Nginx «default-backend» (Изображение: k8s.gcr.io/defaultbackend:1.4) просто возвращает статус 404 независимо от фактического кода состояния, который приложение намеревается вернуть. Это вызовет проблему, если код состояния будет использоваться для других целей.

В документации Nginx Ingress Controller вы можете увидеть:

Ожидается, что пользовательский бэкэнд вернет правильный код состояния HTTP вместо 200. NGINX не изменяет ответ от пользовательского бэкэнда по умолчанию.

Затем в Dockerfile вы должны добавить путь к определенным ошибкам пользовательского бэкэнда:

ADD custom-error-pages /  
CMD ["/custom-error-pages"]

Построить образ и пу sh в docker хаб. Повторно разверните рулевую диаграмму Nginx в K3s, она выглядит следующим образом:

apiVersion: k3s.cattle.io/v1  
kind: HelmChart  
metadata:  
  name: nginx-ingress
  namespace: kube-system  
spec:  
  chart: stable/nginx-ingress  
  targetNamespace: kube-system  
  valuesContent: |-  
    defaultBackend:  
      enabled: true  
      name: default-backend  
      image:  
        repository: your-image/custom-error-page  
        tag: latest

В k8s просто выполните:

helm upgrade nginx-ingress stable/nginx-ingress --set defaultBackendService.enabled=true --set defaultBackend.image.repository=your-image/custom-error-page --set defaultBackend.image.tag=latest

Затем снова протестируйте и выполните ту же команду curl:

➜ curl -i "[http://err-test.192.168.64.5.nip.io/err?code=413](http://err-test.192.168.64.5.nip.io/err?code=413)"  
HTTP/1.1 413 Request Entity Too Large  
Server: nginx/1.15.10  
Date: Sun, 05 May 2019 12:09:21 GMT  
Content-Type: */*  
Transfer-Encoding: chunked  
Connection: close4xx html

У вас будет пользовательская страница ошибки с правильным кодом состояния HTTP.

Поскольку вы перехватываете состояние 503, уменьшите масштаб реплики.

Выполните команду:

$ kubectl scale deploy err-status-test --replicas=0

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

Более подробную информацию вы можете найти здесь: заказ серверные-ошибки .

...