API приложения dotnet не работают на kubernetes - PullRequest
0 голосов
/ 12 февраля 2019

Я устанавливаю основное приложение dotnet в кластер kubernetes и получаю сообщение об ошибке «Невозможно запустить kestrel».

Dockerfile работает нормально на локальной машине.

at Microsoft.AspNetCore.Hosting.ListenOptionsHttpsExtensions.UseHttps(ListenOptions listenOptions)
at Microsoft.AspNetCore.Hosting.ListenOptionsHttpsExtensions.UseHttps(ListenOptions listenOptions, Action`1 configureOptions)
For more information on configuring HTTPS see https://go.microsoft.com/fwlink/?linkid=848054.
To generate a developer certificate run 'dotnet dev-certs https'. To trust the certificate (Windows and macOS only) run 'dotnet dev-certs https --trust'.
Unhandled Exception: System.InvalidOperationException: Unable to configure HTTPS endpoint. No server certificate was specified, and the default developer certificate could not be found.
at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServer.StartAsync[TContext](IHttpApplication`1 application, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.BindAsync(IServerAddressesFeature addresses, KestrelServerOptions serverOptions, ILogger logger, Func`2 createBinding)
at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.AddressesStrategy.BindAsync(AddressBindContext context)
at Microsoft.AspNetCore.Hosting.ListenOptionsHttpsExtensions.UseHttps(ListenOptions listenOptions)
at Microsoft.AspNetCore.Hosting.ListenOptionsHttpsExtensions.UseHttps(ListenOptions listenOptions, Action`1 configureOptions)
For more information on configuring HTTPS see https://go.microsoft.com/fwlink/?linkid=848054.
To generate a developer certificate run 'dotnet dev-certs https'. To trust the certificate (Windows and macOS only) run 'dotnet dev-certs https --trust'.
System.InvalidOperationException: Unable to configure HTTPS endpoint. No server certificate was specified, and the default developer certificate could not be found.
Unable to start Kestrel.

Мой dockerfile:

[...build step]
FROM microsoft/dotnet:2.1-aspnetcore-runtime
COPY --from=build-env /app/out ./app
ENV PORT=5000
ENV ASPNETCORE_URLS=http://+:${PORT}
WORKDIR /app
EXPOSE $PORT
ENTRYPOINT [ "dotnet", "Gateway.dll" ]

Я ожидал, что приложение успешно запущено, но я получаю эту ошибку "не удалось запустить kestrel".

[ ОБНОВЛЕНИЕ ]

Я удалил порт https из приложения и повторил попытку без https, но теперь приложение просто запускается и останавливается без каких-либо ошибок или предупреждений.Журнал контейнера представлен ниже:

enter image description here

Запуск локально с использованием запуска по сети или образа здания и запуск из контейнера, все работает.Приложение просто закрылось в kubernetes.

Я использую ядро ​​dotnet 2.2

[ ОБНОВЛЕНИЕ ]

Я создал сертификат, добавленный в проект, установка в kestrel, и я получил тот же результат.Локальный хост с использованием docker imagem работает, но в kubernetes (облаке Google) он просто отключается сразу после запуска.

localhost:

$ docker run --rm -it -p 5000:5000/tcp -p 5001:5001/tcp juooo:latest
warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[35]
No XML encryptor configured. Key {f7808ac5-0a0d-47d0-86cb-c605c2db84a3} may be persisted to storage in unencrypted form.
warn: Microsoft.AspNetCore.Server.Kestrel[0]
Overriding address(es) 'https://+:5001, http://+:5000'. Binding to endpoints defined in UseKestrel() instead.
Hosting environment: Production
Content root path: /app
Now listening on: https://0.0.0.0:5001
Application started. Press Ctrl+C to shut down.

Ответы [ 3 ]

0 голосов
/ 15 февраля 2019

Я обнаружил журнал событий с ошибкой kubernetes, в которой говорится, что kubernetes не смог попасть (: 5000 /).Поэтому я попытался создать контроллер, нацеленный на корневое приложение (потому что это API, поэтому у него нет рута, как у веб-приложения), и это сработало.

0 голосов
/ 21 февраля 2019

Я почти уверен, что вам нужно открыть правило брандмауэра для запуска на любом порту, отличном от 80, что-то вроде:

gcloud compute firewall-rules create test-node-port --allow tcp:5000

Взято из инструкции по работе с kubernetes, расположенной здесь: https://cloud.google.com/kubernetes-engine/docs/how-to/exposing-apps

0 голосов
/ 12 февраля 2019

Кажется, проблема в том, что SSL-сертификат неправильно настроен при создании образа Docker.На компьютере разработчика он будет использовать сертификат разработчика, однако на других машинах он должен где-то храниться.Проверьте это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...