URL-адрес nginx istio не разрешен и возвращает код состояния 426

у меня есть сервис, который называется image-api. image-api доступен в модуле, но nginx возвращает код состояния 426

после запуска этой команды вернуть ожидаемые данные

curl image-api.gateways.svc.cluster.local:8000

но nginx возвращает код состояния 426.

если заменить собственный URL-адрес image-api на URL-адрес istio, тогда nginx вернет код состояния 200.

/etc/nginx.nginx.conf

worker_processes 8;

events {
    worker_connections 1024;
}

http {
    resolver kube-dns.kube-system valid=10s;

    server_tokens off;

    server {
        listen 8080;

        location ~ ^/(\w+) {
            # ISTIO URL
        proxy_pass http://image-api.gateways.svc.cluster.local:8000$request_uri;
            # MAIN URL
#       proxy_pass http://image-api.main.svc.cluster.local:8000$request_uri;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
}
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
0
0
95
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Как указано в документе:

Код состояния 426 возникает, когда клиент пытается обновить подключение к более новой версии протокола, но сервер отказываясь сделать это.

Это может произойти по нескольким причинам, в том числе:

  1. Несовместимость между клиентской и серверной версиями протокола.

  2. Сервер может не поддерживать запрошенную версию протокола.

  3. Сервер может быть настроен на разрешение использования только определенных версий протокола.

  4. Возможно, на сервере возникли технические проблемы или проводятся работы по техническому обслуживанию, из-за которых он не может обновить соединение.

Вам необходимо обновить версию протокола HTTP в конфигурации NGINX, как показано здесь:

Этот маршрут предназначен для устаревшего API, который включил кэш NGINX по соображениям производительности, но в конфигурации прокси этого маршрута отсутствует общая конфигурация proxy_http_version 1.1, которая по умолчанию использует HTTP 1.0 для всех восходящих потоков NGINX.

И Envoy вернет HTTP 426, если запрос HTTP 1.0.

Ответ принят как подходящий

Спасибо @fariya-rahmat. его ответ помогает мне найти ответ.

добавить proxy_http_version 1.1 необходимо, но этого недостаточно.

основная проблема в том, что proxy_set_header Host $host;envoy proxy обнаруживает целевую службу по имени хоста, и это неправильно. если удалить proxy_set_header, имя хоста устанавливается автоматически на основе proxy_pass.

Другие вопросы по теме