SignalR на kubernetes с давайте шифровать входной сервис - PullRequest
0 голосов
/ 23 января 2019

У меня есть приложение dotnet core signalR на сервисах kubernetes. Вдобавок ко всему, служба шифрования доступа предоставляет мне сертификат SSL.

Я могу получить веб-сайт в разделе «Зашифруем сертификат», и все кажется действительным.

Если я хочу подключить signalR по протоколу wss, каждые 2 секунды соединение прерывается.

Ошибка:

{"error":"Handshake was canceled."}
The connection was terminated cleanly with status code 1000 (NORMAL).

Журнал сервера:

info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
      Request starting HTTP/1.1 GET http://DOMAIN/ChatHub  
dbug: Microsoft.AspNetCore.Http.Connections.Internal.HttpConnectionManager[1]
      New connection XPqUHoK9b4PAeF_bKwQtIg created.
dbug: Microsoft.AspNetCore.Http.Connections.Internal.HttpConnectionDispatcher[4]
      Establishing new connection.
dbug: Microsoft.AspNetCore.SignalR.HubConnectionHandler[5]
      OnConnectedAsync started.
dbug: Microsoft.AspNetCore.Http.Connections.Internal.Transports.WebSocketsTransport[1]
      Socket opened using Sub-Protocol: '(null)'.
dbug: Microsoft.AspNetCore.SignalR.HubConnectionContext[2]
      Handshake was canceled.
dbug: Microsoft.AspNetCore.Http.Connections.Internal.Transports.WebSocketsTransport[7]
      Waiting for the client to close the socket.
dbug: Microsoft.AspNetCore.Http.Connections.Internal.Transports.WebSocketsTransport[2]
      Socket closed.
dbug: Microsoft.AspNetCore.Http.Connections.Internal.HttpConnectionManager[2]
      Removing connection XPqUHoK9b4PAeF_bKwQtIg from the list of connections.

Версии приложения:

netcoreapp2.2
Microsoft.AspNet.SignalR -v 2.4.0

Я пробовал также чистые соединения через веб-сокет, но это было то же самое. Как я могу решить эту проблему?

PS: Сработало, если я определил физический сертификат SSL для сервера kestrel.

1 Ответ

0 голосов
/ 14 марта 2019

У меня была похожая проблема, и вот как мне это удалось примечание: это решение является рабочим решением для чистого websocket в dotnet core 2.2, я не тестировал его с signalR

использовать Apache в качестве прокси Microsoft Doc здесь

<IfModule mod_ssl.c>
<VirtualHost *:443>
  ProxyPreserveHost On
  RewriteEngine On
  RewriteCond %{HTTP:Upgrade} =websocket [NC]
  RewriteRule /(.*)           ws://127.0.0.1:81/$1 [P,L]
  RewriteCond %{HTTP:Upgrade} !=websocket [NC]
  RewriteRule /(.*)           http://127.0.0.1:81/$1 [P,L]

    ProxyPass / http://127.0.0.1:81/
    ProxyPassReverse / http://127.0.0.1:81/
</VirtualHost>
</IfModule>

так что в основном трафик будет HTTPS, пока Apache, а затем Apache будет действовать как прокси и передавать трафик Kestrel. это может показаться сложным для настройки, но это не так, - настроить Apache для работы с HTTP & WS затем настройте шифрование давайте так:

sudo add-apt-repository ppa:certbot/certbot
sudo apt install python-certbot-apache
sudo nano /etc/apache2/sites-available/example.com.conf
...
ServerName example.com;
...
sudo apache2ctl configtest
sudo systemctl reload apache2
sudo ufw allow 'Apache Full'
sudo ufw delete allow 'Apache'

следующая строка команды настроит вашу конфигурацию SSL Apache

sudo certbot --apache -d example.com -d www.example.com

тогда вы сможете получить доступ к своему сайту через HTTPS & WSS. До сих пор это не удавалось:)

...