У меня есть приложение, созданное как образ Docker, который правильно работает локально, но не работает в Google Cloud Run с ошибкой восходящего подключения или отключением/сбросом перед заголовками. Причина сброса: ошибка протокола
Приложение прослушивает 0.0.0.0:8080 и не требует аутентификации.Я запускаю его в Docker локально с помощью
docker run --rm --name myapp -p 8080:8080 myapp:1.0
С помощью curl локально я получаю успешный ответ на /
$ curl -v локальный хост: 8080
* Попытка ::1...
* Установлен TCP_NODELAY
* Подключен к локальному хосту (::1) порт 8080 (#0)
> ПОЛУЧИТЬ/HTTP/1.1
> Хост: локальный: 8080
> Агент пользователя: curl/7.64.1
> Принять: */*
>
< HTTP/1.1 200 ОК
< Тип содержимого: приложение/json
< Варьировать: Происхождение
< Дата: суббота, 24 июля 2021 г., 13:54:11 по Гринвичу
< Длина содержимого: 2
<
* Соединение №0 с хостом localhost осталось нетронутым
OK* Закрытие соединения 0
Я развернул это в облаке Google, работающем как служба, и при выполнении первого запроса я вижу выходные данные журнала из моего приложения в журналах запуска облака, показывающие, что оно запущено и прослушивает порт 8080.
Однако запрос не выполняется с
«Ошибка восходящего подключения или отключение/сброс до заголовков. Причина сброса: ошибка протокола»
Полный вывод из curl -v https://cloudrun-srv-stuff.a.run.app/ составляет
* Попытка 216.239.36.53...
* Установлен TCP_NODELAY
* Подключено к порту cloudrun-srv-lz5wvvl32a-ez.a.run.app (216.239.36.53) 443 (#0)
* ALPN, предлагая h2
* ALPN, предлагающий http/1.1
* успешно установить места проверки сертификата:
* CA-файл: /etc/ssl/cert.pem
CApath: нет
* TLSv1.2 (OUT), рукопожатие TLS, приветствие клиента (1):
* TLSv1.2 (IN), рукопожатие TLS, приветствие сервера (2):
* TLSv1.2 (IN), рукопожатие TLS, сертификат (11):
* TLSv1.2 (IN), рукопожатие TLS, обмен ключами сервера (12):
* TLSv1.2 (IN), рукопожатие TLS, сервер готов (14):
* TLSv1.2 (OUT), рукопожатие TLS, обмен ключами клиента (16):
* TLSv1.2 (OUT), изменение шифрования TLS, изменение спецификации шифрования (1):
* TLSv1.2 (OUT), рукопожатие TLS, Готово (20):
* TLSv1.2 (IN), изменение шифрования TLS, изменение спецификации шифрования (1):
* TLSv1.2 (IN), рукопожатие TLS, Готово (20):
* SSL-соединение с использованием TLSv1.2/ECDHE-ECDSA-CHACHA20-POLY1305
* ALPN, сервер принят для использования h2
*Сертификат сервера:
* Тема: C=США; ST=Калифорния; L = вид на горы; О = Google LLC; CN=*.a.run.app
* дата начала: 28 июня 01:08:46 2021 по Гринвичу
* срок действия: 20 сентября 01:08:45 2021 по Гринвичу
* subjectAltName: хост "cloudrun-srv-stuff.a.run.app" соответствует сертификату "*.a.run.app"
* эмитент: C=US; O=службы доверия Google; CN=ГТС СА 1O1
* Проверка сертификата SSL в порядке.
* Используя HTTP2, сервер поддерживает многократное использование
* Состояние соединения изменено (HTTP/2 подтверждено)
* Копирование данных HTTP/2 из буфера потока в буфер соединения после обновления: len=0
* Использование идентификатора потока: 1 (простой дескриптор 0x7f83b4810a00)
> ПОЛУЧИТЬ/HTTP/2
> Хост: cloudrun-srv-stuff.a.run.app
> Агент пользователя: curl/7.64.1
> Принять: */*
>
* Состояние соединения изменено (MAX_CONCURRENT_STREAMS == 100)!
< HTTP/2 502
<длина содержимого: 87
<тип содержимого: текстовый/обычный
<дата: суббота, 24 июля 2021 г., 13:58:13 по Гринвичу
< сервер: Google Frontend
< x-cloud-trace-context: 1370fab1a02839b367048f855593cbef/5890123523738625787;o=1
<alt-svc: h3=":443"; ма=2592000,ч3-29=":443"; ма=2592000,h3-T051=":443"; ма=2592000,h3-Q050=":443"; ма=2592000,h3-Q046=":443"; ма=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ма=2592000; v="46,43"
<
Каковы следующие шаги в отладке этого?